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