6

我在 mercurial 中有一个文件,我希望开发机器提取该文件,但我希望部署服务器不提取该文件(它具有开发机器没有的特殊模块)。这可能吗,还是我应该只对服务器解决方案进行自定义推送,而不是仅仅进行 hg pull?

4

4 回答 4

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
于 2010-12-21T18:15:11.730 回答
2

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

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

  • dev.yaml
  • ci_server.yaml

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

这样做的最佳想法是您没有消除潜在错误向量的变体代码路径(批处理脚本分支) 。这允许您使用将在生产中使用的相同代码路径(直至查找覆盖文件的位置)。

于 2011-01-04T06:49:09.413 回答
1

这是可以在版本控制之外解决的问题吗?例如,将文件包含在存储库的所有副本中,但启用或禁用它与环境变量或类似的东西的使用。这听起来不像大多数版本控制系统都是为了处理而构建的,除非您在更新后使用讨厌的黑客来执行诸如添加/删除/修补文件之类的事情。

于 2010-12-21T17:57:07.177 回答
1

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

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

于 2011-01-03T01:21:51.423 回答