当我输入git diff时,我希望看到一个并排的diff,就像用diff -y一样,或者像在kdiff3这样的交互式diff工具中显示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会得到更好的结果)
其他回答
我用色差。
在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会得到更好的结果)
伊迪夫
这个工具以前称为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中测试。
这里有一个方法。如果管道通过less, xterm宽度设置为80,这不是很热。但是如果继续执行命令,例如COLS=210,则可以使用扩展的xterm。
gitdiff()
{
local width=${COLS:-$(tput cols)}
GIT_EXTERNAL_DIFF="diff -yW$width \$2 \$5; echo >/dev/null" git diff "$@"
}
你可以使用sdiff做一个并排的diff,如下所示:
$ git difftool -y -x sdiff HEAD^ | less
其中HEAD^是一个例子,你应该用任何你想要反对的东西来替换它。
我在这里找到了这个解决方案,还有一些其他的建议。然而,这一个答案是OP的问题简洁而清楚。
有关这些论点的解释,请参阅man 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
其他几个人已经提到了用于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源代码进行高级用户定制。
推荐文章
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?
- 我如何迫使git拉覆盖每一个拉上的一切?
- 撤销“git add <dir>”?
- 是否可以在不先签出整个存储库的情况下进行稀疏签出?
- 如何移除SSH密钥?