Как я могу сделать порядок журналов git на основе метки времени автора? - PullRequest
49 голосов
/ 20 декабря 2011

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

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


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

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

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


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

glog output

Ответы [ 4 ]

63 голосов
/ 18 сентября 2013

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

22 голосов
/ 16 января 2013

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

$ 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

Вы можете найти этот скрипт и другие в Дополнения Git на GitHub.

9 голосов
/ 20 декабря 2011

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

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

2 голосов
/ 02 октября 2012

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

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
...