Git管理环境特定的配置

时间:2019-12-26 06:24:34

标签: java eclipse git fork

我需要为开发,uat和生产等不同环境进行属性配置。例如,config.properties具有像environment=dev这样的条目,我需要将登台分支更改为environment=uat,将主分支更改为environment=prd

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

git rm -rf --cached src/config.properties
git add src/config.properties
git commit -m ".gitignore fix"

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

1 个答案:

答案 0 :(得分:2)

您不应该版本config.propertiesgit rm是正确的),并确实忽略它。
这样,在合并期间就不会造成任何问题。

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

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

然后在每个分支中,根据当前的执行环境,从其中一个文件中生成 config.properties,并在其中具有正确的值。

由于每个环境中都有单独的分支,并且其中包含正确的文件,因此您可以具有一个生成脚本,该脚本将使用以下命令确定已检出分支的名称:

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)

这意味着您可以:

  • 仅版本模板文件config.properties.<env>
  • 以分支命名的版本值文件:config.properties.devconfig.properties.uat ...:由于它们是不同的,因此在合并或切换分支时没有合并问题。

最后,您将(在.gitattributes declaration中注册 content filter driver

smudge (来自“ Customizing Git - Git Attributes”的图像,来自“ Pro Git book”的图像)

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

在“ git smudge/clean filter between branches”中查看完整的示例。