Почему git log не показывает историю для перемещенного файла, и что я могу с этим поделать?

я переименовал пару файлов с помощью git mv, используется git stash, быстро взглянул на голову (не меняя ее), затем сделал 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 ответов


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


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


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

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

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

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


git log --follow ./path/to/file

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