我需要为开发,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。有什么办法可以处理这种情况?
答案 0 :(得分:2)
您不应该版本config.properties
(git 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.dev
,config.properties.uat
...:由于它们是不同的,因此在合并或切换分支时没有合并问题。最后,您将(在.gitattributes
declaration中注册 content filter driver 。
(来自“ 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”中查看完整的示例。