git -log: разделить Typechange на Add и Delete - PullRequest
0 голосов
/ 21 апреля 2020

Я вывожу необработанный дифференциал фиксации, используя

git log -1 --raw <sha1>

Теперь этот вывод может содержать TYPECHANGE таких записей

:100644 120000 <old-sha> <new-sha> T My/Changed/File

Если необработанный дифференциал выводится в сочетании с патч как

git log -1 -p --raw <sha1>

файл My/Changed/File будет отображаться как 2 патча, один для DELETION и другой ADDITION. Я хотел бы получить правильные имена файлов из необработанной части и использовать diff из выходных данных патча, но, поскольку число различий не равно необработанным записям различий, я не могу сопоставить их один за другим.

Можно ли сказать git, что нужно разделить TYPECHANGE записей в сыром дифференциале на пару DELETION/ADDITION, чтобы это выглядело так?

:100644 000000 <old-sha> 000000000 D My/Changed/File
:000000 120000 000000000 <new-sha> A My/Changed/File

1 Ответ

0 голосов
/ 21 апреля 2020

Запись изменения типа означает, что то, что было a файлом , теперь является символами c ссылкой или наоборот. 1

Нет строк для добавления или удаления. Git должен полностью удалить старый файл или символическую ссылку - какой бы она ни была - и полностью установить новую символическую ссылку или файл. Причина, по которой git log -p или git show показывает это как «удалить одно имя, добавить новую сущность с тем же именем», заключается в том, что на самом деле требуется два шага ... но эти два шага представляют собой одно изменение при сравнении старого (a/) коммита с новым (b/) коммитом.

Если вы просто пытаетесь сопоставить поля, просто помните, что все изменения T -статуса достигаются двумя отдельными операции: удалить старую, добавить новую.


1 Она также может представлять изменение файла в gitlink, или наоборот, или из symlink в gitlink, или наоборот , Я думаю, что это охватывает все возможности, поскольку не-дерево, превращающееся в дерево, или наоборот, всегда представлено добавлением / удалением файлов, которые вызывают существование дерева. Если Git может хранить пустые объекты дерева, Git может захотеть режим T для пустого каталога в файл или наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...