Гит:как анализировать код, имеющий многофайловую историю?

StackOverflow https://stackoverflow.com/questions/2096491

  •  21-09-2019
  •  | 
  •  

Вопрос

Я собираюсь переместить массу файлов в существующем проекте.Прежде чем я это сделаю, я хотел бы иметь четкое представление о некоторых методах, используемых для анализа кода с многофайловой историей.

Как я могу использовать 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 это то, что вы бы использовали, чтобы спросить: «Откуда взялась эта строка кода?».Я не знаю, обрабатывает ли он переименования.Вероятно, так и есть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top