Git 管理环境特定配置

Uma*_*van 4 java eclipse git git-fork

我需要为不同的环境(如 dev、uat 和生产)进行属性配置。例如,一个 config.properties 具有和条目之类的environment=dev,我需要更改为 staging 分支 asenvironment=uat和 master 分支 as environment=prd

我尝试分别在每个分支中提交这些文件,并尝试在 gitignore 中添加 config.properties 以便它不会在下次提交时考虑。但是 git ignore 没有更新所以我运行了命令

git rm -rf --cached src/config.properties
git add src/config.properties
git commit -m ".gitignore fix"
Run Code Online (Sandbox Code Playgroud)

但是此命令正在从本地存储库本身删除文件,并且正在进行的提交也从分支中删除。我想像这样处理分支,以便 Jenkins 无需手动编辑配置文件即可进行部署。我正在为 git UI 使用 fork。有没有办法处理这种情况?

Von*_*onC 5

你不应该对 a config.properties(git rm是对的)版本,并确实忽略它。
这样,它在合并期间不会造成任何问题。

拥有三个单独的文件更容易,每个环境一个:

  • config.properties.dev
  • config.properties.uat
  • config.properties.prd

在每个分支中,您将根据当前的执行环境,从这些文件之一生成 config.properties具有正确值的 。

由于每个环境都有单独的分支,其中包含正确的文件,因此您可以使用生成脚本来确定签出分支的名称:

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
Run Code Online (Sandbox Code Playgroud)

这意味着你可以:

  • 版本只有一个模板文件 config.properties.<env>
  • 以分支命名的版本值文件: config.properties.dev, config.properties.uat...: 因为它们不同,所以在合并或切换分支时没有合并问题。

最后,您将注册(在.gitattributes声明中)一个内容过滤器驱动程序

弄脏 (图片来自“ Customizing Git - Git Attributes ”,来自“ Pro Git book ”)

smudge与模板文件 ( package.json.tpl)相关联的脚本将通过在正确的值文件中查找值来生成(自动,在 上git checkout)实际文件。 生成的实际文件仍然被忽略(被)。 config.propertiesconfig.properties.<env>
config.properties.gitignore

请参阅“分支之间的 git smudge/clean filter ”中的完整示例。