Git: массивный рефакторинг, ведущий журнал изменений - PullRequest
4 голосов
/ 11 марта 2011

Можно ли выполнить масштабный рефакторинг, который включает перемещение и переименование многих каталогов без потери отслеживания изменений Git?

1 Ответ

6 голосов
/ 11 марта 2011

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.Более подробно они описаны в ответе Якуба Наребски на этот вопрос:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...