是否存在相当于 svn log --diff --diff-cmd= 的 git?

问题描述 投票:0回答:1

我在使用 svn 之后正在探索 git,并且很难找到

svn log --diff --diff-cmd=meld
的等效工具来显示日志,并为每个提交打开 diff 工具(此处为 meld)

有吗?

  • git log -p
    似乎大部分都在那里,但似乎没有
    --tool=
    选项
  • git difftool
    似乎没有一个简单的机制来显示沿日期/提交范围的增量更改
git svn git-svn
1个回答
0
投票

无需将其连接到 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-fancydelta,可能更多。请参阅这些存储库的自述文件以预览它们的功能、安装并配置到 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) 手册页的
指定范围部分

© www.soinside.com 2019 - 2024. All rights reserved.