文档章节

git可视化diff与merge工具

star_fx27
 star_fx27
发布于 2015/10/30 17:28
字数 1005
阅读 7.3K
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

git支持很多种diff和merge工具,可以使用下面的命令查看。

git difftool --tool-help
# or
git mergetool --tool-help

命令输出如下:

'git difftool --tool=<tool>' may be set to one of the following:
        araxis
        vimdiff
        vimdiff2
        vimdiff3

The following tools are valid, but not currently available:
        bc3
        codecompare
        deltawalker
        diffmerge
        diffuse
        ecmerge
        emerge
        gvimdiff
        gvimdiff2
        gvimdiff3
        kdiff3
        kompare
        meld
        opendiff
        p4merge
        tkdiff
        xxdiff

Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

以上输出的含义是araxis, vimdiff, vimdiff2, vimdiff3这几个工具已经安装在我们的系统上,可以直接使用。
下面列出的其他的工具git也可以支持,但是还没有被安装到系统中。

那么这么多的工具哪个最好用呐?根据我自己的体验, p4merge 是最好用的一个。
多提一句,不要被p4merge这个名字误导,以为它只能做merge,它也可以做diff的。

p4merge

p4merge是 perforce 这家公司出品的叫perforce的软件旗下的一个免费(没开源)工具。
这里必须提一下,在商业VCS(Version Control System)领域,perforce是绝对的第一,没有之一。

安装与配置

首先在perforce的官方网站下载到p4merge的包(已经是编译好的二进制文件)。
解压包的内容到一个目录下,我这里解压到我本机的 /usr/local/p4v/ 目录下,p4merge的绝对路径是 /usr/local/p4v/bin/p4merge

想要让git识别p4merge需要进行如下配置:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.path "/usr/local/p4v/bin/p4merge"

这里可能有人会问为什么没看到有关diff的配置,这是因为git的merge配置会默认应用到diff上,所以只需要配置merge即可。

两个场景

使用可视化diff和merge工具的两个主要场景就是查看版本之间的diff信息和在merge冲突后通过可视化的视图来解决冲突。

diff

首先执行下面的命令来查看master分支上最新的提交和倒数第二次提交的diff。

git difftool master^ master

GUI截屏如下:

git-visual-diff-and-merge-tool-p4merge-diff-vie

从图上可以很直观的看到文件在不同版本的diff。

merge

当执行 git merge <branch> 产生冲突后,执行下面的命令来查看冲突后的场景。

git mergetool

GUI截屏如下:

git-visual-diff-and-merge-tool-p4merge-merge-vie

解释一下这个图,上半部分分为3块,中间一块是本次合并的代码基,也就是两个分支的共同祖先commit的内容。
左边一块是要合并的分支 <branch> 的内容。右边一块是当前分支的内容。
下半部分是合并后希望产生的最终内容。可以方便的通过右面的几个图形来动态选择希望的内容。

几个选项

当执行 git difftool <ref-a> <ref-b> 时git会提示:

Viewing (1/1): 'Documentation/RelNotes/2.5.1.txt'
Launch 'p4merge' [Y/n]:

如果希望不要每次都出现这个提示,可以使用 -y | -Y | --no-prompt 参数来告诉git不要提示。
这个选项同样适用于执行 git mergetool 时出现的提示。

当执行 git mergetool 然后从p4merge里退出来以后,git会询问:

Was the merge successful? [y/n]

这是因为git不知道用户有没有在p4merge中解决掉冲突,所以才会询问用户,可以使用 --trust-exit-code 选项来告诉git读取p4merge的返回值来确定成功与否。

当执行 git mergetool 然后从p4merge里退出来以后,发现在冲突的文件(假设叫 README)的同名目录下多出来一个 README.orig 的文件。
保留冲突文件的原始内容是git的默认逻辑,如果希望不要保存,可以使用以下配置来避免:

git config --global mergetool.keepBackup false

