Почему в git log не отображается история перемещенного файла и что я могу с этим сделать? - PullRequest
79 голосов
/ 09 декабря 2010

Я переименовал пару файлов, используя git mv, использовал git stash, быстро взглянул на HEAD (не меняя его), затем сделал git stash pop, чтобы вернуть все обратно.Мои ходы исчезли из списка коммитов, поэтому я переделал их с помощью git rm, и сообщение о коммите заявило, что git обнаружил, что переименование было переименовано.Так что я больше об этом не думал.

Но теперь, после коммита, я не могу получить историю перемещенных файлов!Вот что говорит git о коммите:

~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.h
 delete mode 100644 test/R_DebugUI_iOS.m
 create mode 100644 system/runtime/src/R_DebugUI_iOS.h
 create mode 100644 system/runtime/src/R_DebugUI_iOS.m

 <<snip older commits>>
 ~/projects%

Сейчас я пытаюсь получить историю одного из этих перемещенных файлов, поэтому я могу посмотреть старую версию, но не получаючто-нибудь очень полезное:

~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime
~/projects/system/runtime/src% 

(я тоже пробовал без -M, -C и --find-copies-harder, но безрезультатно.)

Я могу получить его историюпод его старым именем, которое останавливается в том месте, где оно было удалено из прежнего местоположения:

~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.m

commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date:   Tue Dec 7 23:52:51 2010 +0000

    Can set debug UI's alpha.

<<snip older commits>>
~/projects%

Так что на этот раз я не совсем застрял, но мне не хотелось бы делать такие вещивсе время.(Я предполагаю наличие достаточного количества файлов, которые будут перемещаться хотя бы раз в их жизни.)

Я что-то не так делаю?Старая копия файла и новая копия на 98,8% одинаковы (2 строки из 166 изменены).Насколько я понимаю, git должен иметь возможность отслеживать файл в этом случае, потому что он выводит операции переименования, а не сохраняет их явно, и файлы достаточно похожи, так что я считаю, что они должны считать их одинаковыми.

что я могу сделать, чтобы это исправить?

Ответы [ 4 ]

102 голосов
/ 16 ноября 2011

Пожалуйста, попробуйте с git log --follow в вашем файле. Я учусь здесь Можно ли перемещать / переименовывать файлы в git и поддерживать их историю?

25 голосов
/ 09 декабря 2010

Ну, я вижу мои переименования с git log -M --summary ..

14 голосов
/ 14 декабря 2010

Отвечая на мой собственный вопрос, так как мне удалось смягчить свои проблемы, даже если я точно не решил свою проблему. (git log --follow все еще не работает для меня, хотя.)

Во-первых, журнал --summary для фиксации переименования содержит строку delete со старым именем файла. Так что, если это легко заметить, вы можете найти его старое имя и git log оттуда.

Если это часть какого-то большого коммита и, следовательно, его немного сложнее обнаружить - и эта ситуация была одной из моих проблем - git blame -C можно использовать с новым именем файла в первой ревизии после переименования. Предположительно строки остаются от исходного файла! - так что git должен найти их источник и показать старое имя файла (и хеш коммита для хорошей меры). Затем вы можете подобрать след с помощью git log.

Итак, если вас интересует история файла как единицы (по какой-либо причине), то, похоже, это можно сделать относительно просто. Хотя у меня сложилось впечатление, что мерзавец предпочел бы, чтобы вы использовали его правильно.

7 голосов
/ 12 апреля 2016
git log --follow ./path/to/file

Я считаю, что это то, что вы ищете.

...