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

我有我的项目中的数据库设置的文件,我已经设置了一些默认值。 该文件由Mercurial跟踪和签入。由于这个文件将被编辑不同的值不同的开发机器,有没有一种方法,我可以告诉Mercurial忽略此文件的新变化?

我试图将文件添加到.hgignore文件,但由于文件被跟踪,它不会被忽略。 这在其他情况下是好的,但是我想知道在这里我能做些什么吗?

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

如果您始终要忽略该文件,则可以将-X选项作为缺省值添加到.hg/hgrcconfiguration文件中:

 [defaults] commit = -X program.conf 

我们为这个所谓的排除写了一个扩展。 它会在支持它们的命令上自动添加-X选项,所以hg statushg commit不会看到修改后的文件。 它通过从你的仓库的根目录读取一个.hgexclude文件来工作,就像.hgignore文件一样。 您添加要排除的文件:

 syntax: glob db.conf 

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

没有真正的自动化过程,但你可以尝试(如在这个SO问题中 ) hg commit上的-X选项:

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

(其他解决scheme可能涉及搁置或hq )

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

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

如果您使用的是TortoiseHG,请打开回放设置,进入“提交”部分(左侧第二个图标),并将文件名添加到右侧的自动排除列表中列表)。

http://tortoisehg.bitbucket.io/manual/0.9/commit.html

通常情况下,您需要检查文件的参考副本并进行跟踪,然后让开发人员为本地开发制作副本,但您不希望开发人员为自己的环境编辑源代码pipe理文件。

如果您的configuration系统支持它,那么如果您可以使用覆盖参考副本中的值的覆盖文件(例如数据库连接string),则更容易。 这样,开发人员只需要保留一个非常小的本地覆盖值。

你可以试试hg forget 。 有关更多详细信息,请参阅有关相同命令的官方手册 。 它为我工作。

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

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

我有和你一样的问题,我的文件不断出现在每一个提交,即使它已经在忽略列表。 我尝试了忘记命令,它做了伎俩。

这可能看起来不直观,但是:

 hg rm -Af [file] 

这两个标志一起声称文件已被删除,而且应该强制进行更改(而不是像帮助中所build议的那样强制删除)。 A(after)和f(force)标志的帮助和文档显然不是100%准确的。

在Mercurial 2.0中为我工作,同时要求归档命令不包含文件。 如果其他开发者克隆回购,但是,这不应该是一个问题。 他们会得到原来的版本,不应该从他们的工作目录中删除。

来自: https : //www.mercurial-scm.org/pipermail/mercurial/2008-June/019671.html