Я хотел бы получить количество коммитов моего Git-репозитория, немного похожее на номера ревизий SVN.
Цель состоит в том, чтобы использовать его как уникальный, увеличивающийся номер сборки.
В настоящее время я делаю так, на Unix / Cygwin / msysGit:
git log --pretty=format:'' | wc -l
Но я чувствую, что это немного взломать.
Есть ли лучший способ сделать это? Было бы здорово, если бы я на самом деле не нуждался wc
или даже не использовал Git, чтобы он мог работать на голой Windows. Просто прочитайте файл или структуру каталогов ...
git
build-process
revision
Splo
источник
источник
git rev-list HEAD --count
git rev-listОтветы:
Чтобы получить коммит количества для пересмотра (
HEAD
,master
, коммит хэш):Чтобы получить количество коммитов по всем веткам:
Я рекомендую не использовать это для идентификатора сборки, но если вам нужно, вероятно, лучше использовать счетчик для ветви, против которой вы строите. Таким образом, одна и та же ревизия всегда будет иметь одинаковый номер. Если вы используете счетчик для всех филиалов, активность в других филиалах может изменить номер.
источник
git shortlog | grep -E '^[ ]+\w+' | wc -l
если вы хотите получить общее количество иgit shortlog | grep -E '^[^ ]'
если вы хотите получить количество коммитов для каждого участника.wc -l
. Минимализм FTW. Я включил это в свой ответ.git log --pretty=format:'' | wc -l
подходу, приведенному в исходном вопросе), так и неверным: вы можете увидеть это, перевернув match (git shortlog | grep -Ev '^[ ]+\w+'
) и увидев, что, например, коммиты без сообщений (т. Е. «<None>») не учитываются. Использованиеgit rev-list HEAD --count
является одновременно более кратким и точным.git rev-list HEAD --count
сейчас это лучшее решение.git log --oneline | wc -l
git shortlog
это один из способов.источник
git rev-list HEAD --count
а не оригинальный подход, приведенный в ОП. В моих тестахgit log --pretty=format:'' | wc -l
выключен одним.git log --oneline | wc -l
не выключен один (OS X 10.8.5).git rev-list HEAD --count
git rev-list
git rev-list <commit>
: Список коммитов, которые доступны, следуя родительским ссылкам из данного коммита (в данном случае, HEAD ).--count
: Распечатайте число, указывающее, сколько коммитов было бы в списке, и подавите все остальные выходные данные.источник
Эта команда возвращает количество коммитов, сгруппированных по коммиттерам:
Вывод:
Возможно, вы захотите узнать, что
-s
аргумент является формой сокращения--summary
.источник
git shortlog
сам по себе не решает исходный вопрос об общем количестве коммитов (не сгруппирован по автору). Используйтеgit rev-list HEAD --count
вместо этого.| sort -n
тожеЕсли вы ищете уникальный и все еще вполне читаемый идентификатор для коммитов, вам может пригодиться git description .
источник
Вы не первый, кто задумывается о «номере ревизии» в Git , но «
wc
» довольно опасен, поскольку коммит можно стереть или сжать, а историю пересмотреть.«Номер редакции» был особенно важен для Subversion, поскольку он был необходим в случае слияния (SVN1.5 и 1.6 улучшились в этом направлении).
Вы можете получить хук предварительной фиксации, который будет включать номер комментария в комментарии, с алгоритмом, не предусматривающим поиск всей истории ветви для определения правильного номера.
Базар на самом деле придумал такой алгоритм , и он может стать хорошей отправной точкой для того, что вы хотите сделать.
(Как указывает ответ Bombe , Git на самом деле имеет собственный алгоритм, основанный на последнем теге, плюс количество коммитов, плюс немного ключа SHA-1). Вы должны увидеть (и подтвердить) его ответ, если он работает для вас.
Чтобы проиллюстрировать идею Аарона , вы также можете добавить хеш коммита Git в файл «info» приложения, который вы распространяете вместе с вашим приложением.
Таким образом, окно about будет выглядеть так:
Аппликативный номер является частью фиксации, но «файл информации» приложения генерируется во время процесса упаковки, эффективно связывая аппликативный номер сборки с идентификатором технической версии .
источник
Вы можете просто использовать:
Результат:
источник
Простой способ это:
oneline
гарантирует это.источник
Чтобы получить его в переменную, самый простой способ:
источник
git rev-list
это правильный инструмент для использования, а неgit log
как говорят другие.wc -l
просто использовать--count
переключатель:git rev-list --all --count
.--count
коммутатора.Git shortlog - это один из способов получить подробную информацию о коммите:
Это даст количество коммитов, за которыми следует имя автора. Опция -s удаляет все сообщения о коммите для каждого коммита, который сделал автор. Удалите ту же опцию, если вы хотите видеть также сообщения о коммите. Опция -n используется для сортировки всего списка. Надеюсь это поможет.
источник
git shortlog
сам по себе не решает исходный вопрос об общем количестве коммитов (не сгруппирован по автору). Используйтеgit rev-list HEAD --count
вместо этого.git rev-parse - короткая ГОЛОВА
источник
Есть хороший вспомогательный скрипт, который люди Git используют для создания полезного номера версии на основе описания Git. Я показываю сценарий и объясняю его в своем ответе на вопрос: Как бы вы включили текущий идентификатор фиксации в файлы проекта Git? ,
источник
Если вы используете только одну ветку, такую как master, я думаю, что это будет прекрасно работать:
Это будет только выводить число. Вы можете псевдоним это что-то вроде
сделать вещи действительно удобными. Для этого отредактируйте ваш
.git/config
файл и добавьте его в:Это не будет работать в Windows. Я не знаю эквивалента «wc» для этой ОС, но написание Python-скрипта для подсчета будет многоплатформенным решением.
РЕДАКТИРОВАТЬ : Получить счет между двумя коммитами:
Я искал ответ, который бы показал, как получить количество коммитов между двумя произвольными ревизиями, и не увидел ни одного.
источник
Сгенерируйте число во время сборки и запишите его в файл. Всякий раз, когда вы делаете релиз, фиксируйте этот файл с комментарием «Build 147» (или каким-либо другим номером сборки). Не фиксируйте файл во время обычной разработки. Таким образом, вы можете легко сопоставлять номера сборки и версии в Git.
источник
В нашей компании мы перешли из SVN в Git. Отсутствие номеров ревизий было большой проблемой!
Сделайте
git svn clone
, а затем пометьте последний коммит SVN его номером ревизии SVN:Тогда вы можете получить номер ревизии с помощью
Эта команда дает что-то вроде:
Значит: последний тег - 7603 - это версия SVN. 3 - это количество коммитов от него. Нам нужно добавить их.
Итак, номер ревизии может быть посчитан этим скриптом:
источник
Тот, который я использовал, был:
Просто, но это сработало.
источник
Используя синтаксис Bash,
выглядит отлично для чисто линейной истории. Если вы также хотите иногда иметь «числа» из веток (исходя из
master
), подумайте:При запуске из кассы
master
, вы получаете просто1234.0
или как. При запуске из проверки ветки вы получите что-то похожее1234.13
, если в этой ветке было сделано 13 коммитов. Очевидно, что это полезно только в том случае, если вы основываете не более одной ветви от даннойmaster
ревизии.--first-parent
можно добавить к микро-номеру, чтобы подавить некоторые коммиты, возникающие только при слиянии других ветвей, хотя это, вероятно, не нужно.источник
Ты можешь попробовать
или перечислить все коммиты, сделанные людьми, участвующими в репозитории
источник
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"
источник
Как насчет сделать
alias
?источник