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

[经验分享] Git配置可视化的diff 和merge工具

[复制链接]

尚未签到

发表于 2018-1-15 12:54:20 | 显示全部楼层 |阅读模式
  Windows下使用Git,msysgit是首选,但是msysgit的shell实在不给力,大小不能更改,字体难看。所以,在Windows下,在Cygwin下使用Git是个很不错的选择。
  我们在提交代码前,或是合并代码,查看代码修改时,经常要diff一下看看都有哪些修改内容,diff的输出,晦涩难懂,修改多了的时候,简直像天书一样。Git 1.7以后,有了一个difftool的命令,使用它,用户可以选择一个自己喜欢的diff工具来查看不同提交之间的差异。这个工具可以是命令行的如vimdiff,也可以是带GUI的如Winmerge等。
  Windows下的Diff工具有很多,WinMerge(免费), Araxis Merge(收费),装了TortoiseSVN的话,也带有一个Diff工具TortioseIDiff。
  这里推荐一款SourceGear MergeDiff,支持Windows,Mac,Linux,非常好用。

1. Diff
  首先,新建一个脚本 /usr/bin/mydiff.sh,使用以下内容
  

#!/bin/sh  

  
"$(cygpath -u "C:\Program Files\SourceGear\Common\DiffMerge\sgdm")" \
  
-caption="DiffMerge For Git" -nosplash $(cygpath -w $1) $(cygpath -w $2)
  

  然后在Git中使用我们的工具
  

# 设置执行权限  > chmod a+x /usr/bin/mydiff.sh
  # 添加一个diff工具
  
> git config --global diff.tool mydiff
  

  
# 配置mydiff的命令
  
> git config --global difftool.mydiff.cmd "mydiff.sh \"\$LOCAL\" \"\$REMOTE\""
  

  
# 查看当前目录的修改
  
> git difftool
  

  
# 使用-y,不必每次询问
  
> git difftool -y
  

  
# 查看两个版本之间的差异
  
> git difftool HEAD~2 HEAD
  


2. Merge
  同样的道理,我们也可以使用自定义的Merge工具
  首先,新建一个脚本 /usr/bin/mymerge.sh,使用以下内容
  

#!/bin/sh  

  
# path for DiffMerge
  
DMPATH="C:\Program Files\SourceGear\Common\DiffMerge\sgdm"
  

  
BASEPATH=$(cygpath -w -a "$1")
  
LOCALPATH=$(cygpath -w -a "$2")
  
REMOTEPATH=$(cygpath -w -a "$3")
  
RESULTPATH=$(cygpath -w -a "$4")
  

  
if [ ! -f $1 ]
  
then
  
echo "No Base, Use Empty"
  
TMPBASE="/tmp/git-empty-base"
  
touch $TMPBASE
  
BASEPATH=$(cygpath -w -a "$TMPBASE")
  
fi
  

  
# echo "Base: ""$BASEPATH"
  
# echo "Local: ""$LOCALPATH"
  
# echo "Remote: ""$REMOTEPATH"
  
# echo "Result: ""$RESULTPATH"
  

  
"$(cygpath -u "$DMPATH")" -caption="DiffMerge For Git" -nosplash \
  
-merge -result "$RESULTPATH" -t1=Mine -t2=Merged -t3=Theirs \
  
"$LOCALPATH" "$BASEPATH" "$REMOTEPATH"
  

  然后设置使用mymerge.sh
  

> git config --global merge.tool mymerge  
> git config --global mergetool.mymerge.cmd "mymerge.sh \"\$BASE\" \"\$LOCAL\" \"\$REMOTE\" \"\$MERGED\""
  
> git config --global mergetool.mymerge.trustExitCode false
  

  
# 当merge和rebase发生冲突的时候
  
> git mergetool
  


3. Color
  msysgit中使用git status时会发现是带颜色输出,看起来很直观,其实设置一下就可以了。
  

> git config --global color.diff auto  
> git config --global color.status auto
  
> git config --global color.branch auto
  
> git config --global color.interactive true
  

  或者直接修改~/.gitconfig
  

[diff]  
tool = mydiff
  
[difftool "mydiff"]
  
cmd = mydiff.sh \"$LOCAL\" \"$REMOTE\"
  
[color]
  
diff = auto
  
status = auto
  
branch = auto
  
interactive = true
  
[alias]
  
st = status
  
lg = log -p
  
lol = log --graph --decorate --pretty=oneline --abbrev-commit
  
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
  
ls = ls-files
  
[core]
  
autocrlf = true
  
[merge]
  
tool = mymerge
  
[mergetool "mymerge"]
  
cmd = mymerge.sh \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
  
trustExitCode = false
  

  这时再看log,直观很多

运维网声明 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-435326-1-1.html 上篇帖子: git 命令--上传代码 下篇帖子: [Git] git revert ( revert commit 和 revert merge)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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