Как получить счетчик Git commit?

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

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

В настоящее время я делаю это в Unix/Cygwin/msysGit:

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

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

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

Ответ 1

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

git rev-list --count <revision>

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

git rev-list --all --count

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

Ответ 2

git shortlog является одним из способов.

Ответ 3

git rev-list HEAD --count

git rev-list

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

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

Ответ 4

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

git shortlog -s

Выход:

14 John lennon
9  Janis Joplin

Возможно, вы захотите узнать, что аргумент -s - это форма сокращения --summary.

Ответ 5

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

Ответ 6

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

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

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

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

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


Чтобы проиллюстрировать идею Aaron, вы также можете добавить хэш-код Git в приложения "info" file, который вы распространяете вместе с вашим приложением.

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

About box

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

Ответ 7

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

git shortlog -s -n

Результат:

 827  user one
    15  user two
     2  Gest 

Ответ 8

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

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

Ответ 9

Простым способом является:

 git log --oneline | wc -l

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

Ответ 10

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

git shortlog -s -n

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

Ответ 11

git rev-parse --short HEAD

Ответ 13

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

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

Ответ 14

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

Ответ 15

В нашей компании мы перешли из SVN в Git. Недостаток номеров ревизий был большой проблемой!

Сделайте 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 - количество коммитов от него. Нам нужно добавить их.

Итак, номер версии можно подсчитать с помощью этого script:

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

Ответ 16

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

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

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

Ответ 17

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

Ответ 18

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

git log --oneline | wc -l

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

git shortlog -s

Ответ 19

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

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

git count

Ответ 20

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

git shortlog -sn

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

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