当我输入git diff时,我希望看到一个并排的diff,就像用diff -y一样,或者像在kdiff3这样的交互式diff工具中显示diff。如何做到这一点呢?
当前回答
伊迪夫
这个工具以前称为cdiff,可以并排显示、增量显示和彩色显示差异。
而不是做git diff,做:
ydiff -s -w0
这将为每个有差异的文件以并排显示模式启动ydiff。
安装:
python3 -m pip install --user ydiff
-or-
brew install ydiff
对于git日志,您可以使用:
ydiff -ls -w0
-w0自动检测终端宽度。有关详细信息和演示,请参阅ydiff GitHub存储库页面。
在Git 2.18.0, ydiff 1.1中测试。
其他回答
如果你想在不涉及GitHub的情况下在浏览器中看到并排的差异,你可能会喜欢git webdiff,它是git diff的替代品:
$ pip install webdiff
$ git webdiff
与传统的GUI差异工具(如tkdiff)相比,这提供了许多优势,因为它可以为您提供语法高亮显示和显示图像差异。
点击这里阅读更多信息。
其他几个人已经提到了用于git的cdiff,但没有人给出它的完整实现。
设置cdiff:
git clone https://github.com/ymattw/cdiff.git
cd cdiff
ln -s `pwd`/cdiff ~/bin/cdiff
hash -r # refresh your PATH executable in bash (or 'rehash' if you use tcsh)
# or just create a new terminal
编辑~ /。Gitconfig插入这些行:
[pager]
diff = false
show = false
[diff]
tool = cdiff
external = "cdiff -s $2 $5 #"
[difftool "cdiff"]
cmd = cdiff -s \"$LOCAL\" \"$REMOTE\"
[alias]
showw = show --ext-dif
关闭寻呼机是cdiff与Diff一起工作所必需的,它本质上是一个寻呼机,所以这很好。不管这些设置,Difftool都能正常工作。
需要show别名,因为git show仅通过参数支持外部差异工具。
diff external命令后面的“#”很重要。Git的diff命令向diff命令追加了一个$@(所有可用的diff变量),但我们只想要这两个文件名。因此,我们用$2和$5显式地调用这两个,然后将$@隐藏在注释后面,否则会使sdiff混淆。导致如下错误:
fatal: <FILENAME>: no such path in the working tree
Use 'git <command> -- <path>...' to specify paths that do not exist locally.
Git命令现在产生并排差异:
git diff <SHA1> <SHA2>
git difftool <SHA1> <SHA2>
git showw <SHA>
Cdiff usage:
'SPACEBAR' - Advances the page of the current file.
'Q' - Quits current file, thus advancing you to the next file.
你现在通过git diff和difftool得到了并行的diff。如果需要,还可以使用cdiff python源代码进行高级用户定制。
我最近实现了一个这样做的工具:https://github.com/banga/git-split-diffs
下面是如何使用它:
npm install -g git-split-diffs
git config --global core.pager "git-split-diffs --color | less -RFX"
这是它在终端中的外观(使用默认主题):
如您所见,它还支持语法高亮显示和行中更改的单词高亮显示
你也可以试试git diff——word-diff。 它不是完全并排的,但不知何故更好,所以你可能更喜欢它而不是你实际并排的需要。
我用色差。
在Mac OS X上,使用
$ sudo port install colordiff
在Linux上可能会安装colordiff或类似的东西,这取决于你的发行版。
然后:
$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD
或者创建别名
$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""
然后你就可以使用它了
$ git diffy HEAD^ HEAD
我称它为“diffy”,因为diff -y是unix中并排的diff。Colordiff还添加了更好的颜色。 在选项-ydw中,y表示并排,w表示忽略空白,d表示产生最小的diff(通常作为diff会得到更好的结果)
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别