的手册页git diff-tree
建议我可以--cc
用我选择的一堆树对象来组合 diff ()。您必须为此使用该--stdin
选项。但我根本无法--stdin
输出任何东西。
例子:
$ git diff-tree --stdin
a b
a b
$
在这里我输入a<Space>b<Enter>Ctrl-D:它甚至没有抱怨a
并且b
是错误的输入......但即使使用有效的提交哈希和/或其他选项,我也永远不会得到任何输出。
我究竟做错了什么?
的手册页git diff-tree
建议我可以--cc
用我选择的一堆树对象来组合 diff ()。您必须为此使用该--stdin
选项。但我根本无法--stdin
输出任何东西。
例子:
$ git diff-tree --stdin
a b
a b
$
在这里我输入a<Space>b<Enter>Ctrl-D:它甚至没有抱怨a
并且b
是错误的输入......但即使使用有效的提交哈希和/或其他选项,我也永远不会得到任何输出。
我究竟做错了什么?
您必须将提交或树对象的完整git diff-tree --stdin
哈希提供给:
$ git log -3 --pretty=%H
a30ec5de57bbfa0c19045f3c094ec6eb4d808eb4
f0939d956ad9ef2a00360139a6f1d1ad66accbe5
fcdb73de293b2442231e5d8ce19f9c7d1640d186
$ # lines typed on stdin are marked by ->
$ git diff-tree --stdin
->fcdb73de293b2442231e5d8ce19f9c7d1640d186 a30ec5de57bbfa0c19045f3c094ec6eb4d808eb4
fcdb73de293b2442231e5d8ce19f9c7d1640d186
:040000 040000 e2aed2af18fb5293903a0d0b78c23e00a893394d c56666f973b77d92d52b68a14c5a26ac3508571a M example
:040000 000000 7cc3373fd5cad3bfe6ec261e9dcc3a9e97efe488 0000000000000000000000000000000000000000 D prc
:000000 040000 0000000000000000000000000000000000000000 275872c00a9f51016d2273419345b3b1d7535630 A src
->275872c00a9f51016d2273419345b3b1d7535630 7cc3373fd5cad3bfe6ec261e9dcc3a9e97efe488
275872c00a9f51016d2273419345b3b1d7535630 7cc3373fd5cad3bfe6ec261e9dcc3a9e97efe488
:100644 100644 f26b2198fd9a0103f57a5bd828e58043507ea7b7 c52116f6d185548061058099dfe4c9e50d523aff M chord.cpp
:100644 100644 fcbfcdc036fb53733176ed30fd82eb261a990d5b 403e323f332a18b45dfdebfd3a8bfb1a62158bb4 M chord.hpp
:100644 100644 11a931f795b44cd916e1607d819eed4d5342edba 333b596faf596d73758bce949e6d86e596153126 M polyphonic_track.cpp
:100644 100644 7196835de2385d3f1e0b20073d327cb432ed436c f9fbbac93ef6fc19ae99113ff39a06f4df50720e M polyphonic_track.hpp
另一种方式:
git rev-list HEAD | git diff-tree --stdin
但是,在 Git 2.27(2020 年第 2 季度)之前,“ git diff-tree --pretty --notes
”曾经遇到断言失败,因为它忘记了初始化 notes 子系统。
请参阅Taylor Blau ( ) 的提交 5778b22(2020 年 4 月 21 日)。(由Junio C Hamano 合并 -- --在提交 5a96715中,2020 年 4 月 28 日)ttaylorr
gitster
diff-tree.c
:在需要时加载注释机器报告人:Jeff King
签字人:Taylor Blau
签字人:Jeff King自从在7249e91中引入(“
[
revision.c](https
://github.com/git/git/blob/5778b22b3d690495e724276663c36ccd5329da4d/revision.c):支持--notes 命令行选项”,2011-03-29,Git v1.7.6 -rc0 -合并在批次 #0中列出),将 '--notes
' 与任何导致我们格式化注释的选项(例如,'--pretty
'、'--format="%N"
' 等)组合会导致运行时断言失败。$ git rev-list HEAD | git diff-tree --stdin --pretty=medium --notes commit 8f3d9f354286745c751374f5f1fcafee6b3f3136 git: notes.c:1308: format_display_notes: Assertion `display_notes_trees' failed. Aborted
此失败是由于 diff-tree 未调用“
load_display_notes
”来初始化笔记机器。通常,不会触发此失败,因为它需要同时传递 '
--notes
' 和上述另一个选项。
例如,在''的情况下--pretty
,我们设置'opt->verbose_header
',导致'show_log()
'最终调用'format_display_notes()
',它需要一个非NULL'display_note_trees
'。如果不初始化注释机制,'
display_note_trees
' 仍然存在NULL
,因此会触发断言失败。通过在解析我们的选项后初始化笔记机制来解决这个问题。