Git: как анализировать код, имеющий историю нескольких файлов? - PullRequest
7 голосов
/ 19 января 2010

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

Как я могу использовать git, чтобы спросить: "откуда взялась эта строка кода?" когда контент прошел через несколько файлов за время его жизни?

Я знаю, что git не отслеживает переименования явно (по уважительной причине), поэтому мне кажется, что я должен спросить об этом, я просто не знаю, как Если есть способ визуализировать это, было бы тоже неплохо знать.

Ответы [ 2 ]

5 голосов
/ 19 января 2010

Я бы порекомендовал посмотреть на три инструмента в наборе инструментов 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, чтобы показать, где находятся все текущие вхождения строки, кирка является чрезвычайно полезным инструментом для поиска истории.

0 голосов
/ 19 января 2010

git blame - это то, что вы бы использовали, чтобы спросить «откуда взялась эта строка кода?». Я не знаю, обрабатывает ли он переименования. Вероятно, делает.

...