66

我试图让 Mercurial 忽略配置文件,但我无法让它工作。

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

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

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

4

3 回答 3

70
  • .hgignore 不需要在 init 之前创建
  • 如果配置文件将被其他人使用,您最好提交 .hgignore 以便其他人不必创建它,但 mercurial 不需要这样做来忽略您的本地文件(参见示例)
  • 是的 .hgignore 必须在根目录中

简单的例子。

初始化回购:

$ mkdir test 
$ cd test 
$ hg init 

创建文件

$ touch foo 
$ hg st 
? foo 

现在在你的 repo 的根目录中创建一个 .hgignore:

$ echo 'foo' > .hgignore 

foo现在被忽略:

$ hg st 
? .hgignore 

请注意,不需要提交 .hgignore 即可。

有点棘手

如果在 repo 中同时提交了配置文件和 .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用户在本地复制和修改。这里的缺点是您不会轻易跟踪版本之间的更改。

于 2009-06-08T15:07:18.090 回答
29

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

要从存储库中删除配置文件,您可以使用

hg remove -Af file.cfg

这将从存储库中删除文件(一旦提交),而不删除您的本地文件。请参阅hg help remove 但是,现在在 repo 中记录了一个删除,当您或其他任何人更新该修订版时,Mercurial 将删除该文件

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

hg rename file.cfg file.cfg.example
于 2009-10-16T17:01:28.350 回答
15

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

syntax: glob

.hgignore

或者,只需将 .hgignore 文件检入本地克隆...

于 2009-06-08T15:02:10.330 回答