Mercurial ignore file

前端 未结 3 1347
遇见更好的自我
遇见更好的自我 2020-12-04 09:41

I\'m trying to get Mercurial to ignore a configuration file, but I\'m failing to get it working.

I have created a repository on my server with hg init a

相关标签:
3条回答
  • 2020-12-04 10:06
    • .hgignore does not need to be created before init
    • It the config file will be used by others, you'd better commit the .hgignore so others dont have to create it, but this is not needed for mercurial to ignore your local files (see example)
    • Yes .hgignore has to be in the root directory

    Simple example.

    Init the repo:

    $ mkdir test 
    $ cd test 
    $ hg init 
    

    Create a file

    $ touch foo 
    $ hg st 
    ? foo 
    

    Now create a .hgignore, in the root directory of your repo:

    $ echo 'foo' > .hgignore 
    

    foo is now ignored:

    $ hg st 
    ? .hgignore 
    

    Note that .hgignore does not need to be committed for this to work.

    A bit more tricky

    If both the config file and a .hgignore (ignoring the config file) are committed in the repo, then yes, the config file changes will be tracked (in other words, .hgignore will have no effect)

    Creating config and commit it

    $ touch config
    $ hg ci config -Am 'adding conf'
    

    Ignore it:

    $ echo 'config' >> .hgignore
    

    Commit .hgignore:

    $ hg ci .hgignore -Am '.hgignore'
    

    Then if you clone the repo:

    $ cd ..
    $ hg clone test other-user
    $ cd other-user
    

    and modify config:

    $ echo 'new config param' >> config
    

    then hg will show the changes:

    $ hg st
    M config
    

    How to deal with this?

    You probably want to have a main default configuration file, that is versioned, in the repository, global.cfg

    And you will ask users to create a local.cfg where they will put their local settings. And your script will source the local.cfg if present: the local settings override the global ones. Of course, add a line to .hgignore to ignore local.cfg ;)

    Alternative: no global config file, only a config.example that users copy and modify locally. The con here is that you will not keep track easily of changes between versions.

    0 讨论(0)
  • 2020-12-04 10:14

    Even if you have ignored files, Mercurial will track them once they have been added to the repository.

    To remove your config file from the repository, you can use

    hg remove -Af file.cfg
    

    This will remove the file from from the repository (once committed) without deleting your local file. See hg help remove However, there is now a delete recorded in the repo, and Mercurial will remove that file when your or anyone else updates across that revision.

    You could also rename it and have people copy the master to their local file, but you will need to coordinate updates of the local file.

    hg rename file.cfg file.cfg.example
    
    0 讨论(0)
  • 2020-12-04 10:28

    Add the .hgignore file itself to the .hgignore file:

    syntax: glob
    
    .hgignore
    

    or, just check the .hgignore file in to your local clone...

    0 讨论(0)
提交回复
热议问题