我正在尝试让Mercurial忽略配置文件,但我没能让它工作。
我在服务器上用hg init
创建了一个存储库,并将该存储库克隆到我的计算机上。然后,我希望能够编辑configurationj文件,但不能将这些更改提交回服务器。
我已尝试在我的克隆的根目录中创建.hgignore
,但Mercurial使用?
标记文件,无论我是否提交,它仍然会继续记录我的配置更改。
我是否在错误的位置创建.hgignore
文件,是否需要提交此文件?是否需要在我在服务器上初始化存储库之前创建它?
答案 0 :(得分:69)
初始化回购:
$ mkdir test
$ cd test
$ hg init
创建文件
$ touch foo
$ hg st
? foo
现在在您的仓库的根目录中创建一个.hgignore:
$ echo 'foo' > .hgignore
foo
现在被忽略了:
$ hg st
? .hgignore
请注意,.hgignore不需要提交即可。
如果配置文件和.hgignore(忽略配置文件)都在repo中提交,则是,将跟踪配置文件更改(换句话说,.hgignore将不起作用)
创建配置并提交
$ touch config
$ hg ci config -Am 'adding conf'
忽略它:
$ echo 'config' >> .hgignore
提交.hgignore:
$ hg ci .hgignore -Am '.hgignore'
然后,如果你克隆了回购:
$ cd ..
$ hg clone test other-user
$ cd other-user
并修改config:
$ echo 'new config param' >> config
然后hg将显示更改:
$ hg st
M config
您可能希望在存储库中有一个版本化的主要默认配置文件global.cfg
您将要求用户创建local.cfg
,他们将在其中设置本地设置。如果存在,您的脚本将获取local.cfg
:本地设置会覆盖全局设置。当然,在.hgignore
添加一行以忽略local.cfg
;)
替代方案:没有全局配置文件,只有用户在本地复制和修改的config.example
。这里的问题是你不会轻易跟踪版本之间的变化。
答案 1 :(得分:29)
即使您忽略了文件,Mercurial也会在将它们添加到存储库后跟踪它们。
要从存储库中删除配置文件,可以使用
hg remove -Af file.cfg
这将从存储库中删除文件(一旦提交),而不删除本地文件。请参阅hg help remove
但是,现在回购中会记录删除,当您或其他人在该修订版中进行更新时, Mercurial会删除该文件。
您也可以重命名它并让人们将主副本复制到本地文件,但您需要协调本地文件的更新。
hg rename file.cfg file.cfg.example
答案 2 :(得分:15)
将.hgignore文件本身添加到.hgignore文件中:
syntax: glob
.hgignore
或者,只需检查.hgignore文件到您的本地克隆...