如何在Git中合并而不更改主分支中的配置文件?

3
我们有许多包含信息(例如url)的配置文件需要在开发环境下进行修改。我们将开发环境创建为git中的一个分支,并对配置文件进行更改。问题是,当我们将开发分支合并回主分支时,会更改主分支中的配置文件。
我们希望将文件存储在git中,因此我认为我们不能使用.gitignore。由于我们正在使用弹性Beanstalk,需要每次部署整个源,因此需要将所有源保留在repo中。
我们尝试使用.gitattributes,并阅读了许多文章,例如如何告诉git始终选择特定文件上的本地版本进行冲突合并?,但似乎只有在两个文件都有更改时才会调用.gitattributes中设置的合并驱动程序。在我们的情况下,我们不会更改主分支中的配置文件,因此从未调用合并驱动程序。
有没有一种简单的方法可以在不编写脚本的情况下完成这项工作?
3个回答

0

你要求无需编写脚本的解决方案。我的解决方案包括脚本。但是,它们已经被编写好了。

1)创建一个自定义合并驱动程序,以忽略相应文件的合并冲突。该驱动程序必须在.gitattributes中为每个文件注册。

2)在该文件的每次提交中创建合并冲突(否则,合并将是微不足道的,并且合并驱动程序将不会被使用)。这可以通过.git/hooks/post-commit中的post-commit挂钩完成,该挂钩在每次提交后更改每个分支中的该文件。

我将其组合在一些脚本中:https://github.com/keepitfree/faithfulgit


0

解决方案很简单:不要提交配置文件。

创建一个模板配置文件并提交它。在安装应用程序时,复制模板并更改需要更改的内容。将真实的配置文件保留在.gitignore中,以避免意外提交。

高级用法是创建两个配置文件:应用程序默认值和本地覆盖。默认值被提交,本地覆盖不被提交。这种方法的好处是您只覆盖需要更改的内容,而将其他值未指定,因此当默认值更改时,您不必更新本地覆盖配置。缺点是您必须在应用程序初始化期间加载和合并两个配置文件。


0

在研究了一些git命令,如rebase和fetch之后,我找到了一个简单的方法来完成这个任务。只需将分支创建为孤立分支,将配置文件复制到其中,并使用命令“git checkout configs_branch -- .”将配置文件复制到父分支中。

具体步骤如下:

使用repo url初始化git repo

git remote add origin (远程仓库url)

确保你在要创建分支的分支中

创建包含配置文件的分支作为孤立分支,以便该分支不包含所有源代码

git checkout --orphan configs_branch

将配置文件复制到该分支的repo中,添加文件,提交并推送

Git add .

Git commit -m "initial commit with config files"

git push origin configs_url

成功合并后

从父分支中

git checkout parentbranchname

git fetch --all

将配置分支中的文件复制到父分支中

git checkout configs_branch -- .

(执行以上命令后,您仍然在父分支上)

提交文件

git commit -m "重置配置文件"

感谢 @vampire 的帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接