我在使用 svn 之后正在探索 git,并且很难找到
svn log --diff --diff-cmd=meld
的等效工具来显示日志,并为每个提交打开 diff 工具(此处为 meld)
有吗?
git log -p
似乎大部分都在那里,但似乎没有 --tool=
选项git difftool
似乎没有一个简单的机制来显示沿日期/提交范围的增量更改无需将其连接到 git,因为您可以使用经典的 posix 工具轻松地编写该行为:
git log [...] --pretty=%H | xargs -L1 git show
这将在您在
git show
中指定的任何提交范围的每次提交上一一运行 [...]
(请研究 gitrevisions(7)
联机帮助页的指定范围部分)。当然,您也可以将任何命令替换为 xargs 调用,甚至编写显式
| while read line; do echo Buzzing $line; done
循环。由于 --pretty=%H
,我们将提交哈希值输入到管道中,每行一个,并且 -L1
使 xargs 在管道输入的每个 git show <sha>
上调用 <sha>
。
默认的
git show
将遵循 PAGER
环境变量; export PAGER=less
是一种常见的选择,但我喜欢另一种名为 bat 的选择。
我希望这已经满足了您的需求。更多提示/建议。
在较大的提交范围内,您可能更愿意在单个寻呼机实例中简单地审查
git log [...] -p
,而不是运行寻呼机 N 次。按 q 退出一次,比按 q N 次更烦人。搜索(使用 /)也会更好。
如果您坚持在 GUI 中查看差异,请考虑学习和配置 IDE 集成或独立 git 客户端。这可能比尝试使用混合 CLI+GUI 组合来支持您的工作流程更适合您。
话虽如此,你当然可以在
meld
中查看差异,同时继续操作 git cli。 Git 有一个 difftool 的概念 - 请参阅此问题以获取指导:设置并使用 Meld 作为 Git difftool 和 mergetool
甚至还有专用的 diff 工具可以增强对 unified diff 语法的阅读(与 Meld 中的 split-diff 两面板格式相反):diff-so-fancy、delta,可能更多。请参阅这些存储库的自述文件以预览它们的功能、安装并配置到 git cli 中。就像 gitconfig 中的片段一样简单,如下所示:
#-- https://github.com/so-fancy/diff-so-fancy
[core]
pager = diff-so-fancy | less --tabs=4 -RFX
[interactive]
diffFilter = diff-so-fancy --patch
[diff-so-fancy]
stripLeadingSymbols = false
markEmptyLines = false
——是的,它很好地融入了
git show
。
最后:我发现 Meld 在 3 路差异模式下解决合并或变基期间的冲突时特别有用。这几乎是相同的概念;它称为 mergetool。
似乎没有一个简单的机制来显示沿日期/提交范围的增量更改git difftool
这与 difftools 的作用正交;过滤提交范围是由
git log
处理的工作。请研究 gitrevisions(7)
手册页的指定范围部分。