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

Version control Mercurial:如何忽略对跟踪文件的更改,version-control,mercurial,configuration-files,hgignore,Version Control,Mercurial,Configuration Files,Hgignore,我的项目中有一个带有数据库设置的文件,我已将其设置为一些默认值。该文件由Mercurial跟踪并签入。由于此文件将在不同的开发人员机器上使用不同的值进行编辑,有没有办法让Mercurial忽略此文件的新更改 我尝试将该文件添加到.hgignore文件中,但由于该文件已被跟踪,因此不会被忽略。这在其他情况下也很好,但我想知道我是否可以在这里做些什么?没有真正的自动化过程,但您可以尝试(在这种情况下)以下的-X选项: (其他解决方案可能涉及) 然而,这不是“正确”的解决方案。我宁愿推荐版本控制:

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


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

没有真正的自动化过程,但您可以尝试(在这种情况下)以下的
-X
选项:

(其他解决方案可能涉及)

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

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

通常,您会签入文件的引用副本并跟踪它,然后让开发人员为本地开发制作一份副本,您不会真的希望开发人员为自己的环境编辑受源代码控制的文件


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

使用文件模板绝对是最好的解决方案。
例如,如果您有一个
database.ini
文件,请提交
database.ini.template
文件并忽略
.hgignore
中的database.ini。如果您总是想忽略该文件,则可以将
-X
选项作为
提交
的默认选项添加到
.hg/hgrc
配置文件中:

[defaults]
commit = -X program.conf

如果您使用的是Ortoisehg,请打开repo的设置,转到提交部分(左侧下方的第二个图标)并将文件名添加到右侧的自动排除列表中(列表底部的第三个)


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

syntax: glob
db.conf

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

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


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

您可以尝试
hg Forget
。 有关更多详细信息,请参阅。 这对我有用


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

这就是我最后要做的:)我意识到这已经很旧了,但以防万一,您是否会有一个安装脚本,将所有模板文件复制到其功能文件名?这将是一个好主意。不要忘记让您的脚本询问配置值,因为它们可能不同于模板文件,这里的模板文件是为了显示文件的结构。这种方法的真正大问题是,它可能会破坏构建过程—例如,在.net中使用msdeploy时,您正在部署csproj文件中列出的所有文件。这意味着,如果希望部署中包含
db.ini
文件,则需要在csproj中列出该文件。但是,如果您在csproj中列出它,则在创建此文件之前,您将无法构建干净的克隆,即使该文件实际上是应用程序可以选择的run@GeorgeMauer因此,问题在于,某些进程希望通过指向存储库并下载文件来获得完全工作的文件设置。理想情况下,它(msdeploy)可以选择在使用存储库之前在存储库上运行设置/安装脚本。或者,您需要设置一个特殊的存储库(或分支),它是主存储库的副本,但将
.template
替换为真实文件,仅用于该过程。或者,msdeploy也有一个问题,它只查看csproj以了解要部署什么。也许你可以将其配置为包含其他答案。这个答案相当于Irish的答案。问题是,
hg forget
会从存储库中删除文件的现有内容,而OP并不希望这样做。这是一个非常好的主意,直到您尝试提交合并。提交合并时,不允许指定文件或模式。因此,在您的
.hgrc
中,如果不先编辑
.hgrc
,似乎根本不可能提交合并。有人能解决这个问题吗?你很久以前就问过@Yitz,但如果有帮助的话,我使用的一个快速而肮脏的修复方法是使用一个快速批处理脚本,将repo hgrc移到一边,进行提交并将其移回。显然,只有在hgrc中没有其他文件需要时,它才会起作用。@yitz我想知道它对您不起作用的原因是否是因为该文件应该被称为hgrc,而不是.hgrc?当您这样做并运行提交UI时,排除的文件将在提交文件列表中被取消选中(自动),而差值将为深灰色。很好,我没法用,我用的是乌龟
syntax: glob
db.conf