Mercurial忽略文件

时间:2009-06-08 14:59:05

标签: mercurial ignore hgignore

我正在尝试让Mercurial忽略配置文件,但我没能让它工作。

我在服务器上用hg init创建了一个存储库,并将该存储库克隆到我的计算机上。然后,我希望能够编辑configurationj文件,但不能将这些更改提交回服务器。

我已尝试在我的克隆的根目录中创建.hgignore,但Mercurial使用?标记文件,无论我是否提交,它仍然会继续记录我的配置更改。

我是否在错误的位置创建.hgignore文件,是否需要提交此文件?是否需要在我在服务器上初始化存储库之前创建它?

3 个答案:

答案 0 :(得分:69)

  • .hgignore不需要在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(忽略配置文件)都在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文件到您的本地克隆...