Гит:как анализировать код, имеющий многофайловую историю?
Вопрос
Я собираюсь переместить массу файлов в существующем проекте.Прежде чем я это сделаю, я хотел бы иметь четкое представление о некоторых методах, используемых для анализа кода с многофайловой историей.
Как я могу использовать git, чтобы спросить:"Откуда взялась эта строка кода?" Когда контент перенес несколько файлов в время жизни?
Я знаю, что git не отслеживает переименования явно (по уважительной причине), поэтому кажется, что я должен иметь возможность спросить об этом, я просто не знаю, как это сделать.Если есть методы, позволяющие визуализировать это, тоже было бы здорово узнать.
Решение
Я бы порекомендовал взглянуть на три инструмента в наборе инструментов git.Первый — это вина, что очень похоже на то, что происходит в cvs.Он показывает, какой коммит последним затронул каждую строку в файле.Если вы хотите посмотреть, что было раньше, вы можете взять коммит, который коснулся линии, и посмотреть предыдущий коммит.
git show <sha1_of_interesting_commit>^ -- file/path
Вы можете повторить обвинение, чтобы увидеть, что произошло до этого.
git blame <sha1_of_interesting_commit>^ -- file/path
Второй инструмент использует --follow
для отслеживания прошлых переименований файлов.
git log --follow -- file/path
Третий и, возможно, самый полезный инструмент — это кирка для входа в систему.При этом в истории выполняется поиск изменений удаленных, введенных или измененных строк, содержащих заданный фрагмент текста.Это особенно полезно для отслеживания таких вещей, как имена функций.Он может быть новым в файле конкретного коммита, но был ли он взят из другого исходного файла?Вызов к нему был добавлен одновременно или до его перемещения?
git log -S"Interesting_Function"
Если вы используете патч или опцию статистики (например. -p
или --stat
) вывод будет ограничен теми файлами, изменения которых фактически включали строку поиска, если вы также не используете --pickaxe-all
где отображаются все изменения.
В сочетании с git grep
Чтобы показать, где находятся все текущие вхождения строки, кирка — чрезвычайно полезный инструмент для анализа истории.
Другие советы
git blame
это то, что вы бы использовали, чтобы спросить: «Откуда взялась эта строка кода?».Я не знаю, обрабатывает ли он переименования.Вероятно, так и есть.