Advertisement

git可视化diff与merge工具

阅读量:

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 是一款非常实用的选择。此外,请注意不要被其名称误导:误以为其仅适用于merging操作时,请明确它还可以执行diff操作。

p4merge

p4merge 是 \texttt{Perforce} 这家公司的产品系列中的一款叫 Perforce 的软件的一个非开源但免费使用的产品。
值得特别指出的是,在商业版本控制系统的领域中,Perforce 无可争辩地占据了无可争议的第一位地位。

安装与配置

为了方便后续操作,在使用perforce工具时需要从perforce官方渠道获取p4merge程序包(该程序包已进行了编译处理)。随后将下载得到的压缩文件解压至当前工作目录中指定位置,在我的设备上完成解压操作后将文件存放于本地路径...其中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即可。

两个场景

使用视觉化比较工具进行差分分析以及用于解决merges冲突时的差异对比是两种典型应用场景。

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

了解这个图表。上半部分分为三块区域:中间区域展示了本次合并的核心代码库(即两个分支的共同祖先 commit 的信息)。左边区域列出了要合并分支的所有代码细节(),右边区域则显示当前分支的所有现有代码项(current branch)。下半部分展示的是合并后的完整项目架构图(final merged view)。通过右侧提供的几个子选项框能够方便地选择目标模块(target module)。

几个选项

当执行 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无法得知参与者是否已经解决了合并冲突, 所以它会向用户提供询问. 用户可以选择使用 --trust-exit-code 选项让git查看合并结果以判断任务是否完成.

在运行命令 git mergetool 并退出p4merge之后,在冲突目录中的README文件会在其自身目录中生成一个备份副本 README.orig 。默认情况下,冲突文件会保持原有的内容;如果希望不要保存这个备份副本,则可以适当配置以避免其生成。

复制代码
    git config --global mergetool.keepBackup false

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

官方文档

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

关于详细信息,请访问git官方文档-git-difftool查看。

深入探讨 git mergetool 的更多信息,请访问 git官方文档 - git-mergetool以获取详细信息。

转载于:https://my.oschina.net/starfx/blog/524128

全部评论 (0)

还没有任何评论哟~