当我输入git diff时,我希望看到一个并排的diff,就像用diff -y一样,或者像在kdiff3这样的交互式diff工具中显示diff。如何做到这一点呢?
当前回答
尽管Git有一个diff的内部实现,但是您可以设置一个外部工具。
有两种不同的方法来指定外部差异工具:
设置GIT_EXTERNAL_DIFF和GIT_DIFF_OPTS环境变量。 通过git config配置外部diff工具
Ymattw的答案也非常简洁,使用ydiff
参见:
https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration Git diff——救命 http://www.pixelbeat.org/programming/diffs/
在执行git diff时,git会检查上述环境变量的设置及其.gitconfig文件。
默认情况下,Git将以下七个参数传递给diff程序:
path old-file old-hex old-mode new-file new-hex new-mode
通常只需要old-file和new-file参数。当然,大多数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"
然后你需要使该脚本可执行:
chmod a+x ~/scripts/my_diff.sh
然后,您需要告诉Git如何以及在哪里找到您的自定义差异包装器脚本。 你有三个选择如何做到这一点:(我更喜欢编辑.gitconfig文件)
使用GIT_EXTERNAL_DIFF, GIT_DIFF_OPTS 例如,在你的.bashrc或.bash_profile文件中,你可以设置: GIT_EXTERNAL_DIFF = $ HOME /脚本/ my_diff.sh 出口GIT_EXTERNAL_DIFF 使用git配置 使用“git config”来定义你的包装器脚本可以在哪里找到: Git配置——global diff.external ~/scripts/my_diff.sh 编辑~/。gitconfig文件 您可以编辑~/。Gitconfig文件添加这些行: (diff) External = ~/scripts/my_diff.sh
注意:
与安装自定义diff工具类似,您还可以安装一个自定义合并工具,它可以是一个可视化的合并工具,以更好地帮助可视化合并。(参见progit.org页面)
参见:http://fredpalma.com/518/visual-diff-and-merge-tool/和https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
其他回答
这可能是一个有点有限的解决方案,但在没有外部工具的情况下使用系统的diff命令完成工作:
diff -y <(git show from-rev:the/file/path) <(git show to-rev:the/file/path)
仅过滤更改行使用——suppress-common-lines(如果您的diff支持该选项)。 在这种情况下,没有颜色,只有通常的不同标记 可以调整列宽度-width=term-width;在Bash中可以获取宽度为$COLUMNS或tput cols。
为了更方便,这也可以被包装到一个helper git-script中,例如,这样使用:
git diffy the/file/path --from rev1 --to rev2
export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'
然后简单的:
git 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中测试。
我个人非常喜欢icdiff !
如果你在Mac OS X上使用HomeBrew,只需安装icdiff即可。
为了获得正确的文件标签,加上其他很酷的功能,我在~/.gitconfig中有:
[pager]
difftool = true
[diff]
tool = icdiff
[difftool "icdiff"]
cmd = icdiff --head=5000 --highlight --line-numbers -L \"$BASE\" -L \"$REMOTE\" \"$LOCAL\" \"$REMOTE\"
我用git difftool
你也可以试试git diff——word-diff。 它不是完全并排的,但不知何故更好,所以你可能更喜欢它而不是你实际并排的需要。
推荐文章
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?
- 我如何迫使git拉覆盖每一个拉上的一切?
- 撤销“git add <dir>”?
- 是否可以在不先签出整个存储库的情况下进行稀疏签出?
- 如何移除SSH密钥?