使用git作为版本控制工具有半年多了。目前还是在边学边用的阶段,因为git这东西内容实在是太多了,学习路线比较陡峭,而且学习过程当中时不时会冒出一些特别有意思的小tips让你十分的惊喜。因此,朋友们,如果你还没有使用git,那么现在立即使用起来吧,即使你现在对他毫无了解,因为git将会给你的开发带去无穷多的帮助,当然其入门也比较容易的。

最近在使用git时出现了这样一个场景:我们一个产品分两条线,两个小组各自开发各自的模块,最后统一发版。但是呢,由于鄙人负责的模块需求比较多,工期也少,人手嘛,只有鄙人一个(真不是在找借口,虽然另外一个组有三个人。。),因此,在开发上落后于另一组较多。为了保证其他小伙伴顺利进行下个版本迭代,我在master上开了个分支来开发当前版本,他们在master上开发下一版本。等我终于开发完成后呢,面临这样一个问题:其他小伙伴在master上修改了几个重要的文件,对产品来说是个较大的改动,因此我把分支merge回master时必须保持这几个文件不会被合并,否则将面临一大坨令人发指的冲突,并且解决冲突也容易出各种各样的问题。这时候怎么办呢?感谢伟大的互联网,让我找到一个完美的解决方案。原帖地址先贴出来,大家膜拜一下,如果能看懂英文,请直接移步该帖,否则,就听小弟勉强翻译一下吧。。。重在表达思想,本人英文水平也不足以一字一句的翻译出来。

原帖地址:点击打开链接

大意是说,git在merge分支时,有一个默认的merge驱动,这个驱动会去检查每个文件的每一行,如果按照一定规则发现两个分支的同一个文件有不同,那么认为两个分支都对这个文件做了修改,会merge两个文件,此时有可能产生冲突;那么如果我们自定义一个merge驱动,在里面定义一些不会被检查的文件,那git就会直接跳过这些文件,因此就不会merge啦。

步骤大概是这个样子滴:

1:创建我们的自定义merge driver:

git config --global merge.ours.driver true

2:在要被merge的分支上创建.gitattributes 文件,并且在文件中置顶不merge的文件名:

echo 'email.json merge=ours' >> .gitattributes
git add .gitattributes
git commit -m 'chore: Preserve email.json during merges'
3:回到要合并到的分支(注意形容词)执行merge:

(newbranch) $ git checkout master
(master) $ git merge newbranch
Auto-merging ...
Merge made by the 'recursive' strategy.
 demo-shared | 1 +
 1 file changed, 1 insertion(+)
经过以上步骤,我们指定的email.json就不会被合并咯
是不是很简单?嘿嘿,去试一试吧!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