从Mercurial中的提交中排除项目配置文件

从Mercurial中的提交中排除项目配置文件,mercurial,Mercurial,我有一个项目需要一些配置文件。我想在存储库中保留默认配置文件。但是,我不想为每次提交都指定-X标志。是否有一种标准方法将一组修改过的文件标记为永久排除在提交之外?有趣的问题,我希望您能得到更好的答案。面对类似的问题,我做了以下工作: 重命名配置文件,例如,使用noweb.cfg.default而不是noweb.cfg.default。该文件很少更改,并处于修订控制之下 实际的配置文件,noweb.cfg可能会频繁更改,但会被放入.hgignore文件中,因此它永远不会提交 需要时,我有一个特殊

我有一个项目需要一些配置文件。我想在存储库中保留默认配置文件。但是,我不想为每次提交都指定-X标志。是否有一种标准方法将一组修改过的文件标记为永久排除在提交之外?

有趣的问题,我希望您能得到更好的答案。面对类似的问题,我做了以下工作:

  • 重命名配置文件,例如,使用
    noweb.cfg.default
    而不是
    noweb.cfg.default
    。该文件很少更改,并处于修订控制之下

  • 实际的配置文件,
    noweb.cfg
    可能会频繁更改,但会被放入
    .hgignore
    文件中,因此它永远不会提交

  • 需要时,我有一个特殊的Makefile目标,它从
    *.cfg.default
    重建
    *.cfg

此解决方案并不理想,因为当
.cfg.default
更改时,
.cfg
文件中的更改将丢失。原则上,您可以使用diff3或其他更复杂的合并工具来解决这个问题,但我从来没有足够的精力去解决这个问题。

您可以使用.hgrc中的(备受诟病的)默认值部分:

  [defaults]
  commit = -X thefileyouwanttoexclude
如果可以对手指进行再训练,首选的方法是使用别名:

 [alias]
  cmt = commit -X thefileyouwanttoexclude

然后你开始使用hg cmt而不是commit。

你为什么说“备受诽谤”?它是不受欢迎的吗?或者只是不知名?它工作正常,但mercurial的创建者mpm不赞成[默认设置]。通过设计,它以不可见的方式改变命令的功能,因此使用这些命令的脚本或扩展正在使用可能不需要的参数运行命令。例如,如果我执行“[defaults]\npush=-f”,因为我总是想使用-f,这很好,但是如果脚本使用不带-f的“push”,因为它想确保不创建新的远程磁头,那么该脚本将使用-f而不知道它。如果你能重新训练自己的手指,化名就更安全,而且几乎可以完成同样的任务。