Mercurial:如何忽略对跟踪文件的更改

时间:2010-05-18 11:03:10

标签: version-control mercurial configuration-files hgignore

我的项目中有一个包含数据库设置的文件,我已将其设置为某些默认值。该文件由Mercurial跟踪并签入。由于此文件将使用不同的值编辑各种开发人员机器,有没有办法告诉Mercurial忽略对此文件的新更改?

我尝试将文件添加到.hgignore文件中,但由于文件已被跟踪,因此不会被忽略。这在其他情况下还不错,但我想知道我能在这里做些什么吗?

8 个答案:

答案 0 :(得分:27)

如果您始终要忽略该文件,可以将-X选项作为commit的默认值添加到.hg/hgrc配置文件中:

[defaults]
commit = -X program.conf

答案 1 :(得分:26)

使用文件模板绝对是最佳解决方案。 例如,如果您有database.ini文件,请提交database.ini.template文件并忽略.hgignore中的database.ini

答案 2 :(得分:12)

我们为此编写了一个名为exclude的扩展程序。它会自动在支持它们的命令上添加-X选项 - 因此hg statushg commit将不会看到修改后的文件。它的工作原理是从存储库的根目录中读取.hgexclude文件,就像.hgignore文件一样。您添加要在其中排除的文件:

syntax: glob
db.conf

扩展程序运行良好,但是已知的情况是它失败:合并和合并后的提交(这在wiki上有记录)。它需要进行改进,以便将修改保存到临时文件中,然后再恢复它们。如果您需要此功能,请与我们联系。

答案 3 :(得分:8)

没有真正的自动化流程,但您可以尝试(如SO question} hg commit上的-X选项:

% hg stat
M myfile
% hg commit -X 'myfile'

(其他解决方案可能涉及shelve or hq

然而,这不是“正确”的解决方案。我宁愿推荐版本化:

  • 文件模板
  • 一个能够生成最终文件的脚本(您修改但可以完全忽略)

答案 4 :(得分:4)

如果您使用的是TortoiseHG,请打开回购设置,转到提交部分(左侧第2个图标)&将文件名添加到右侧的“自动排除”列表中(从列表底部开始的第3个)。

来自https://tortoisehg.readthedocs.io/en/latest/settings.html#commit

答案 5 :(得分:2)

通常,您会检入文件的参考副本并跟踪它,然后让开发人员为本地开发制作副本,您不会真的希望开发人员为自己的环境编辑源控制文件。

如果您的配置系统支持它,那么如果您可以使用简单地覆盖引用副本中的值的覆盖文件(例如数据库连接字符串),则会更容易。这样开发人员只需要保留一个非常小的本地覆盖值集。

答案 6 :(得分:2)

您可以尝试hg forget。 有关详细信息,请参阅official manual about the same command。 它对我有用。

我认为,这样的事情更接近原始问题的正确答案 Mercurial:如何忽略对跟踪文件的更改,而不是其他人建议模板等。

答案 7 :(得分:1)

如果文件已被跟踪,您可以向文件发出Forget命令。如果您正在使用TortoiseHg,请在提交期间右键单击该文件,然后选择“忘记”。该文件也必须已经在忽略列表中。

我和你的问题一样,我的文件一直出现在每次提交中 - 尽管它已经在忽略列表中。我尝试了Forget命令并且它完成了这个技巧。