如何冻结文件以进行更改,但使用Mercurial将其保留在存储库中

时间:2014-09-18 13:02:57

标签: version-control mercurial

我常常遇到如下情况:

  • 一些Hg存储库,包含一堆共享的配置文件
  • 某些配置文件包含不应共享的密码,它们是用户本地的

我想保留这些文件的版本历史记录,但它们只会偶尔更新。如果每次进行提交或合并或更新时都要记住,想要提交本地更改的密码,这很烦人。

如何冻结存储库中的文件(相反,对于偶尔的合法更新,解冻它),以便它不会出现在提交列表中,但在存储库中显示为版本化,并且每个人都可以共享一个库副本?

2 个答案:

答案 0 :(得分:3)

这个问题被问了很多,答案总是一样的:没有好办法做你想做的事。跟踪所跟踪的文件以进行所有更改。

每个人都安排的设置是将配置文件.example提交到repo,每个人都需要更改所需的更改,并将配置文件添加到您的ignore中。如果您精通,那么您的启动脚本会将configurationfile.example复制到配置位置(如果它尚不存在)。如果您的配置格式足够灵活以支持包含(大多数是这些天),那么您已经提交了配置文件并让它包含一个非跟踪(忽略)配置文件.local,其中人们覆盖事物。这就是每个人都在git和Mercurial中的表现。

答案 1 :(得分:2)

用于提交的

-X选项,用于合并的无(简单)

-X --exclude PATTERN [+] exclude names matching the given patterns

,即大多数时候你提交hg ci -X FILENAME,有时候 - 纯hg ci。您可以将hg ci -X FILENAME定义为新别名,并为不同的提交使用两个不同的命令

如果是合并,您可以尝试定义配置文件特殊merge-tool(可证明internal:local or internal:fail

无论如何,您选择了将本地配置存储为共享公共文件的错误且容易出错的方法。 (可行的)替代方案可能包括(仅举几例)

  • 存储库中的Config.TEMPLATE并针对本地需求进行了修改hgignore'd Config
  • LocalBranch,其中存储具有特定位置更改的代码
  • MQ extension(以某种方式与第一个解决方案相关) - 存储库存储“vanilla”配置,所有仅限本地的更改放在MQ-patch中