gpt4 book ai didi

linux - 使用 git 维护特定于分支的配置文件

转载 作者:太空狗 更新时间:2023-10-29 12:11:59 26 4
gpt4 key购买 nike

有一个问题让我困惑了很长时间,因为我找不到很好的或多或少通用的解决方案。

假设有两个可用的 git 分支,productiondev;每个都使用它自己的可配置参数来完成某些任务(即凭据、构建路径、测试/部署脚本开关等)。同时实现脚本和代码对于两个分支都是通用的。

现在,问题出现了——如何按照要求的方式在 git 存储库中维护特定于分支的配置。一种常见的解决方案是在 git 中使用"template"配置文件,符号链接(symbolic link)并忽略特定分支的具体内容,例如

$ cat .gitignore | grep conf
/concrete.conf
$ ls -l *.conf
lrwxrwxrwx 1 1000 100 12 Oct 29 10:23 concrete.conf -> generic.conf
-rw-r--r-- 1 1000 100 0 Oct 29 10:16 generic.conf

然后在开发框上破解和调整concrete.conf。但这不是我追求的解决方案。

我的要求(好的,希望)是:

  • 支持每个 git 分支单独的配置文件,并且
  • 同时保留由 git 管理的特定于分支的配置文件

有可能吗?可能是(实际上,更喜欢由其他文件来源的文件,但这无关...)

到目前为止,我想到的最好的方法是使用 merge 后 Hook 来调整每个分支的配置本身来自一些被 git 忽略的其他来源,但它从一开始就很糟糕.

对所描述问题的解决方案有何建议?

PS:*nix 特定的建议(即使用符号链接(symbolic link)/硬链接(hard link))建议绝对没问题,我确实对 M$ 目标感兴趣

最佳答案

这是可能的,并且不涉及符号链接(symbolic link)。

不是版本my.config ,而是一个模板文件 my.config.tpl和一个值文件(每个分支都有值)

 prod.conf
dev.conf

然后,您可以使用 content filter driver ,使用 .gitattributes declaration .

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

脚本生成my.config通过将占位符值替换为 <branch.conf> 的值来创建文件文件,每次你 check out 一个分支。
您可以通过以下方式了解当前分支名称:

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

生成的实际my.config仍然被忽略(通过 .gitignore )。
这意味着您的实际工作树不会变得“脏”。

涂抹脚本选择正确的值文件并生成正确的web.config基于在 git checkout 期间应用涂抹脚本的模板.

请参阅“git smudge/clean filter between branches”中的完整示例。

关于linux - 使用 git 维护特定于分支的配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40317063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com