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

摘要:
在Git1.7之后,有一个difftool命令。有了它,用户可以选择他们喜欢的difftool来查看不同提交之间的差异。该工具可以是命令行,如vimdiff,也可以是GUI,如Winmerge/Bin/sh“$”-cacaption=“DiffMergeForGit”-noplay$$然后使用Git中的工具#设置执行权限˃chmoda+x/usr/Bin/mydiff。sh#添加diff工具˃gitconfig--globaldiff.toolmydiff#用于配置mydiff˃gitconfig--globaldifftool的命令。我的差异。cmd“mydiff.sh”$LOCAL“”$REMOTE“”#查看对当前目录的修改˃gitdifftool#使用-y,无需每次询问˃gitdifftools-y#以查看两个版本之间的差异˃gitdifftoolHEAD~2HEAD2.Merge同样如此。我们也可以使用用户定义的合并工具。首先,创建一个新脚本/usr/bin/mymerge.sh,并使用以下#!

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

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

免责声明:文章转载自《Git配置可视化的diff 和merge工具》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows下安装redis以及测试 --转载自http://www.cnblogs.com/lpyan/p/5608333.html请自行检查是否安装VC9运行库??下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用cwRsync实现windows下文件定时同步

1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1台Client。其架构如下图所示: 虽然叫法不同,但是他们的安装文件和配置文件是完全一样的。并且大多数情况下,也建议这些服务器上面的配置文件保持一致,这样只...

git拉取单个目录

有时git库里的东西比较多,我们只希望像SVN一样,只拉取git库的一个目录。 例如:基础代码仓库infra-code_ops有很多基础代码,我们只想拉取仓库里nginx-conf目录的文件。 $ git init infra-code_ops-nginx && cd  infra-code_ops-nginx          //初始...

Spring Boot 2.4 配置文件将加载机制大变化

Spring Boot 2.4.0.M2 刚刚发布,它对 application.properties 和 application.yml 文件的加载方式进行重构。如果应用程序仅使用单个 application.properties 或 application.yml 作为配置文件,那么可能感受不到任何区别。但是如果您的应用程序使用更复杂的配置(例如,Sp...

Git、Github和GitLab的区别及与SVN的比较

个人理解:   SVN适合领导啊,大家一起在加班,看你进度什么的,git则不必如此,忙完传上来完活。 一、含义: 百度上这样介绍的:   Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软...

MySQL&ES连接池

 数据库的连接池建议放在类似settings.py的配置模块中,因为基本都是配置项,方便统一管理。 1) 连接池类#settings.py import os from DBUtils.PooledDB import PooledDB from elasticsearch import Elasticsearch import pymysql class...

SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据

简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控。本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化。 项目介绍 sc-parent,父模块(请参照SpringCloud学习笔记(1):Eureka注册中心) sc-eureka,注册中心(请参照SpringCloud学习笔...