git отлично справляется с перемещением / переименованием каталогов, но для отслеживания изменений между этими переименованиями вам может понадобиться добавить некоторые дополнительные параметры к любой команде, которую вы используете, или установить несколько параметров конфигурации.
причина этого в том, что git просто сохраняет состояние дерева при каждом коммите, а не изменения, которые имели место для перехода из одного состояния в другое.Если в вашем исходном дереве много файлов, вам может потребоваться указать git, чтобы он активно пытался найти любые переименования.Точно так же, если вы заинтересованы в конкретном файле, вам нужно явно указать git для поиска возможных переименований в его прошлом.
Чтобы привести пример последнего, типичный случай использует git log -- filename
для изучения истории конкретного файла.Чтобы заставить git также искать его историю перед любым переименованием, которое могло произойти, вы должны сделать:
git log --follow -- filename
В качестве другого примера, полезный вывод git log --stat
может не включать все вашипереименовывает или копирует, если в вашем дереве много файлов, так как для этого нужно проверить все пары файлов.Чтобы заставить git обнаруживать копии и переименовывать при использовании git log
и git diff
, вы можете установить для параметра конфигурации diff.renameLimit
как минимум количество файлов в вашем дереве и установить для параметра конфигурации diff.renames
значение copies
-это означает обнаружение копий и переименований.
В качестве альтернативы, если вы не хотите устанавливать их в качестве параметров конфигурации, вы можете использовать опции -M
или -C
для git log
или git diff
.Более подробно они описаны в ответе Якуба Наребски на этот вопрос: