设为首页 收藏本站
查看: 1279|回复: 0

[经验分享] 使用meld作为git的辅助工具

[复制链接]

尚未签到

发表于 2018-1-13 14:21:05 | 显示全部楼层 |阅读模式
  原文链接: https://lrita.github.io/2017/05/14/use-meld-as-git-tool/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

为什么使用meld
  当同一个文件被多人编辑时,经常会出现冲突的问题,因此就需要解决冲突。
  但是git内置的diff、merge工具比较孱弱,经常会发生一些问题,例如

删除的代码被人合并时又加了回来
  删除的代码被人合并时又加了回来,我想这种场景使用git的团队都遇见过。如果出现这种问题时, 解决冲突的人又是一个粗心的家伙,同时代码有没编译出错,则很难再发现产生了这个异常。只有 当bug再次出现时,才会发现“这个bug我明明修复了,怎么代码又回滚了?”。
  下面详细说明一下这个问题出现的原因。
  当git上原始代码为:
  

conflict begin  
Hello world!!!
  
Here is a misuse code.
  
conflict end
  

  

  当用户A、B同时下载该代码同时开发时。
  用户A发现了一个bug,将bug移除,提交代码,代码变更为:
  

conflict begin  
Hello world!!!
  
conflict end
  

  

  同时用户B添加了一个新的功能,代码变更为:
  

conflict begin  
Hello world!!!
  
Here is a misuse code.
  
Here is a new feature.
  
conflict end
  

  

  然后B提交代码时会产生一个冲突,需要解决,则git默认的merge工具则显示冲突代码为:
  

conflict begin  
Hello world!!!
  
<<<<<<< HEAD
  
Here is a misuse code.
  
Here is a new feature.
  
=======
  
>>>>>>> e84872b222b7a9d8a3e8745ea3c9a3e85237503c
  
conflict end
  

  

  然而用户B可能对git的merge显示并不熟悉、或者B是一个粗心的人。此时用户B看到<<<<<<<和=======之间是自己本地提交的新功能代码,则B将merge合并提示信息删除后,代码变为:
  

conflict begin  
Hello world!!!
  
Here is a misuse code.
  
Here is a new feature.
  
conflict end
  

  

  然后B将代码提交,此时可见,被删除的bug代码又回来了,如果此时没有人专门review代码, 大家并没有感觉到上面不对,只有在再次出现bug时才会发现该问题。

三路合并工具
  最容易避免以上问题出现的方式就是采用三路合并工具。场景的三路合并工具有kdiff3、meld、Beyond Compare等。在此推荐meld,该工具具有良好的跨平台能力,无论你使用 Window x/Linux/Mac OS都可以很容易的一键安装该软件,同时免费使用,而且启动速度 快于Beyond Compare等等收费软件。

mac 安装 meld
  执行以下命令一键安装
  

brew install caskroom/cask/meld  

  


git 配置
  修改本地的~/.gitconfig配置文件,加入以下几行配置
  

[merge]  tool = meld
  conflictstyle = diff3
  
[mergetool "meld"]
  cmd = meld $LOCAL $BASE $REMOTE --output=$MERGED --auto-merge
  

  

  当用户运行git pull或者git pull --rebase产生冲突时,执行git mergetool就会弹出meld 的三路合并界面:
  可见界面一共分为3栏,左边一栏为你本地当前文件内容,右面一栏为远端服务器上当前文件内容。 中一栏为本地当前文件原始内容。可见中间一栏meld已经帮你自动合并了,检查无误就可以直接保存 退出了。然后meld帮你自动保存了一份git原始冲突文件xxx.orig,检查无误可以删除此文件。
  注:当不同行冲突时,meld会帮你自动合并,当同一行冲突时,meld会以git 冲突文件的格式显示在 中间栏,此时你比较判断<<<<<<< HEAD/=========/>>>>>>>>3行直接的差异手动合并即可。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434686-1-1.html 上篇帖子: git 学习之什么是版本库 下篇帖子: git
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表