2 Star 0 Fork 0

花雨夜-艺术 / git-merge

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

git-merge

https://blog.csdn.net/sinat_19968265/article/details/80308116

##痛点:        最近公司在使用敏捷开发的方式,目前来说我们项目组遇到这样一个问题,在比较长的一段时间内有两个并行开发中的git分支,并且其中一个为主干分支,需要不定期地从另外一个分支merge code到主干分支上,那么这样就会带来一个问题,如果在某些相同的文件上,假如两个分支都会对其进行修改,在进行合并的时候,往往会出现很多冲突,这时候不得不花费大量时间去解决冲突,如果希望以主干分支的文件的内容为准,完全忽略另一个分支的内容,举个简单的例子说明一下,有两个branch: A和B, 一个经常在合并出现冲突的文件:pom.xml, 在从B合并到A的时候,想以A的pom.xml为准,完全忽略与B的冲突,那么如何解决这个痛点呢?GitAttributes有办法帮我们解决这样的问题,有一个.gitattributes文件可以帮助我们自定义合并策略(merge strategies),以下是官方文档:

https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes

自定义合并策略步骤:

  1. 在项目根目录下的.gitattributes文件(假如没有这个文件自己想办法创建一个这样的后缀文件出来)中定义哪些文件在合并的时候要忽略冲突,并以我们当前分支的内容为准;以下列举几种方式

    A. 具体到文件:pom.xml merge=ours
    B. 通配符方式:.xml merge=ours
    C. 具体路径方式:.env
    merge=ours
    D. src/**/* merge=ours

  2. 大家应该有疑问,上面的ours是什么来的?个人理解这个ours就是一个git-diff的自定义driver名称,当进行code merge的时候,git会调用git-diff进行文件的比较,比较文件是否有差异(冲突),那么我们可以自定义比较的driver,让git不使用内置的比较方式,而是使用我们自定义的,所以这一步就是添加自定义的比较driver,名称为ours,在git cmd中执行如下命令:

  git config --global merge.ours.driver true

这句命令的意思是:当进行code merge,调用git-diff命令的时候,git会读取.gitattributes文件,然后发现例如pom.xml文件需要执行git-diff自定义driver:ours,而oursdriver设置为true了,于是就直接“跳过了”。

  1. 执行完2的命令后,如果是window系统,那么在当前登录的user的目录下的.gitconfig文件中会多了这么几行配置,例如我的是这个目录:C:\Users\LIWA.gitconfig

需求 dev 分支合并到 master 分支,两个分支都有相同文件名的配置,但配置内容不一样
合并时以 master 分支的配置文件为准,忽略 dev 分支的配置文件

dev 分支
    .env

master 分支
    .env

要以 master 分支的 .env 为准需要做以下步骤

merge=ours 满足的条件 文件必须有差异和冲突

1. # git config --global merge.ours.driver true   

2. 在 master 分支下创建 .gitattributes 文件            
    内容为:    
        .env merge=ours     
        .env.dev.test merge=ours            
        src/**/* merge=ours     
        
3. 在合并之前,在 master 分支先创建 .env 文件 或者 修改 .env 的内容(如果有 .env 文件) 
    (为什么要这么做:应该是在文件发生冲突时才会执行ours的合并策略,以我们的文件为主)     
    (修改 .env 的内容,不用在每次合并都去修改,只需要在第一次这么做。不管后期合并多少次,都会有差异 git 都会以 master 的 .env 为准)
4. 在 master 分支执行合并  
    # git merge dev

空文件

简介

暂无描述 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/xxmi-art/git-merge.git
git@gitee.com:xxmi-art/git-merge.git
xxmi-art
git-merge
git-merge
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891