我的项目中有一个包含数据库设置的文件,我已将其设置为某些默认值。该文件由Mercurial跟踪并签入。由于此文件将使用不同的值编辑各种开发人员机器,有没有办法告诉Mercurial忽略对此文件的新更改?
我尝试将文件添加到.hgignore
文件中,但由于文件已被跟踪,因此不会被忽略。这在其他情况下还不错,但我想知道我能在这里做些什么吗?
答案 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 status
和hg 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命令并且它完成了这个技巧。