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


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

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

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

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

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

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

20 609

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 describe может быть, как раз то, что вам нужно.

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

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

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

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

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


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

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

About box

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

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

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

самый простой способ-это:

 git log --oneline | wc -l

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

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

git shortlog -s -n

результат :

 827  user one
    15  user two
     2  Gest 

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

git shortlog -s -n

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

git rev-parse --short HEAD

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

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

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

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

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

git revno

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

[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)

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

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

при запуске из кассы master, вы получаете просто 1234.0 или тому подобное. При запуске из кассы филиала вы получите что-то вроде 1234.13, если на этой ветке было сделано 13 коммитов. Очевидно, что это полезно только в том случае, если вы основываете не более одной ветви от a учитывая 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"