53

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

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

4

8 回答 8

29

使用文件模板绝对是最好的解决方案。例如,如果你有一个database.ini文件,提交一个database.ini.template文件并忽略 database.ini.hgignore

于 2010-05-18T13:09:27.530 回答
28

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

[defaults]
commit = -X program.conf
于 2010-09-01T07:14:37.333 回答
12

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

syntax: glob
db.conf

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

于 2011-07-20T08:09:36.583 回答
8

没有真正自动化的过程,但您可以尝试(如在此SO 问题中)以下-X选项hg commit

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

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

但是,这不是“正确”的解决方案。我宁愿推荐版本控制:

  • 文件模板
  • 能够生成最终文件的脚本(您可以修改但可以完全忽略)
于 2010-05-18T11:15:40.917 回答
6

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

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

于 2011-02-16T21:48:24.960 回答
2

通常,您会签入文件的参考副本并对其进行跟踪,然后让开发人员为本地开发制作一份副本,您不会真的希望开发人员为他们自己的环境编辑源代码控制文件。

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

于 2010-05-18T11:19:38.360 回答
2

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

我遇到了和你一样的问题,我的文件不断出现在每次提交中,即使它已经在忽略列表中。我尝试了忘记命令,它成功了。

于 2012-04-10T07:28:08.177 回答
2

你可以试试hg forget。更多详细信息,请参见同一命令的官方手册。它对我有用。

我认为,这样的事情更接近于对原始问题Mercurial: How to ignore changes to a tracked file的正确答案,而不是其他人建议使用模板等。

于 2013-06-04T11:30:46.970 回答