git diff 工具设置_Git外部的合并与比较工具

本文介绍如何将P4Merge图形化工具与Git结合使用,实现定制化的文件比较与合并功能。通过设置脚本和Git配置,用户可以利用P4Merge有效解决版本控制系统中的文件差异与合并冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然 Git 自己实现了diff,而且到目前为止你一直在使用它,但你能够用一个外部的工具替代它,除此以外,你还能用一个图形化的工具来合并和解决冲突从而不必自己手动解决。有一个不错且免费的工具可以被用来做比较和合并工作,它就是P4Merge(译注:Perforce图形化合并工具),我会展示它的安装过程。

P4Merge可以在所有主流平台上运行,现在开始大胆尝试吧。对于向你展示的例子,在Mac和Linux系统上,我会使用路径名,在Windows上,/usr/local/bin应该被改为你环境中的可执行路径。

下载P4Merge:

http://www.perforce.com/perforce/downloads/component.html

首先把你要运行的命令放入外部包装脚本中,我会使用Mac系统上的路径来指定该脚本的位置,在其他系统上,它应该被放置在二进制文件p4merge所在的目录中。创建一个merge包装脚本,名字叫作extMerge,让它带参数调用p4merge二进制文件:

$ cat /usr/local/bin/extMerge#!/bin/sh/Applications/p4merge.app/Contents/MacOS/p4merge $*

diff包装脚本首先确定传递过来7个参数,随后把其中2个传递给merge包装脚本,默认情况下, Git 传递以下参数给diff:

path old-file old-hex old-mode new-file new-hex new-mode

由于你仅仅需要old-filenew-file参数,用diff包装脚本来传递它们吧。

$ cat /usr/local/bin/extDiff#!/bin/sh[ $# -eq 7 ] && /usr/local/bin/extMerge "$2" "$5"

确认这两个脚本是可执行的:

$ sudo chmod +x /usr/local/bin/extMerge
$ sudo chmod +x /usr/local/bin/extDiff

现在来配置使用你自定义的比较和合并工具吧。这需要许多自定义设置:merge.tool通知 Git 使用哪个合并工具;mergetool.*.cmd规定命令运行的方式;mergetool.trustExitCode会通知 Git 程序的退出是否指示合并操作成功;diff.external通知 Git 用什么命令做比较。因此,你能运行以下4条配置命令:

$ git config --global merge.tool extMerge
$ git config --global mergetool.extMerge.cmd \'extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"'
$ git config --global mergetool.trustExitCode false
$ git config --global diff.external extDiff

或者直接编辑~/.gitconfig文件如下:

[merge]
tool = extMerge[mergetool "extMerge"]
cmd = extMerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
trustExitCode = false[diff]
external = extDiff

设置完毕后,运行diff命令:

$ git diff 32d1776b1^ 32d1776b1

命令行居然没有发现diff命令的输出,其实,Git 调用了刚刚设置的P4Merge,它看起来像图这样:

ca7abc8000e647b4a3b2e4d1517c58df.png

当你设法合并两个分支,结果却有冲突时,运行git mergetool,Git 会调用P4Merge让你通过图形界面来解决冲突。

设置包装脚本的好处是你能简单地改变diff和merge工具,例如把extDiffextMerge改成KDiff3,要做的仅仅是编辑extMerge脚本文件:

$ cat /usr/local/bin/extMerge#!/bin/sh/Applications/kdiff3.app/Contents/MacOS/kdiff3 $*

现在 Git 会使用KDiff3来做比较、合并和解决冲突。

Git预先设置了许多其他的合并和解决冲突的工具,而你不必设置cmd。可以把合并工具设置为:kdiff3、opendiff、tkdiff、meld、xxdiff、emerge、vimdiff、gvimdiff。如果你不想用到KDiff3的所有功能,只是想用它来合并,那么kdiff3正符合你的要求,运行:

$ git config --global merge.tool kdiff3

如果运行了以上命令,没有设置extMergeextDiff文件,Git 会用KDiff3做合并,让通常内设的比较工具来做比较。

!爆享折扣!

▼▼▼ 原价129 今日拼团仅需 ¥99 人专享首单限时优惠 ¥19.9!!! 但! 仅限前100个名额 ???

0d19ad920392e231da0fa5e3b90bcba3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值