Почему 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 --follow
по-прежнему не работает для меня.)
во-первых,--summary
журнал для фиксации переименования включает delete
строку со старым именем файла. Поэтому, если его легко обнаружить, вы можете найти его старое название и git log
оттуда.
если это часть какой-то большой коммит, и поэтому немного труднее обнаружить, и эта ситуация была одной из моих забот -- git blame -C
может использоваться с новым именем файла в первой версии после переименования. Предположительно, строки остаются из исходного файла! -- поэтому git должен найти свой источник и показать старое имя файла (и хэш фиксации для хорошей меры). Затем вы можете забрать след с git log
.
Итак, если у вас есть некоторый интерес в истории файла как блока (по любой причине), то кажется, что это можно сделать относительно легко. Хотя у меня сложилось впечатление, что git предпочел бы что ты правильно его использовала.