这样git就不会再自动产生 .orig 文件了。

官方文档

有关 p4merge 更多的内容请执行 /path/to/p4merge -h 了解。

有关 git difftool 更多的内容请到 git官方文档-git-difftool了解。

有关 git mergetool 更多的内容请到 git官方文档-git-mergetool了解。

上一篇: git安装与配置
下一篇: git图形化工具
star_fx27
粉丝 0
博文 3
码字总数 1464
作品 0
昌平
程序员
私信 提问
加载中
请先登录后再评论。
Linux 反汇编工具--LDasm

LDasm (Linux 反汇编工具) 是一个基于 Perl/TK 的 objdump/binutils 图形化工具,试图模仿 W32Dasm 工具的外观。可搜索相互参照,将代码从 GAS 转换成 MASM 风格代码等等。...

匿名
2013/01/22
5.6K
1
HTTPS切换工具--HttpsSwitcher

HttpsSwitcher 是一个帮你进行 HTTPS 切换的 Chrome 插件,本工具可以帮你尝试使用https打开指定的域名,点击本插件的浏览器图标后会自动切换本标 签页的http/https状态,并且会记住你的选择...

leehorsley
2013/01/26
1K
0
Web开发组件管理器--Bower

Bower 是一个针对Web开发的包管理器。该工具主要用来帮助用户轻松安装CSS、JavaScript、图像等相关包,并管理这些包之间的依赖。 功能有些类似于Component。不同之处是,Component是围绕Git...

匿名
2013/02/01
1.2W
2
数据库代码辅助工具--MaoCaiJun.Database

MaoCaiJun.DataBase 是一个用于 Microsoft Visual Studio 的数据库代码生成组件。它是基于 xml 文件的代码创建工具,支持sql2000,sql2005,sql2008,access, SQLite MaoCaiJun.Database 数据库...

mccj
2013/02/06
2.3K
1
漏洞检测工具--Peach Fuzzer

Peach是一种用Python编写的 Fuzzer。这种工具有助于发现并公开许多漏洞,并认为是黑客和安全团体中最流行的工具之一。为了利用Peach框架,必须创建Phthon脚本,脚本 中包含了在服务器上执行的...

匿名
2013/02/06
8.8K
1

没有更多内容

加载失败,请刷新页面

加载更多

Trends期刊8月中国论文合辑

作为Cell Press细胞出版社旗下的权威综述月刊,Trends系列旨在为科学家们提供具有权威性且易于理解的科研趋势。其16本Trends期刊涵盖生命科学和化学的不同领域。 为了让大家对于Trends期刊有...

科研菌
昨天
11
0
C语言哈希表uthash的使用方法详解(附下载链接)

工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流! 爱好跑步,打篮球,睡觉。 欢迎加我QQ1500836631(备注CSDN),一起学习交流...

osc_h7zc4umy
29分钟前
13
0
CGB2004-京淘项目Day08

1.实现图片回显 1.1准备虚拟路径 1.1.1 编辑image.properties 说明:在jt-manager中创建image.properties文件,在其中编辑关于图片配置的所有信息. 1.1.2 编辑FileServiceImpl 说明:实现虚拟路...

osc_gp8avabl
30分钟前
18
0
C++核心准则​E.28:避免基于全局状态的错误处理(例如errno)

蜀葵 E.28: Avoid error handling based on global state (e.g. errno) E.28:避免基于全局状态的错误处理(例如errno) Reason(原因) Global state is hard to manage and it is easy to for......

面向对象思考
今天
16
0
网易2020校招笔试- 大数据开发工程师(正式批)

目录 一、翻倍 方法一:暴力 方法二:递归 二、跳柱子 方法一:暴力,寻找能到达的最高柱子,方便我下次跳 方法二:动态规划dp 三、人数统计 方法:哈希表 四、积木 方法 如果你从本文中学习...

osc_8kei32r9
32分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部