Como faço para obter a contagem de commits do Git?

Eu gostaria de obter o número de commits do meu repository Git, um pouco como os números de revisão do SVN.

O objective é usá-lo como um número de construção único e incremental.

Eu atualmente gosto disso, no Unix / Cygwin / msysGit:

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

Mas eu sinto que é um pouco um hack.

Existe uma maneira melhor de fazer isso? Seria legal se eu realmente não precisasse de wc ou mesmo de Git, então poderia funcionar em um Windows simples. Basta ler um arquivo ou uma estrutura de diretórios …

Para obter uma contagem de confirmação para uma revisão ( HEAD , master , um hash de confirmação):

 git rev-list --count  

Para obter a contagem de commits em todos os branches:

 git rev-list --all --count 

Eu recomendo que não use isso para o identificador de construção, mas se for necessário, é melhor usar a contagem do ramo que você está construindo. Dessa forma, a mesma revisão sempre terá o mesmo número. Se você usar a contagem para todas as ramificações, a atividade nas outras ramificações poderá alterar o número.

git shortlog é um caminho.

git rev-list HEAD --count

git rev-list

git rev-list : lista os commits que podem ser acessados ​​seguindo os links pai do commit fornecido (neste caso, HEAD ).

--count : Imprime um número informando quantos commits foram listados e suprime todos os outros resultados.

Este comando retorna a contagem de commits agrupados por committers:

 git shortlog -s git shortlog -s 14 John lennon 9 Janis Joplin 

Se você está procurando por um identificador único e ainda muito legível para commits, git describe pode ser a coisa certa para você.

Você não é o primeiro a pensar em um “número de revisão” no Git , mas ” wc ” é bastante perigoso, já que o commit pode ser apagado ou esmagado, e a história revisitada.

O “número de revisão” foi especialmente importante para o Subversion, já que era necessário em caso de fusão (o SVN1.5 e o 1.6 melhoraram nessa frente).

Você pode acabar com um gancho de pré-consolidação que includeia um número de revisão no comentário, com um algoritmo não envolvendo a consulta de todo o histórico de uma ramificação para determinar o número correto.

Na verdade, o Bazaar criou um algoritmo desse tipo e pode ser um bom ponto de partida para o que você deseja fazer.

(Como a resposta de Bombe aponta, o Git tem, na verdade, um algoritmo próprio, baseado na tag mais recente, mais o número de commits, mais um bit de uma chave SHA-1). Você deve ver (e avaliar) a resposta dele se funcionar para você.


Para ilustrar a idéia de Aaron , você também pode append o hash de confirmação do Git ao arquivo “info” de um aplicativo que você está distribuindo com o seu aplicativo.

Dessa forma, a checkbox sobre se pareceria com:

Sobre caixa

O número do aplicativo faz parte do commit, mas o “arquivo de informações” do “aplicativo” é gerado durante o processo de empacotamento, vinculando efetivamente um número de compilation do aplicativo a um ID de revisão técnica.

Para obtê-lo em uma variável, a maneira mais fácil é:

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

Uma maneira simples é:

  git log --oneline | wc -l 

oneline garante isso.

O atalho do Git é uma maneira de obter os detalhes de confirmação:

 git shortlog -s -n 

Isso fornecerá o número de confirmações seguidas pelo nome do autor. A opção -s remove todas as mensagens de confirmação para cada confirmação feita pelo autor. Remova a mesma opção se você quiser ver as mensagens de confirmação também. A opção -n é usada para classificar a lista inteira. Espero que isto ajude.

Você pode usar apenas:

 git shortlog -s -n 

Resultado:

  827 user one 15 user two 2 Gest 

git rev-parse –short HEAD

Existe um bom script de ajuda que o pessoal do Git usa para ajudar a gerar um número de versão útil baseado no Git. Eu mostro o script e o explico em minha resposta: Como você includeia o ID de commit atual nos arquivos de um projeto do Git? .

Gere um número durante a construção e grave-o em um arquivo. Sempre que você fizer um lançamento, confirme esse arquivo com o comentário “Build 147” (ou qualquer que seja o número de compilation atualmente). Não confirme o arquivo durante o desenvolvimento normal. Dessa forma, você pode mapear facilmente entre números de compilation e versões no Git.

Se você está apenas usando uma ramificação, como master, acho que isso funcionaria muito bem:

 git rev-list --full-history --all | wc -l 

Isso só produzirá um número. Você pode alias para algo como

 git revno 

para tornar as coisas realmente convenientes. Para fazer isso, edite seu arquivo .git/config e adicione isto em:

 [alias] revno = "!git rev-list --full-history --all | wc -l" 

Isso não funcionará no Windows. Eu não sei o equivalente de “wc” para esse SO, mas escrever um script Python para fazer a contagem para você seria uma solução multi-plataforma.

Em nossa empresa, nos mudamos do SVN para o Git. A falta de números de revisão foi um grande problema!

Faça o git svn clone e, em seguida, marque o último SVN commit por seu número de revisão do SVN:

 export hr=`git svn find-rev HEAD` git tag "$hr" -f HEAD 

Então você pode obter o número de revisão com a ajuda de

 git describe --tags --long 

Este comando dá algo como:

 7603-3-g7f4610d 

Significa: A última tag é 7603 – é a revisão do SVN. 3 – é contagem de commits dele. Precisamos adicioná-los.

Então, o número de revisão pode ser contado por este script:

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

O que eu costumava usar era:

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

Simples, mas funcionou.

Usando a syntax Bash,

 $(git rev-list --count HEAD) 

parece bom para a história puramente linear. Se você também quiser ter “números” de ramificações (com base no master ), considere:

 $(git rev-list --count $(git merge-base master HEAD)).$(git rev-list --count ^master HEAD) 

Quando executado a partir de um checkout do master , você obtém simplesmente 1234.0 ou algo semelhante. Quando executado a partir de um checkout de um branch, você terá algo como 1234.13 , se houver 13 commits feitos naquele branch. Obviamente, isso é útil apenas na medida em que você está baseando no máximo um ramo de uma determinada revisão master .

--first-parent pode ser adicionado ao micro número para suprimir alguns commits que surgem apenas da fusão de outros branches, embora seja provavelmente desnecessário.

Podes tentar

 git log --oneline | wc -l 

ou para listar todos os commits feitos pelas pessoas que contribuem no repository

 git shortlog -s 

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

Se você adicionar isto à sua configuração, você pode apenas referenciar o comando;

git count

Use o git shortlog como este

git shortlog -sn

Ou crie um alias (para terminal baseado em ZSH)

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