Mercurial忽略文件

我试图让Mercurial忽略一个configuration文件,但我没能得到它的工作。

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

我已经尝试在我的克隆的根目录中创build一个.hgignore ,但是Mercurial用一个? 以及我是否承诺它仍然继续logging我的configuration更改。

我在错误的地方创build.hgignore文件,这个文件需要被提交吗? 在我启动服务器上的存储库之前是否需要创build它?

  • .hgignore不需要在init之前创build
  • 这个configuration文件会被其他人使用,你最好提交.hgignore,这样别人就不必创build它了, 但是mercurial不需要忽略你的本地文件 (参见示例)
  • 是.hgignore必须位于根目录中

简单的例子。

初始化回购:

 $ mkdir test $ cd test $ hg init 

创build一个文件

 $ touch foo $ hg st ? foo 

现在在repo的根目录下创build一个.hgignore:

 $ echo 'foo' > .hgignore 

foo现在被忽略了:

 $ hg st ? .hgignore 

请注意.hgignore不需要承担这个工作。

有点棘手

如果configuration文件和.hgignore(忽略configuration文件)在repo中提交,那么是的,configuration文件的变化将被跟踪(换句话说,.hgignore将不起作用)

创buildconfiguration并提交它

 $ 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 

并修改configuration:

 $ echo 'new config param' >> config 

那么hg会显示更改:

 $ hg st M config 

如何处理这个?

您可能希望在存储库global.cfg拥有一个主版本的默认configuration文件

你会要求用户创build一个local.cfg他们将把他们的本地设置。 如果有的话,你的脚本将获得local.cfg :本地设置覆盖全局设置。 当然,添加一行到.hgignore来忽略local.cfg ;)

可选:没有全局configuration文件,只有用户在本地复制和修改的config.example 。 这里的关键是你不会轻易跟踪版本之间的变化。

即使您忽略了文件,Mercurial也会在添加到存储库后对其进行跟踪。

要从存储库中删除你的configuration文件,你可以使用

 hg remove -Af file.cfg 

这将从版本库中删除文件(一旦提交),而不删除您的本地文件。 请参阅hg help remove但是,现在有一个删除logging在回购中, 当您或其他人在该修订版本中更新时Mercurial将删除该文件

您也可以重命名它,并让人将主人复制到他们的本地文件,但您需要协调本地文件的更新。

 hg rename file.cfg file.cfg.example 

将.hgignore文件本身添加到.hgignore文件中:

 syntax: glob .hgignore 

或者,只需检查.hgignore文件到您的本地克隆…