Как я могу сделать порядок журнала git на основе метрики времени автора?

Я использую довольно сложную команду git-log, включающую --date-order, чтобы получить обзор состояния моего репозитория; но, к сожалению, --date-order, похоже, использует дату коммиттера, а не дату автора. Это означает, что каждый раз, когда я возвращаю свои ветки тем, обновляя их на текущем восходящем потоке, я теряю полезное хронологическое упорядочение в своих git-log относительных коммитах в своих ветвях тем (то есть каждая ветвь становится одной длинной строкой, потому что все его фиксации были переустановлены на последовательные и почти идентичные метки времени коммитера.)

Если бы я мог получить git-log, чтобы выполнить фиксацию по метке времени автора, а не по метке времени коммиттера, это будет разрешено. Кто-нибудь знает, как это сделать?


Для тех, кто посещает это из результатов Google, вы можете посмотреть в josephdpurcell решение (и подробное сообщение в блоге!). Это совершенно отлично, если вы ищете стандартный вывод стиля git-log, многострочный, с подробными сообщениями о каждой фиксации.

К сожалению, мне сейчас нужно изменить этот вопрос, потому что я идиот и не предоставил более конкретной информации о моем прецеденте: я использую git-log в режиме --graph, и мне нужно make git-log работают в порядке-date-order. Насколько мне удалось выяснить, это невозможно сделать извне git-log, потому что git-log сам обрабатывает упорядочение и печать графа.

A script, или патч для git-log, может оказаться необходимым. Я оставлю это открытым до тех пор, пока кто-нибудь не сможет: 1. написать такой script или 2. мы можем поговорить с git авторами, включая комбинацию флагов --author --date-order. (=


Для справки, вот как выглядит текущий текущий glog function, и что мне нужно изменить:

glog output

Ответ 1

git версия 1.8.4 добавила аргумент --author-date-order в git log; в соответствии с примечаниями к выпуску, "результат топологически отсортирован и совершает параллельные истории, показывается смешанным вместе на основе метки времени автора".

Ответ 2

Хорошо, мне потребовалось очень много времени, чтобы выяснить (подробности). Короче говоря, я нашел много примеров, которые были либо неполными, либо неправильными. Следующая команда делает то, что, я думаю, вы ожидаете:

$ git log --pretty="format:%at %C(yellow)commit %H%Creset\nAuthor: %an <%ae>\nDate: %aD\n\n %s\n" | sort -r | cut -d" " -f2- | sed -e "s/\\\n/\\`echo -e '\n\r'`/g" | tr -d '\15\32' | less -R

Вы можете найти этот script и другие в Git Extras на GitHub.

Ответ 3

--date-order/--topo-order действительно просто контролирует упорядочение коммитов в списке ревизий при просмотре нескольких ветвей, работающих рядом с другим. Отношение "x is-a-parent of y" всегда соблюдается, даже если метка времени коммиттера/автора находится в далеком прошлом или будущем.

Вам понадобится что-то вроде git log --pretty="format:%at %H" | sort -g, а затем верните хеши обратно в git log.

Ответ 4

Сборка того, что предложил Йоргенсен, - это решение с одним слоем, которое может дать вам то, что вы ищете. Отформатирован здесь для упрощения просмотра. Усовершенствования приветствуются!

SORTED_GIT_LOGS=$(git log --pretty="format:%at %H" | sort -g | cut -d' ' -f2); \
    IFS=$(echo -en "\n\b"); for LOG in $SORTED_GIT_LOGS; do \
        git show --name-only $LOG; \
    done | less