【问题标题】:Branch-specific configuration file maintenance with git使用 git 维护特定于分支的配置文件
【发布时间】:2017-03-12 01:17:09
【问题描述】:

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

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

现在,问题出现了 - 如何以所需的方式在 git 存储库中维护特定于分支的配置。一种常见的解决方案是在 git 中使用“模板”配置文件,符号链接并忽略特定分支的具体内容,例如

$ 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 管理的特定于分支的配置文件

有可能吗?可能是(实际上,更喜欢由其他人提供文件,但它不相关......)

到目前为止,我想到的最好的方法是使用合并后挂钩从 git 忽略的其他来源调整每个分支的配置per se,但它从一开始就很臭.

对所描述的问题的解决方案有什么建议吗?

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

【问题讨论】:

    标签: linux git version-control configuration


    【解决方案1】:

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

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

     prod.conf
     dev.conf
    

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

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

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

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

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

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

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

    【讨论】:

    • 谢谢,这乍一看似乎是合理的;我需要咀嚼消化一段时间才能接受你的回答
    • 自然会涉及到commit/checkout/etc hooks;我也在寻找自己的方向。猜猜如果不使用一些钩子,就不可能有解决方案。对所描述问题的逻辑结果思考
    • @不完全是一个钩子,但是是的,你需要一个本地配置设置来激活声明 .gitattributes smudge 脚本。
    • 可能是 hook 术语是具体的,虽然应用于 git scm,但我理解的概念仍然非常相似。再次非常感谢您的帮助。我会在运行几个沙盒测试后尽快提出我的问题/您的答案/解决方案,以确保我理解这里发生的一切正确
    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2021-03-29
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多