Как я могу получить количество коммитов Git? - PullRequest
686 голосов
/ 24 марта 2009

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

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

Я сейчас так делаю, на Unix / Cygwin / msysGit:

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

Но я чувствую, что это что-то вроде хака.

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

Ответы [ 20 ]

8 голосов
/ 24 ноября 2009

git rev-parse --short HEAD

7 голосов
/ 24 марта 2009

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

4 голосов
/ 26 октября 2012

Если вы используете только одну ветку, например, 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-скрипта для подсчета будет многоплатформенным решением.

3 голосов
/ 11 июня 2014

В нашей компании мы перешли из 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)
3 голосов
/ 24 марта 2009

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

1 голос
/ 11 сентября 2017

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

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

git count

1 голос
/ 15 ноября 2016

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

git log --oneline | wc -l

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

git shortlog -s
1 голос
/ 18 сентября 2014

Использование синтаксиса 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 коммитов. Очевидно, что это полезно только в том случае, если вы основываете не более одной ветви от данной master ревизии.

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

1 голос
/ 31 июля 2011

То, что я использовал, было:

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

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

0 голосов
/ 05 ноября 2015

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

git shortlog -sn

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

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

...