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