Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用git维护特定于分支的配置文件_Linux_Git_Version Control_Configuration - Fatal编程技术网

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

Linux 使用git维护特定于分支的配置文件,linux,git,version-control,configuration,Linux,Git,Version Control,Configuration,有一个问题让我困惑了很长一段时间,因为我找不到好的、或多或少是通用的解决方案 假设有两个git分支可用,production和dev;对于某些任务(即凭证、构建路径、测试/部署脚本等),每个任务都使用自己的可配置参数。同时实现脚本和代码对于两个分支都是通用的 现在,问题出现了——如何以所需的方式在git存储库中维护特定于分支的配置。一种常见的解决方案是在git中使用“模板”配置文件,对特定分支进行符号链接并忽略其具体内容,如 $ cat .gitignore | grep conf /concr

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

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

现在,问题出现了——如何以所需的方式在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忽略的其他源调整每个分支的配置本身,但从一开始就很糟糕

对问题的解决有何建议


PS:*nix特定建议(即使用符号链接/硬链接)建议绝对可以,我对M$targets确实感兴趣,这是可能的,并且不涉及符号链接

您没有版本
my.config
,而是一个模板文件
my.config.tpl
,以及一个值文件(每个分支都有值)

然后,您可以使用,使用

(来自“”的图像,来自“”)

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

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
生成的实际
my.config
仍被忽略(被
.gitignore
忽略)。
这意味着您的实际工作树不会变得“脏”

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


请参阅“.”中的完整示例。

谢谢,乍一看这似乎是合理的;在接受你的回答之前,我需要仔细思考和消化一下。这涉及到提交/结帐/等等;我也在审视自己的方向。如果不使用一些钩子,就不可能有解决方案。思考这个问题的合乎逻辑的结果described@Not确实是一个钩子,但是是的,您需要一个本地配置设置来激活declare
.gittattributes
smudge脚本。钩子术语可能是具体的,虽然应用于git scm,但据我所知,这个概念非常相似。再次感谢您的帮助。只要我运行几个沙箱测试,我就会提出我的问题/你的答案/解决方案,以确保我正确理解这里发生的一切
branch=$(git rev-parse --symbolic --abbrev-ref HEAD)