我试图让Mercurial忽略一个配置文件,但是我无法使它正常工作。
我在服务器上使用hg init
创建了一个仓库,并将该仓库克隆到了我的计算机上。我想编辑配置文件,但不想将更改提交回服务器。
我已经尝试在克隆的根目录下创建.hgignore
文件,但是Mercurial用?
标记该文件,无论我是否提交它,它仍然继续记录我的配置更改。
我是在错误的位置创建.hgignore
文件吗?这个文件需要被提交吗?它需要在我在服务器上初始化仓库之前创建吗?
初始化存储库:
$ mkdir test
$ cd test
$ hg init
创建一个文件
$ touch foo
$ hg st
? foo
现在,在您的代码库的根目录中创建一个名为.hgignore的文件:$ echo 'foo' > .hgignore
foo
现在被忽略:
$ hg st
? .hgignore
请注意,这不需要提交 .hgignore 文件也可以生效。
如果配置文件和一个忽略该配置文件的 .hgignore 文件都被提交到仓库中,则会跟踪配置文件更改(换句话说,.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
并修改配置:
$ echo 'new config param' >> config
然后 hg 将显示更改:
$ hg st
M config
您可能希望有一个主要的默认配置文件,即global.cfg
,它是版本化的,并在代码库中保存。
然后您可以要求用户创建一个local.cfg
文件,他们将在其中放置其本地设置。如果存在local.cfg
,则您的脚本将使用它:本地设置会覆盖全局设置。当然,添加一行到.hgignore
以忽略local.cfg
;)
另一种选择:没有全局配置文件,只有一个config.example
文件,用户需要复制并在本地修改。不过这个方法的缺点是你不能轻易地跟踪版本间的更改。
hg remove -Af file.cfg
这将从仓库中删除该文件(一旦提交),但不会删除本地文件。请参阅hg help remove
。然而,现在仓库中记录了删除操作,当你或其他人跨越该版本更新时,Mercurial将删除该文件。
你也可以将其重命名,并让其他人将主文件复制到他们的本地文件,但是你需要协调本地文件的更新。
hg rename file.cfg file.cfg.example
将 .hgignore 文件本身添加到 .hgignore 文件中:
syntax: glob
.hgignore
或者,只需将.hgignore文件检入到您的本地克隆中...