最佳实践 - Git + 构建自动化 - 保持配置分离

6
寻求保持配置文件分离的最佳方法,但不会给新开发人员设置他们的环境带来额外步骤。
我猜子模块可以完成这项工作,但是如何根据需要无缝切换配置呢?也就是说,定期拉取 DEV 配置,构建时拉取配置库的 PROD 分支?
需满足以下要求:
- 新开发人员易于上手。 - 只有特定用户和构建用户能够访问 PROD 配置文件。
谢谢。

我刚刚编辑了答案,添加了一种检测脚本正在执行的分支的方法。 - VonC
1个回答

11

这被称为内容过滤驱动程序,它允许您在.gitattributes文件中(仅限于您的配置文件类型),声明一个模糊脚本,该脚本将于自动检出时执行以下操作:

  • 将配置文件模板文件(config.tpl
  • 与正确的配置文件值(config.devconfig.prod等)结合起来
  • 以生成未经版本控制的配置文件(私有文件)

Smudge filter

参见“自定义Git - Git属性”:

echo '*.cfg.tpl filter=config' >> .gitattributes
git config --global filter.config.smudge yourScript

使用这种方法,您不需要子模块,但可以根据您的环境(例如您的分支)生成所需数量的配置文件:
就像在“在post-update挂钩中查找Git分支名称”中一样,您的清理脚本可以通过以下方式找出当前正在执行的分支:

#!/bin/sh
branch=$(git rev-parse --symbolic --abbrev-ref HEAD)

谢谢。虽然我最终选择了将配置文件分开存储和使用 Puppet 进行设置,但这仍然是非常有用的信息,我之前并不知道这个功能。 - Dmitri Farkov
echo '*.cfg.tpl config' 中,是否不需要参数名 filter=,即将其改为 echo '*.cfg.tpl filter=config' >> .gitattributes。或者说,如果在 .giattributes 中没有提供参数名,filter 是否是 Git 在配置中查找的默认参数? - ToJo
1
@ToJo 很好的观点,谢谢。我六年前可能错过了它。我已经相应地编辑了答案。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接