2010-05-18 141 views
48

我在我的项目中有一个数据库设置的文件,我设置了一些默认值。该文件由Mercurial跟踪并签入。由于该文件将用不同的值编辑各种开发人员机器,有没有办法让Mercurial忽略此文件的新更改?Mercurial:如何忽略对被跟踪文件的更改

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

回答

23

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

+0

这是我结束了做:) – Svish 2010-05-25 17:42:01

+0

我意识到这是现在很旧了,但以防万一 - 你会有一个安装脚本,将所有模板文件复制到他们的功能文件名? – Nick 2013-06-18 17:28:36

+0

这将是一个好主意。不要忘了让你的脚本询问配置值,因为它们可能与模板文件不同,这里显示的是文件的结构 – yanjost 2013-06-26 13:54:25

8

没有真正自动化的过程,但你可以尝试(如本SO question)的-X选项上hg commit

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

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

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

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

通常你需要检查的参考脚本复制文件并跟踪它,然后让开发人员制作一份用于本地开发的副本,但您并不希望开发人员为自己的环境编辑源代码管理文件。

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

27

忽略database.ini如果你总是想忽略这个文件,你可以为commit添加-X选项为默认你.hg/hgrc配置文件:

[defaults] 
commit = -X program.conf 
+3

这真是个好主意,直到你尝试提交一个合并。提交合并时,不允许指定文件或模式。因此,在你的'.hgrc'中,如果没有首先编辑'.hgrc',似乎就不可能提交合并。有没有人有解决方案? – Yitz 2014-02-13 10:28:55

+2

@Yitz之前你问过这个年龄段,但万一它有帮助,我使用的一个快速和肮脏的修复程序是有一个快速批处理脚本,将repo hgrc移出,执行并将其移回。如果你的hgrc中没有其他东西需要在那里,那显然只会起作用。 – 2015-09-11 13:53:58

+0

@yitz我不知道它不适合你的原因是因为该文件应该被称为hgrc,而不是.hgrc? – teaman 2017-12-15 22:34:28

3

如果使用TortoiseHG,打开了回购的设置,进入提交部分(第二图标下左)&添加文件名(S)的自动排除在名单右(从列表底部开始〜3)。

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

+1

执行此操作并运行提交UI时,排除的文件将在提交文件列表中(自动)取消选中,并且DIFF将呈深灰色。尼斯。 – 2014-10-21 18:53:16

+0

我无法得到这个工作,我正在使用TortoiseHg 3.3.3。我使用*添加文件名,完整路径,部分文件名 - 它总是在提交UI中检查? – gakera 2016-01-28 10:51:25

+0

如果它已经被追踪(以前提交),那么忽略它不会影响它,你需要“忘记”它。 – 2016-01-28 12:24:40

12

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

syntax: glob 
db.conf 

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

-2

它可能看起来不直观,但:

hg rm -Af [file] 

两个标志同时声称,该文件已被删除,并且该变化应强制(而不是拆除应强制为帮助提示) 。 A(after)和f(force)标志的帮助和文档显然不是100%准确的。

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

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

+2

这实际上并没有工作:该文件从版本控制中删除,这意味着它不是一个新的克隆的一部分,它也将被删除,如果你'hg update' :把它想象成一个正常的'hg remove',只是把文件留在**你的**工作副本中,其他克隆人不会“看到” - “之后”和“--force”标志,所以对他们来说这只是一个正常的删除,所以文件被删除时,他们更新。 – 2012-03-29 07:10:39

1

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

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

+0

excelent!帮了很多! – icesar 2012-08-17 22:50:15

2

您可以试试hg forget。 有关更多详细信息,请参见official manual about the same command。 它为我工作。

我想,这样的事情是更接近正确答案原来的问题水银:如何忽略更改为跟踪文件,而不是其他人则建议模板等

+3

这个答案等同于爱尔兰的答案。它的问题是'hg忘记'从文件中删除文件的现有内容仓库,这是OP不想要的。 – Brilliand 2013-11-27 22:53:20