Git配置可视化的diff 和merge工具

来源:互联网 发布:js面向对象小例子 编辑:程序博客网 时间:2024/04/29 12:39

Git配置可视化的diff 和merge工具

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 DiffMergeDMPATH="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,直观很多

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 喂奶以后胸变小了怎么办 健身完肩膀缝疼怎么办 生过孩子胯部宽怎么办 无肩带文胸往下滑怎么办 内衣肩带老是往下滑怎么办 乳房发育一边大一边小怎么办 母猫乳房有硬块怎么办 19岁乳晕很大乳头很小怎么办 做完俯卧撑胳膊特别痛怎么办 电压低风扇转不动怎么办 小孩不配合康复锻炼怎么办 跑步机安全开关脱落怎么办 办健身卡贵了怎么办 跑步机安全锁丢了怎么办 老公的腿老是疼怎么办 跑步机钥匙丢了怎么办 跑步机磁铁丢了怎么办 瑜伽拉筋拉伤了怎么办康复 大腿拉筋拉伤了怎么办 肚子饿的咕咕叫怎么办 手表折叠扣松了怎么办? 手表链扣松了怎么办? 原车挡泥板碎了怎么办 车检通不过的车怎么办 车子被轻微刮了怎么办 车龙门架弯了怎么办 材料合格工地非说不合格怎么办 汽车翼子板撞过弄好缝隙大怎么办 手表秒针摔掉了怎么办 元征升降机泄压怎么办 自拍杆的杆子往下下滑怎么办 小狗被车压了一下拉血怎么办 有鬼给你磕头让你不好怎么办 腿又粗又短怎么办 腿又短又粗怎么办 因跑步小腿变粗怎么办 健身后小腿变粗怎么办 打非洲鼓打的手疼怎么办 无塔供水压力小怎么办 家用增压水塔压力不稳定怎么办 蝴蝶耳堵比较紧怎么办