git diff
命令时,我想看到一个并排显示差异的视图,就像使用diff -y
命令一样,或者像在交互式差异工具kdiff3
中显示差异。如何实现这个功能?git diff
命令时,我想看到一个并排显示差异的视图,就像使用diff -y
命令一样,或者像在交互式差异工具kdiff3
中显示差异。如何实现这个功能?使用git difftool
而不是git diff
。你再也不会回头了。
这是一个链接,指向另一个stackoverflow页面,讨论git difftool
:如何使用我喜欢的diff工具/查看器查看'git diff'输出?
对于较新版本的git
,difftool
命令支持许多外部diff工具。例如,vimdiff
是自动支持的,并且可以通过命令行打开:
cd /path/to/git/repo
git difftool --tool=vimdiff
git difftool --tool-help
列出,这里是一个示例输出:'git difftool --tool=<tool>' may be set to one of the following:
araxis
kompare
vimdiff
vimdiff2
The following tools are valid, but not currently available:
bc3
codecompare
deltawalker
diffuse
ecmerge
emerge
gvimdiff
gvimdiff2
kdiff3
meld
opendiff
tkdiff
xxdiff
git difftool -y
来防止 tkdiff 提示。 - gawkfacegit difftool
:https://dev59.com/jmUq5IYBdhLWcg3wEcRZ#48979939 - Gabriel StaplesGIT_EXTERNAL_DIFF
和 GIT_DIFF_OPTS
环境变量。git config
配置外部 diff 工具。ymattw
的答案也很漂亮,使用了 ydiff
。
git diff --help
在执行 git diff
时,Git 检查上述环境变量和它的 .gitconfig
文件。默认情况下,Git 将以下七个参数传递给 diff 程序:
path old-file old-hex old-mode new-file new-hex new-mode
~/scripts/my_diff.sh
下:#!/bin/bash
# un-comment one diff tool you'd like to use
# side-by-side diff with custom options:
# /usr/bin/sdiff -w200 -l "$2" "$5"
# using kdiff3 as the side-by-side diff:
# /usr/bin/kdiff3 "$2" "$5"
# using Meld
/usr/bin/meld "$2" "$5"
# using VIM
# /usr/bin/vim -d "$2" "$5"
接下来,您需要将该脚本设为可执行:
chmod a+x ~/scripts/my_diff.sh
您需要告诉Git如何以及在哪里找到您的自定义差异包装脚本。您有三种选择:(我更喜欢编辑.gitconfig文件)
Using GIT_EXTERNAL_DIFF
, GIT_DIFF_OPTS
e.g. in your .bashrc or .bash_profile file you can set:
GIT_EXTERNAL_DIFF=$HOME/scripts/my_diff.sh
export GIT_EXTERNAL_DIFF
Using git config
use "git config" to define where your wrapper script can be found:
git config --global diff.external ~/scripts/my_diff.sh
Editing your ~/.gitconfig
file
you can edit your ~/.gitconfig
file to add these lines:
[diff]
external = ~/scripts/my_diff.sh
注意:
与安装自定义差异工具类似,您也可以安装自定义合并工具,这可以是一个视觉化合并工具,以更好地帮助可视化合并。(参见progit.org页面)
参见: http://fredpalma.com/518/visual-diff-and-merge-tool/ 和 https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
meld
版本能否配置为进行目录差异比较,以便我可以选择要查看差异的文件?目前它会为每个文件运行单独的 meld
命令,我必须退出 meld
才能查看下一个文件。我更希望 meld
显示出像在 Mercurial 中使用 meld
时一样的更改文件目录列表。 - kasperdgit diff --word-diff
。这不完全是并排显示,但某种程度上更好,因此你可能更喜欢它而非实际需求的并排显示。git diff --word-diff=color
,可以显示不同单词的颜色差异。 - Rolfgit diff --color-words
命令确实可用。 - Hollowaygit diff --color-words
是正确的方法。 - VasiliNovikovydiff
曾被称为cdiff
,这个工具可以展示并排、增量和带有颜色的差异。
不要使用git diff
,请使用以下命令:
ydiff -s -w0
这将以并排显示模式启动ydiff
,以显示每个具有差异的文件。
安装方式:
python3 -m pip install --user ydiff
-或-
brew install ydiff
要使用git log
,您可以使用:
ydiff -ls -w0
-w0
会自动检测终端宽度。详情及演示请参见ydiff
的GitHub存储库页面。
在Git 2.18.0、ydiff 1.1中测试通过。
git diff | cdiff -s
等效的操作吗? - einpoklumydiff -s
,无需进行管道操作。 - ymattwcd <git repo>
,然后运行ydiff -ls <path/to/file>
。 - slm~/.local/bin/ydiff
路径下。 - rubo77你可以使用 sdiff
进行并排比较两个文本的差异,具体方法如下:
$ git difftool -y -x sdiff HEAD^ | less
其中HEAD^
是一个示例,您应该将其替换为要与之进行比较的内容。
我在这里找到了解决方案(链接),还提供了其他一些建议。但是,这个答案简明清晰地回答了提问者的问题。
有关参数的说明,请参见git-difftool手册。
根据评论,您可以编写以下可执行脚本,创建一个方便的git sdiff
命令:
#!/bin/sh
git difftool -y -x "sdiff -w $(tput cols)" "${@}" | less
将其保存为/usr/bin/git-sdiff
并对其进行chmod +x
操作。然后你就可以这样做:
$ git sdiff HEAD^
如评论所建议,您可以使用icdiff
以带颜色的输出执行sdiff
相同的操作:
$ more /usr/bin/git-sdiff
#!/bin/sh
git difftool -y -x "icdiff --cols $(tput cols)" "${@}" | less --raw-control-chars
在Unix系统中,只需结合使用内置的git
和diff
命令:
git show HEAD:path/to/file | diff -y - path/to/file
当然,您可以将 HEAD 替换为任何其他 git 引用,并且您可能希望向 diff 命令添加类似 -W 170
的内容。
这假设您只是将目录内容与过去的提交进行比较。在两个提交之间进行比较会更加复杂。如果您的 shell 是 bash
,则可以使用“进程替换”:
diff -y -W 170 <(git show REF1:path/to/file) <(git show REF2:path/to/file)
其中REF1
和REF2
是git引用——标签、分支或哈希值。
npm install -g git-split-diffs
git config --global core.pager "git-split-diffs --color | less -RFX"
以下是在终端中查看该内容的方式(使用默认主题):
如您所见,它还支持语法高亮和在行内突出显示已更改的单词。
git diff --staged
时非常有效。 - 1Mojojojo1git diff
的即插即用替代品。$ pip install webdiff
$ git webdiff
tkdiff
)有许多优势,因为它可以提供语法高亮和图像差异显示。export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'
git diff
meld
在使用 XQartz-X-Display-Redirect 时也可以很好地在 Debian 到 macOS 的环境下工作。 - Fusca Software我使用colordiff工具。
在Mac OS X上,可以通过以下方式进行安装:
$ sudo port install colordiff
apt get install colordiff
或类似的命令来安装colordiff。然后:$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD
$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""
然后您就可以使用它了。
$ git diffy HEAD^ HEAD
diff -y
是显示并排差异的命令。 Colordiff 还添加了颜色,更加美观。
在选项-ydw
中,y
代表并排差异,w
表示忽略空格,d
表示生成最小差异(通常情况下,使用 diff 命令可以得到更好的结果)。-y
以跳过 启动 'colordiff' [Y/n]:
提示。 - Beni Cherniavsky-Paskingit alias diffy "difftool --extcmd=\"colordiff -ydw\""
吗?难道不应该是 git config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""
吗? - nonopolarityapt install colordiff
或apt-get install colordiff
,apt get install colordiff
无法工作。 - Fusca Software