40

有没有办法在使用 mercurial 提交时忽略对某些文件的更改?

我有一个特定的情况,我们有一个默认的 oracle tnsnames.ora 文件指向 127.0.0.1,但是一些开发人员会修改它以指向其他系统,但我们不想更改默认文件。

在颠覆中,我简单地将其添加到了提交时忽略更改列表中。有没有办法在 mercurial 中做到这一点?

4

4 回答 4

52

如果你想从“hg commit”命令中省略的文件已经被“跟踪”了,你应该使用 -X 选项。传递给 -X 的模式非常灵活,例如可以运行:

% hg stat
A etc/foo.conf
M src/bar.c
M lib/libbar/loader.c
% hg commit -X '**.conf'

避免提交任何带有“.conf”扩展名的文件,无论它在源代码树中有多深。在上面显示的工作区中,这将提交“src/bar.c”和“lib/libbar/loader.c”,但不会提交“etc/foo.conf”。

要排除多种文件名模式,请使用多个 -X 选项,即:

% hg commit -X '**.conf' -X '**.sh'
于 2009-05-22T01:16:36.990 回答
22

传统上,解决这个问题的方法不是对文件本身进行版本控制,而是将其副本作为模板供其他人使用。

所以你会hg mv tnsnames.ora tnsnames.ora-template,然后提交,然后将 tnsnames.ora-template 的直接文件系统副本复制到 tnsnames.ora,并将 tnsnames.ora 添加到 .hgignore 文件。

对模板的后续更改仍将被推出,但它们实际上不会改变工作环境,除非有人将模板复制到实际文件中。

于 2009-05-21T03:18:03.943 回答
1

您可以将 commit 别名为“hg commit -X exclude_file.ext”之类的东西,我从未使用过 mercurial,所以我只是在此处查看手册页。

于 2009-05-19T19:29:25.033 回答
-2

在 Mercurial 的文档中查找 .hgignore 文件。

这是一个示例忽略文件。

       # use glob syntax.
       syntax: glob

       *.elc
       *.pyc
       *~

       # switch to regexp syntax.
       syntax: regexp
       ^\.pc/
于 2009-05-19T19:21:24.877 回答