Как мне получить 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 rev-list HEAD --count
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 будет выглядеть так:
прикладное число является частью фиксации, но файл "информация" приложения генерируется во время упаковки процесс, эффективно связывающий аппликативный номер сборки для технической ревизии id.
чтобы получить его в переменную, самый простой способ сделать это:
export GIT_REV_COUNT=`git rev-list --all --count`
git shortlog-это один из способов получить сведения о фиксации:
git shortlog -s -n
Это даст количество коммитов, за которыми следует имя автора. Параметр-s удаляет все сообщения фиксации для каждой фиксации, выполненной автором. Удалите ту же опцию, если вы хотите видеть сообщения фиксации также. Опция-N используется для сортировки всего списка. Надеюсь, это поможет.
есть хороший вспомогательный скрипт, который люди 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)
используя синтаксис 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