Почему 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.Итак, если у вас есть некоторый интерес в истории файла как блока (по любой причине), то кажется, что это можно сделать относительно легко. Хотя у меня сложилось впечатление, что ГИТ предпочел бы что ты использовал его правильно.
Comments