我的项目中有一个包含数据库设置的文件,我已将其设置为一些默认值。该文件由 Mercurial 跟踪并签入。由于该文件将使用不同的开发人员机器使用不同的值进行编辑,有没有办法告诉 Mercurial 忽略对该文件的新更改?
我尝试将文件添加到.hgignore
文件中,但由于文件被跟踪,因此不会被忽略。在其他情况下这很好,但我想知道我可以在这里做些什么吗?
我的项目中有一个包含数据库设置的文件,我已将其设置为一些默认值。该文件由 Mercurial 跟踪并签入。由于该文件将使用不同的开发人员机器使用不同的值进行编辑,有没有办法告诉 Mercurial 忽略对该文件的新更改?
我尝试将文件添加到.hgignore
文件中,但由于文件被跟踪,因此不会被忽略。在其他情况下这很好,但我想知道我可以在这里做些什么吗?
使用文件模板绝对是最好的解决方案。例如,如果你有一个database.ini
文件,提交一个database.ini.template
文件并忽略 database.ini.hgignore
如果您总是想忽略该文件,您可以将该-X
选项作为默认选项添加commit
到您的.hg/hgrc
配置文件中:
[defaults]
commit = -X program.conf
我们为此编写了一个名为exclude的扩展。它将自动在-X
支持它们的命令上添加选项——因此hg status
不会hg commit
看到修改后的文件。它通过.hgexclude
从存储库的根目录读取文件来工作,就像.hgignore
文件一样。您在此处添加要排除的文件:
syntax: glob
db.conf
扩展工作得很好,但是有一个已知的失败情况:合并和合并后的提交(这在 wiki 上有文档)。它需要改进,以便将修改保存到临时文件中,然后再恢复它们。如果您需要此功能,请与我们联系。
没有真正自动化的过程,但您可以尝试(如在此SO 问题中)以下-X
选项hg commit
:
% hg stat
M myfile
% hg commit -X 'myfile'
(其他解决方案可能涉及shelve 或 hq)
但是,这不是“正确”的解决方案。我宁愿推荐版本控制:
如果您使用的是 TortoiseHG,请打开 repo 的设置,转到提交部分(左侧第 2 个图标)并将文件名添加到右侧的自动排除列表中(从底部算起第 3 个)列表)。
来自https://tortoisehg.readthedocs.io/en/latest/settings.html#commit
通常,您会签入文件的参考副本并对其进行跟踪,然后让开发人员为本地开发制作一份副本,您不会真的希望开发人员为他们自己的环境编辑源代码控制文件。
如果您的配置系统支持它,那么如果您可以使用一个覆盖文件来简单地覆盖引用副本中的值(例如数据库连接字符串),那就更容易了。这样,开发人员只需保留非常少的本地覆盖值集。
如果该文件已被跟踪,您可以向该文件发出 Forget 命令。如果您使用的是 TortoiseHg,只需在提交期间右键单击文件并选择忘记。该文件也必须已经在忽略列表中。
我遇到了和你一样的问题,我的文件不断出现在每次提交中,即使它已经在忽略列表中。我尝试了忘记命令,它成功了。
你可以试试hg forget
。更多详细信息,请参见同一命令的官方手册。它对我有用。
我认为,这样的事情更接近于对原始问题Mercurial: How to ignore changes to a tracked file的正确答案,而不是其他人建议使用模板等。