【发布时间】:2010-10-27 10:33:07
【问题描述】:
有没有办法在使用 mercurial 提交时忽略对某些文件的更改?
我有一个具体的情况,我们有一个默认的oracle tnsnames.ora 文件指向127.0.0.1,但是有些开发者会修改它指向其他系统,但是我们不想更改默认文件.
在 subversion 中,我简单地将其添加到了提交时忽略更改列表中。有没有办法在 mercurial 中做到这一点?
【问题讨论】:
有没有办法在使用 mercurial 提交时忽略对某些文件的更改?
我有一个具体的情况,我们有一个默认的oracle tnsnames.ora 文件指向127.0.0.1,但是有些开发者会修改它指向其他系统,但是我们不想更改默认文件.
在 subversion 中,我简单地将其添加到了提交时忽略更改列表中。有没有办法在 mercurial 中做到这一点?
【问题讨论】:
如果你想从“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'
【讨论】:
传统上,解决这个问题的方法不是对文件本身进行版本控制,而是将其副本作为模板供其他人使用。
所以你可以hg mv tnsnames.ora tnsnames.ora-template,然后提交,然后将 tnsnames.ora-template 的文件系统直接复制到 tnsnames.ora,并将 tnsnames.ora 添加到 .hgignore 文件中。
对模板的后续更改仍会被推出,但它们实际上不会改变工作环境,除非有人将模板复制到实际文件中。
【讨论】:
您可以将 commit 别名为 'hg commit -X exclude_file.ext' 我从未使用过 mercurial,所以我只是通过这里的手册页。
【讨论】:
在 Mercurial 的文档中查找 .hgignore 文件。
这是一个示例忽略文件。
# use glob syntax.
syntax: glob
*.elc
*.pyc
*~
# switch to regexp syntax.
syntax: regexp
^\.pc/
【讨论】: