每日前端
大道至简

git attributes-合并分支部分文件代码策略

前沿:最近需要做一个复制的项目,项目中大部分代码是不变的,只有部分配置和样式的代码需要不一样,新的项目和原项目公共部分的代码都需要更新维护,希望用同一个git仓库来管理代码,合并的时候部分文件不进行合并,下面是网上找到的一篇文章,很符合我的需求

痛点:
最近公司在使用敏捷开发的方式,目前来说我们项目组遇到这样一个问题,在比较长的一段时间内有两个并行开发中的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.具体路径方式:WLS_DOM_Demo/war_file/src/it/resources/*.xml merge=ours,因为it目录是我们手动添加的,并不是maven标准工程的一部分,所以要想忽略it目录下的文件冲突,可以使用这种具体路径方式,上面第A,B两种方式只对标准的maven工程目录有效。

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了,于是就直接“跳过了”。

需要注意的: 文件无改动时,merge driver不会启动,还是会被合并,也就是说如果当前分支作为合并分支,但不想合并的文件在其他分支被改了,当前分支没有改,需要做一些修改才能防止被合并。

未经允许不得转载:每日前端 » git attributes-合并分支部分文件代码策略
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

一个更全的前端开发资源库

立即前往