我需要为不同的环境(如开发、uat 和生产)进行属性配置。例如,config.properties 具有类似 environment=dev
的条目,我需要将其更改为 environment=uat
的暂存分支,将 master 分支更改为 environment= prd
.
我尝试分别在每个分支中提交这些文件,并尝试在 gitignore 中添加 config.properties ,以便在下次提交时不会考虑。 但 git 忽略没有更新,所以我运行命令
git rm -rf --cached src/config.properties
git add src/config.properties
git commit -m ".gitignore fix"
但是此命令正在从本地存储库本身删除文件,并且后续提交也会从分支中删除。我想这样处理分支,以便 Jenkins 无需手动编辑配置文件即可进行部署。我正在使用 fork 作为 git UI。有什么办法可以处理这种情况吗?
最佳答案
您不应该版本 config.properties
( git rm
是正确的),并且确实忽略它。
这样,在 merge 过程中就不会造成任何问题。
拥有三个单独的文件(每个环境一个)会更容易:
-
config.properties.dev
-
config.properties.uat
-
config.properties.prd
在每个分支中,您将生成 config.properties
,其中包含来自这些文件之一的正确值,具体取决于当前的执行环境。
由于每个环境都有单独的分支,并且其中包含正确的文件,因此您可以使用一个生成脚本来确定 checkout 分支的名称:
branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
这意味着您可以:
- 版本仅模板文件
config.properties.<env>
- 以分支命名的版本值文件:
config.properties.dev
,config.properties.uat
...:由于它们不同,因此在 merge 或切换分支时不存在 merge 问题。
最后,您将(在 .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 ”中的完整示例。
关于java - Git 管理环境特定配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59484603/