如何使用我偏好的diff工具/查看器查看“git diff”输出?

824

当我键入git diff命令时,我希望使用我选择的可视化差异工具(Windows上的SourceGear "diffmerge")查看输出。如何配置git以实现这一点?


118
在所有新版本的git中,您可以使用“git difftool”代替“git diff”,这将打开一个可视化的差异比较程序。 - Debajit
2
gitx - http://gitx.frim.nl/. 就这样了。 - Alex Grande
1
在这里你可以找到简短的教程:http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy - Dmitry Bespalov
使用git difftool -tool=opendiff命令并将opendiff替换为任何其他工具。 - potench
6
在 Git Bash 中前往您的代码库。输入 git config diff.tool winmerge。通过输入 git difftool 来验证它是否可用。通过输入 git config --global difftool.prompt false 来取消提示。我建议使用 p4merge 而不是 winmerge。 - Michael S.
显示剩余3条评论
26个回答

2

我尝试了一些花哨的东西(使用tkdiff),但对我没有用。所以我写了下面这个脚本,名为tkgitdiff。它可以做到我需要的功能。

$ cat tkgitdiff
#!/bin/sh

#
# tkdiff for git.
# Gives you the diff between HEAD and the current state of your file.
#

newfile=$1
git diff HEAD -- $newfile > /tmp/patch.dat
cp $newfile /tmp
savedPWD=$PWD
cd /tmp
patch -R $newfile < patch.dat
cd $savedPWD
tkdiff /tmp/$newfile $newfile

1

我已经长时间在文件~/.gitconfig中使用这个位:

[diff]
    external = ~/Dropbox/source/bash/git-meld

使用 git-meld
#!/bin/bash
if [ "$DISPLAY" = "" ];
then
    diff $2 $5
else
    meld $2 $5
fi

但现在我厌倦了在图形界面中始终使用Meld,而且使用这种设置调用普通的差异不是一件简单的事情,所以我转而使用了这个:

[alias]
    v =  "!sh -c 'if [ $# -eq 0 ] ; then git difftool -y -t meld ; else git difftool -y $@ ; fi' -"

使用这个设置,像这样的事情可以工作:

git v
git v --staged
git v -t kompare
git v --staged -t tkdiff

我仍然可以保留好用的旧版 git diff


1
我在Ubuntu上使用Kompare
sudo apt-get install kompare

比较两个分支:

git difftool -t kompare <my_branch> master

0

如果您不喜欢使用命令行,那么如果您安装TortoiseGit,您可以右键单击文件以获取TortoiseGit子菜单,并选择“稍后比较”选项。

当您在第一个文件上选择此选项后,您可以右键单击第二个文件,转到TortoiseGit子菜单并选择“与==yourfilehere==比较”。 这将为结果提供TortoiseGit合并GUI。


0

你可能想要尝试一下xd,它是Git/SVN diff的GUI封装器,本身并不是一个diff工具。

当你想要运行git diff或者svn diff时,你可以运行xd,它会显示一个文件列表、一个预览窗口,并且你可以启动任何你喜欢的diff工具,包括tkdiff、xxdiff、gvimdiff、Emacs (ediff)、XEmacs(ediff)、MeldDiffuseKompareKDiff3。你也可以运行任何自定义工具。

不幸的是这个工具不支持Windows操作系统。

声明: 我是这个工具的作者。


0

如果您已经将差异工具与文件类型关联(例如,因为您安装了附带差异查看器的TortoiseSVN),则可以将常规的git diff输出导入“temp”文件,然后直接打开该文件,而无需了解有关查看器的任何信息:

git diff > "~/temp.diff" && start "~/temp.diff"

将其设置为全局别名会更好:git what
[alias]
    what = "!f() { git diff > "~/temp.diff" && start "~/temp.diff"; }; f"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接