Как получить какой-либо вывод из "git diff-tree --stdin"?
Страница человека git diff-tree
предполагает, что я могу сделать комбинированный diff (--cc
) с кучей деревьев-объектов по моему выбору. Вы должны использовать --stdin
вариант для этого. Но я не могу получить --stdin
выводить что-либо вообще.
Пример:
$ git diff-tree --stdin
a b
a b
$
Здесь я набрал a
а также b
плохой ввод... Но даже с действительными коммитами и / или дополнительными опциями я никогда не получаю никакого вывода вообще.
Что я делаю неправильно?
1 ответ
Вы должны предоставить полные хэши коммитов или объектов дерева для 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 г.) "git diff-tree --pretty --notes
"использовалось для сбоя утверждения, так как он забыл инициализировать подсистему заметок.
См. Коммит 5778b22 (21 апреля 2020 г.) Тейлор Блау (ttaylorr
).
(Слияние Junio C Hamano -gitster
- в коммите 5a96715, 28 апр 2020 г.)
diff-tree.c
: загрузка отмечает оборудование при необходимостиАвтор отчета : Джефф Кинг.
Подписан: Тейлор Блау.
Автор: Джефф Кинг.С момента его появления в 7249e91 ("
[
revision.c](https
://github.com/git/git/blob/5778b22b3d690495e724276663c36ccd5329da4d/revision.c): support --notes command-line option", 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()
', который ожидает ненулевого значения'display_note_trees
'.Без инициализации механизма заметок,
display_note_trees
'остаетсяNULL
, и, таким образом, вызывает сбой утверждения.Исправьте это, инициализировав механизм заметок после анализа наших опций.