Как мне получить git commit count?

Я хотел бы получить количество коммитов моего репозитория Git, немного похожее на номера версий SVN.

цель состоит в том, чтобы использовать его как уникальный, увеличивающий номер сборки.

в настоящее время мне это нравится, в Unix/Cygwin/msysGit:

git log --pretty=format:'' | wc -l

но я чувствую, что это немного взломать.

есть ли лучший способ сделать это? Было бы здорово, если бы мне на самом деле не нужно было wc или даже Git, чтобы он мог работать на голых окнах. Просто прочитайте файл или каталог структура...

20 ответов


чтобы получить счетчик фиксации для ревизии (HEAD, master фиксация хэш):

git rev-list --count <revision>

чтобы получить количество фиксации во всех ветвях:

git rev-list --all --count

Я рекомендую не использовать это для идентификатора сборки, но если вы должны, вероятно, лучше использовать счетчик для ветви, против которой вы строите. Так же редакция всегда будет иметь тот же номер. Если вы используете счетчик для всех ветвей, активность в других ветвях может изменить номер.


git shortlog Это один из способов.


git rev-list HEAD --count

git rev-list

git rev-list <commit> : Список коммитов, которые доступны, следуя родительским ссылкам из данной фиксации (в этом случае глава).

--count: выведите число, указывающее, сколько коммитов было бы перечислено, и подавите все остальные выходные данные.


эта команда возвращает количество коммитов, сгруппированные по исполнителям:

git shortlog -s

git shortlog -s
14 John lennon
9  Janis Joplin

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


вы не первый, кто думал о "номер редакции" в Git, аwc' довольно опасно, так как фиксация может быть стерта или раздавлена, а история пересмотрена.

"номер редакции" был особенно важен для Subversion, так как он было необходимо в случае слияния (SVN1.5 и 1.6 улучшились на этом фронте).

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

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

(As ответ бомба указывает, что Git фактически имеет собственный алгоритм, основанный на последнем теге, плюс количество коммитов, плюс немного SHA-1 ключевой.) Вы должны увидеть (и upvote) его ответ, если он работает для вас.


иллюстрации Аарон идея, вы можете также добавьте хэш git commit в файл "info" приложения вы распространяете с вашим приложением.

таким образом, поле about будет выглядеть так:

About box

номер приложения является частью фиксации, но файл "info" приложения генерируется во время упаковки процесс, эффективно связывающий applicative номер сборки для технической ревизии id.


чтобы получить его в переменную, самый простой способ сделать это:

export GIT_REV_COUNT=`git rev-list --all --count`

простой способ:

 git log --oneline | wc -l

oneline гарантирует, что.


U может просто использовать:

git shortlog -s -n

результат :

 827  user one
    15  user two
     2  Gest 

git shortlog-один из способов получить сведения о фиксации:

git shortlog -s -n

Это даст количество коммитов, за которыми следует имя автора. Параметр - s удаляет все сообщения фиксации для каждой фиксации, выполненной автором. Удалите ту же опцию, если вы хотите видеть сообщения фиксации. Опция-N используется для сортировки всего списка. Надеюсь, это поможет.


git rev-parse --короткая голова


есть хороший вспомогательный скрипт, который люди Git используют для создания полезного номера версии на основе описания Git. Я показываю сценарий и объясняю его в своем ответе Как бы вы включили текущий идентификатор фиксации в файлы проекта Git?.


создайте число во время сборки и запишите его в файл. Всякий раз, когда вы делаете выпуск, зафиксируйте этот файл с комментарием "Build 147" (или независимо от номера сборки в настоящее время). Не фиксируйте файл во время нормальной разработки. Таким образом, вы можете легко сопоставлять между номерами сборки и версиями в Git.


если вы просто используете одну ветку, такую как master, я думаю, что это будет отлично работать:

git rev-list --full-history --all | wc -l

это выведет только число. Вы можете псевдоним его к чему-то вроде

git revno

чтобы сделать вещи очень удобно. Для этого отредактируйте свой .git/config file и добавьте это в:

[alias]
    revno = "!git rev-list --full-history --all | wc -l"

это не будет работать на Windows. Я не знаю эквивалента "wc" для этой ОС, но написание скрипта Python для подсчета для вас было бы многоплатформенным решение.


в нашей компании мы переехали из SVN в Git. Отсутствие номеров ревизий было большой проблемой!

Do git svn clone, а затем пометить последнюю фиксацию SVN по номеру редакции SVN:

export hr=`git svn find-rev HEAD`
git tag "$hr" -f HEAD

тогда вы можете получить номер редакции с помощью

git describe --tags --long

эта команда дает что-то вроде:

7603-3-g7f4610d

означает: последний тег-7603-это редакция SVN. 3-это количество коммитов от него. Мы должны добавить их.

Итак, пересмотр количество можно посчитать по этому скрипту:

expr $(git describe --tags --long | cut -d '-' -f 1) + $(git describe --tags --long | cut -d '-' -f 2)

тот, который я использовал был:

git log | grep "^commit" | wc -l

просто, но это сработало.


использование синтаксиса Bash,

$(git rev-list --count HEAD)

выглядит отлично для чисто линейной истории. Если вы также хотите иногда иметь "номера" из ветвей (на основе off master), считать:

$(git rev-list --count $(git merge-base master HEAD)).$(git rev-list --count ^master HEAD)

при запуске из кассы master, вы получаете просто 1234.0 или тому подобное. При запуске из кассы ветки вы получите что-то вроде 1234.13, если на этой ветке было сделано 13 коммитов. Очевидно, что это полезно только постольку, поскольку вы основываете не более одной ветви дано master пересмотр.

--first-parent можно добавить к микро-номеру, чтобы подавить некоторые коммиты, возникающие только при слиянии других ветвей, хотя это, вероятно, не нужно.


Вы можете попробовать

git log --oneline | wc -l

или перечислить все коммиты, сделанные людьми, вносящими вклад в репозиторий

git shortlog -s

git config --global alias.count 'rev-list --all --count'

Если вы добавите это в свою конфигурацию, вы можете просто сослаться на команду;

git count


используйте git shortlog так же, как это

git shortlog -sn

или создать псевдоним (для терминала на основе ZSH)

# show contributors by commits alias gcall="git shortlog -sn"