Как я могу сделать порядок журнала 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