Список авторов в git, так как данный коммит

Мне нужен способ перечислить всех авторов git, которые

  • Только после данной фиксации.
  • Уникален.

Эти два являются легкими, и я видел некоторые решения для этого онлайн, большинство из которых использовало git log --format. Но ни один из них, который я видел, не соответствует дополнительным требованиям:

  • Заказывается по дате фиксации. Поэтому, если Джон Смит покончил с Аароном Меурером, его имя должно появиться перед моим (я Аарон Меурер).
  • Уважает .mailmap. Насколько я могу судить, только git shortlog делает это, и это дает кучу лишних вещей, которые я не хочу. Но, возможно, я ошибаюсь. Или, может быть, те из вас, кто более удобен с sed и друзьями, чем я, просто использовал бы это.

(кстати, как заставить Markdown не перезапускать нумерацию?)

Я также хочу, чтобы заказать его по имени, но это относительно легко.

Ответы

Ответ 1

Следующие спецификаторы формата будут решать вашу вторую проблему:

% aN: имя автора (с учетом .mailmap)
% aE: электронная почта автора (с учетом .mailmap)
% cN: имя коммиттера (с учетом .mailmap)
% cE: committer email (уважаемый .mailmap)

Итак, дисконтируя дублируемую часть автора, вы хотите что-то вроде

git log <commit>.. --format="%aN <%aE>" --reverse

Я подозреваю, что вы можете передать его через что-то, что делает дедупликацию на основе хеш-таблицы, perl oneliner будет тривиальным:

git log <commit>.. --format="%aN <%aE>" --reverse | perl -e 'my %dedupe; while (<STDIN>) { print unless $dedupe{$_}++}'

Ответ 2

Примечание для людей, которые хотят "global stat":

git shortlog -s -n -e

Дайте глобальную статистику, зафиксированную автором.