如何在不更改master中的配置文件的情况下合并Git?

时间:2016-10-13 16:19:47

标签: git github merge gitattributes

我们有许多配置文件,其中包含需要为我们的开发人员环境修改的信息,例如网址。我们将开发人员环境创建为git中的分支,并对配置文件进行更改。问题是当我们将开发分支合并回主分支时,它会更改主分支中的配置文件。

我们希望将文件存储在git中,所以我不相信我们可以使用.gitignore。因为我们使用弹性beanstalk,所以我们需要将所有源代码保存在repo中,并且每次都需要部署整个源代码。

我们已尝试使用.gitattributes,并阅读了许多帖子,例如How do I tell git to always select my local version for conflicted merges on a specific file?,但看起来只有在两者都发生更改时才会调用您在.gitattributes中设置的合并驱动程序文件。在我们的例子中,我们不会更改主分支中的配置文件,因此永远不会调用合并驱动程序。

有没有一种简单的方法可以在不编写脚本的情况下完成此操作?

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

在研究了诸如rebase和fetch之类的git命令后,我发现了一种简单的方法。只需将分支创建为孤立,将配置文件复制到其中,然后使用命令“git checkout configs_branch - 。”将配置文件复制到父分支。

详细说明:

使用repo url

初始化git repo

git remote add origin(远程存储库URL)

确保您位于要从

创建分支的分支中

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

git checkout --orphan configs_branch

将配置文件复制到repo的这个分支添加文件,提交和推送

Git add。

Git commit -m“初始提交配置文件”

git push origin configs_url

成功合并后

来自父母分支的

git checkout parentbranchname

git fetch --all

将文件从配置分支复制到父分支

git checkout configs_branch - 。

(在上述命令之后,您仍将在父分支上)

提交文件

git commit -m“重置配置文件”

感谢@vampire的帮助!

答案 2 :(得分:0)

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

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

中为每个文件注册驱动程序

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

我在一些脚本中加入了https://github.com/keepitfree/faithfulgit