Можно ли аннотировать "git diff"?

Я пытаюсь обобщить разницу между "старым" и "новым" состоянием базы кода.

  • Я мог бы просто "git log", но, к сожалению, сообщения коммита не всегда достаточны.
  • Я мог бы сделать "git diff", но я хотел бы увидеть некоторые объяснения различий, которые я вижу, или, по крайней мере, совершить хэши, чтобы сэкономить на потом
  • Я мог бы сделать "git diff --stat", а затем "git annotate" для файлов, которые изменились, но я не вижу, как просить аннотацию показывать только изменения с определенного коммита.

В идеале я хотел бы получить вывод "git diff", где все строки "+" и "-" будут аннотированы информацией о коммитах, которые в последний раз вносили эти изменения; в идеале, в хорошем формате git (например, хэш, автор и дата).

Как это можно достичь?

Ответ 1

Вы можете написать небольшой скрипт, который делает что-то вроде

git blame before > before
git blame after > after
diff -u before after

:)

См. man 1 git re: GIT_EXTERNAL_DIFF.

Ответ 2

Обратите внимание, что вы можете попросить git blame:

  • аннотироваться с определенной фиксации См. " Git 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.

Ответ 3

Я не думаю, что в настоящее время это возможно легко. Но если вы хотите увидеть контекст для фиксации diff файла с информацией о вине, вы можете сделать что-то вроде:

$ sha1=$(git rev-parse --short HEAD); git blame $sha1 -- filename |grep -C5 --color ^$sha1

git blame будет аннотировать файл, как обычно, и grep отобразит пять строк контекста для каждого изменения, внесенного в этот коммит.

Ответ 4

Я не знаю, есть ли простой способ получить аннотированные результаты git diff (например, "обвиненный diff").

Вы можете использовать --full-diff для git log -p чтобы получить сообщение коммита + diff.

Ответ 5

git-diff-blame кажется актуальным.

Отобразить diff вместе с информацией о вине, например, автором и фиксацией

Ответ 6

Я работал над инструментом (на основе Python), чтобы сделать именно это... даже подсчитывая удаленные строки, делая что-то похожее на обратную аннотацию (обратная аннотация не совсем то, что требуется, потому что она покажет последнюю ревизию, где была строка В настоящее время он не будет указывать на ревизию, в которой была удалена строка, поэтому для выяснения потребуется немного больше анализа). Я надеюсь, что это соответствует вашим потребностям

https://github.com/eantoranz/difflame