【问题标题】:How can I merge in Git without changing config files in master?如何在不更改 master 配置文件的情况下合并 Git?
【发布时间】:2016-10-13 16:19:46
【问题描述】:

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

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

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

有没有不写脚本的简单方法?

【问题讨论】:

    标签: git github merge gitattributes


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      那么详细:

      使用 repo url 初始化 git repo

      git remote add origin(远程仓库url)

      确保您位于要从中创建分支的分支中

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

      git checkout --orphan configs_branch

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

      Git 添加。

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

      git push origin configs_url

      成功合并后

      来自父分支

      git checkout 父分支名称

      git fetch --all

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

      git checkout configs_branch -- .

      (执行上述命令后,您仍将位于父分支上)

      提交文件

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

      感谢@vampire 的帮助!

      【讨论】:

        【解决方案3】:

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

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

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

        我在一些脚本中结合了它:https://github.com/keepitfree/faithfulgit

        【讨论】:

          猜你喜欢
          • 2018-05-20
          • 1970-01-01
          • 2017-03-24
          • 2018-07-02
          • 2013-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-18
          相关资源
          最近更新 更多