条件Mercurial忽略文件

时间:2010-12-21 17:26:58

标签: deployment mercurial hgignore

我有一个mercurial文件,我希望dev机器拉动文件,但我希望部署服务器不要拉文件(它有dev机器没有的特殊模块)。这可能,或者我应该只是自定义推送到服务器解决方案,而不仅仅是做一个hg拉?

4 个答案:

答案 0 :(得分:6)

执行此操作的典型方法是执行以下操作:

将每个文件的副本存储在存储库中,并正确命名。例如,如果有问题的文件是web.config,您可以将以下两个存储在存储库中:

  • web.server.config
  • web.dev.config

然后,您将添加一个构建的步骤以确保将正确的文件复制到实际的web.config文件,您可以使用批处理文件:

if "%COMPUTERNAME%" == "SERVER" copy web.server.config web.config
if not "%COMPUTERNAME%" == "SERVER" copy web.dev.config web.config

然后你会通过.hgignore忽略web.config本身:

glob:web.config

答案 1 :(得分:2)

我一直使用的Karlsen答案的变体。

我在项目中有/config/etc目录。该目录通常包含样本配置,如:

  • dev.yaml
  • ci_server.yaml

然后我的应用程序从符号链接/etc/app.yaml拉到正确的配置,具体取决于运行它的主机。

最好考虑这样做是因为你没有变种代码路径(批处理脚本分支),消除了潜在的错误向量。这允许您使用将在生产中使用的相同代码路径(直到查找覆盖文件的位置)。

答案 2 :(得分:1)

这是否可以在版本控制之外解决?例如,将文件包含在存储库的所有副本中,但启用或禁用其与环境变量或类似的使用。这听起来并不像大多数版本控制系统要构建的那样,除非您在更新后使用讨厌的黑客来执行添加/删除/修补文件等操作。

答案 3 :(得分:1)

一种选择是为部署服务器创建一个特殊的hgignore文件,该文件可以包含在存储库中,也可以不包含在存储库中。然后在服务器的hgrc文件中,使用ignore变量指定特殊hgignore文件的路径。

这将确保部署服务器忽略对文件的更新,但仍可以像往常一样更新开发计算机。