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

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

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

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

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

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

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

Ответы [ 20 ]

1026 голосов
/ 31 октября 2010

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

git rev-list --count <revision>

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

git rev-list --all --count

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

141 голосов
/ 23 апреля 2010

git shortlog в одну сторону.

102 голосов
/ 09 марта 2013

git rev-list HEAD --count

git rev-list

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

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

75 голосов
/ 14 ноября 2011

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

git shortlog -s

git shortlog -s
14 John lennon
9  Janis Joplin
53 голосов
/ 24 марта 2009

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

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

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

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

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

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

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


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

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

About box

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

26 голосов
/ 26 декабря 2017

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

git shortlog -s -n

Результат:

 827  user one
    15  user two
     2  Gest 
21 голосов
/ 16 июля 2011

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

export GIT_REV_COUNT=`git rev-list --all --count`
20 голосов
/ 06 февраля 2014

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

 git log --oneline | wc -l

oneline обеспечивает это.

15 голосов
/ 25 ноября 2012

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

git shortlog -s -n

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

...