Ответ 1
Вы можете написать небольшой скрипт, который делает что-то вроде
git blame before > before
git blame after > after
diff -u before after
:)
См. man 1 git
re: GIT_EXTERNAL_DIFF
.
Я пытаюсь обобщить разницу между "старым" и "новым" состоянием базы кода.
В идеале я хотел бы получить вывод "git diff", где все строки "+" и "-" будут аннотированы информацией о коммитах, которые в последний раз вносили эти изменения; в идеале, в хорошем формате git (например, хэш, автор и дата).
Как это можно достичь?
Вы можете написать небольшой скрипт, который делает что-то вроде
git blame before > before
git blame after > after
diff -u before after
:)
См. man 1 git
re: GIT_EXTERNAL_DIFF
.
Обратите внимание, что вы можете попросить git blame
:
git blame -c fe25b6d^ -- src/options.cpp
? ": git blame -c fe25b6d^ -- src/options.cpp
git blame -c --since=3.weeks -- foo
Примечание bis: я предпочитаю git blame -c
для git annotate:
Единственная разница между этой командой и
git-blame
заключается в том, что они используют несколько разные форматы вывода, и эта команда существует только для обратной совместимости для поддержки существующих скриптов и предоставления более знакомого имени команды для людей, поступающих из других систем SCM.
Я не думаю, что в настоящее время это возможно легко. Но если вы хотите увидеть контекст для фиксации diff файла с информацией о вине, вы можете сделать что-то вроде:
$ sha1=$(git rev-parse --short HEAD); git blame $sha1 -- filename |grep -C5 --color ^$sha1
git blame
будет аннотировать файл, как обычно, и grep
отобразит пять строк контекста для каждого изменения, внесенного в этот коммит.
Я не знаю, есть ли простой способ получить аннотированные результаты git diff
(например, "обвиненный diff").
Вы можете использовать --full-diff
для git log -p
чтобы получить сообщение коммита + diff.
git-diff-blame кажется актуальным.
Отобразить diff вместе с информацией о вине, например, автором и фиксацией
Я работал над инструментом (на основе Python), чтобы сделать именно это... даже подсчитывая удаленные строки, делая что-то похожее на обратную аннотацию (обратная аннотация не совсем то, что требуется, потому что она покажет последнюю ревизию, где была строка В настоящее время он не будет указывать на ревизию, в которой была удалена строка, поэтому для выяснения потребуется немного больше анализа). Я надеюсь, что это соответствует вашим потребностям