Почему 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 должен иметь возможность отслеживать файл в этом случае, потому что он выводит операции переименования, а не хранит их явно, и файлы достаточно похожи, что я считаю, что он должен рассматривать их тот же.



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

629   4  

4 ответов:

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.