140 git git-diff code-visualization
当我输入"git diff"时,我想看到一个并排的差异,就像"diff -y"一样,或者喜欢在像"kdiff3"这样的交互式差异工具中显示差异.如何才能做到这一点?
Mat*_*all 132
用git difftool而不是git diff.你永远不会回去.
这是一个链接到另一个stackoverflow,讨论git difftool: 如何使用我首选的diff工具/查看器查看'git diff'输出?
对于较新版本git,该difftool命令支持许多开箱即用的外部差异工具.例如vimdiff,自动支持,可以通过以下命令从命令行打开:
cd /path/to/git/repo
git difftool --tool=vimdiff
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Til*_*ilo 82
虽然Git有diff的内部实现,但您可以设置外部工具.
指定外部差异工具有两种不同的方法:
GIT_EXTERNAL_DIFF和GIT_DIFF_OPTS环境变量.git config也可以看看:
git diff --help执行a时git diff,Git会检查上述环境变量及其.gitconfig文件的设置.
默认情况下,Git将以下七个参数传递给diff程序:
path old-file old-hex old-mode new-file new-hex new-mode
Run Code Online (Sandbox Code Playgroud)
您通常只需要旧文件和新文件参数.当然,大多数diff工具只使用两个文件名作为参数.这意味着你需要编写一个小的包装器脚本,它接受Git为脚本提供的参数,并将它们交给你选择的外部git程序.
假设你把你的包装脚本放在~/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"
Run Code Online (Sandbox Code Playgroud)
然后,您需要使该脚本可执行:
chmod a+x ~/scripts/my_diff.sh
Run Code Online (Sandbox Code Playgroud)
然后你需要告诉Git如何以及在哪里找到自定义差异包装器脚本.你有三种选择:(我更喜欢编辑.gitconfig文件)
使用GIT_EXTERNAL_DIFF,GIT_DIFF_OPTS
例如,在.bashrc或.bash_profile文件中,您可以设置:
GIT_EXTERNAL_DIFF=$HOME/scripts/my_diff.sh
export GIT_EXTERNAL_DIFF
Run Code Online (Sandbox Code Playgroud)运用 git config
使用"git config"定义可以找到包装器脚本的位置:
git config --global diff.external ~/scripts/my_diff.sh
Run Code Online (Sandbox Code Playgroud)编辑~/.gitconfig文件
您可以编辑~/.gitconfig文件以添加以下行:
[diff]
external = ~/scripts/my_diff.sh
Run Code Online (Sandbox Code Playgroud)注意:
与安装自定义差异工具类似,您还可以安装自定义合并工具,它可以是一个可视化合并工具,以更好地帮助可视化合并.(参见progit.org页面)
请参阅:http://fredpalma.com/518/visual-diff-and-merge-tool/和https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
mb1*_*b14 42
你也可以试试git diff --word-diff.它不是完全并排,但不知何故更好,所以你可能更喜欢它与你真正的并排需求.
小智 35
ydiff(以前称为cdiff)可以并排显示,增量显示和彩色差异.
有了它,你可以使用:
ydiff -s
Run Code Online (Sandbox Code Playgroud)
这将git diff针对每个具有差异的文件以并排显示模式启动.
有关详细信息和演示,请参阅ydiff GitHub存储库页面.
sta*_*fry 15
您可以按如下方式并排diff使用sdiff:
$ git difftool -y -x sdiff HEAD^ | less
Run Code Online (Sandbox Code Playgroud)
在哪里HEAD^,你应该替换你想要反对的任何东西.
我在这里找到了这个解决方案,其中还有其他一些建议.然而,这一个答案是OP的问题简明扼要.
有关参数的解释,请参阅man git-difftool.
Shr*_*rey 13
我最近实现了一个工具,可以做到这一点: https: //github.com/banga/git-split-diffs
使用方法如下:
npm install -g git-split-diffs
git config --global core.pager "git-split-diffs --color | less -RFX"
Run Code Online (Sandbox Code Playgroud)
这就是它在终端中的外观(使用默认主题):
正如你所看到的,它还支持语法高亮和高亮行内更改的单词
小智 8
export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'
Run Code Online (Sandbox Code Playgroud)
那简单地说:
git diff
Run Code Online (Sandbox Code Playgroud)
如果你想在不涉及GitHub的情况下在浏览器中看到并排差异,你可能会喜欢git webdiff,这是一个替代品git diff:
$ pip install webdiff
$ git webdiff
Run Code Online (Sandbox Code Playgroud)
与传统的GUI difftools相比tkdiff,它提供了许多优势,例如它可以为您提供语法高亮显示和显示图像差异.
在这里阅读更多相关信息.
我用colordiff.
在Mac OS X上,安装它
$ sudo port install colordiff
Run Code Online (Sandbox Code Playgroud)
在Linux上可能apt get install colordiff或类似的东西,取决于您的发行版.
然后:
$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD
Run Code Online (Sandbox Code Playgroud)
或者创建一个别名
$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""
Run Code Online (Sandbox Code Playgroud)
然后你可以使用它
$ git diffy HEAD^ HEAD
Run Code Online (Sandbox Code Playgroud)
我称它为"diffy",因为它diff -y是unix中的并排差异.Colordiff还添加了更好的颜色.在选项中-ydw,y是并排的,w是忽略空格,d而是产生最小的差异(通常你得到一个更好的结果作为差异)
我个人非常喜欢icdiff!
如果你在Mac OS X用HomeBrew,只是做brew install icdiff。
为了正确获取文件标签以及其他很酷的功能,我在我的~/.gitconfig:
[pager]
difftool = true
[diff]
tool = icdiff
[difftool "icdiff"]
cmd = icdiff --head=5000 --highlight --line-numbers -L \"$BASE\" -L \"$REMOTE\" \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)
我像这样使用它: git difftool
对于unix,将just git和内置组合diff:
git show HEAD:path/to/file | diff -y - path/to/file
Run Code Online (Sandbox Code Playgroud)
当然,您可以将HEAD替换为其他git引用,并且可能要-W 170在diff命令中添加类似内容。
假设您只是将目录内容与过去的提交进行比较。在两次提交之间进行比较更为复杂。如果您的外壳是bash,则可以使用“进程替换”:
diff -y -W 170 <(git show REF1:path/to/file) <(git show REF2:path/to/file)
Run Code Online (Sandbox Code Playgroud)
哪里REF1和REF2git参考–标签,分支或哈希。
| 归档时间: |
|
| 查看次数: |
80107 次 |
| 最近记录: |