Gostaria de obter o número de confirmações do meu repositório Git, um pouco como os números de revisão do SVN.
O objetivo é usá-lo como um número de compilação único e incrementador.
Atualmente, faço isso no Unix / Cygwin / msysGit:
git log --pretty=format:'' | wc -l
Mas eu sinto que é um pouco de hack.
Existe uma maneira melhor de fazer isso? Seria legal se eu realmente não precisasse wc
ou nem o Git, para que pudesse funcionar em um Windows vazio. Basta ler um arquivo ou uma estrutura de diretórios ...
git
build-process
revision
Splo
fonte
fonte
git rev-list HEAD --count
git rev-listRespostas:
Para obter uma contagem cometer uma revisão (
HEAD
,master
, um hash de commit):Para obter a contagem de confirmação em todas as ramificações:
Eu recomendo não usar isso para identificador de compilação, mas se você precisar, provavelmente é melhor usar a contagem da ramificação na qual 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 em outras ramificações poderá alterar o número.
fonte
git shortlog | grep -E '^[ ]+\w+' | wc -l
se você deseja obter o número total egit shortlog | grep -E '^[^ ]'
se deseja obter o número de confirmações para cada colaborador.wc -l
. Minimalismo FTW. Eu o incorporei na minha resposta.git log --pretty=format:'' | wc -l
abordagem dada na pergunta original) e incorreta: você pode ver isso invertendo a correspondência (git shortlog | grep -Ev '^[ ]+\w+'
) e vendo que, por exemplo, confirmações sem mensagem (ou seja, "<nenhum>") não são contadas. O usogit rev-list HEAD --count
é mais sucinto e preciso.git rev-list HEAD --count
é uma solução melhor agora.git log --oneline | wc -l
git shortlog
é uma maneira.fonte
git rev-list HEAD --count
mais do que a abordagem original apresentada no OP. Nos meus testes,git log --pretty=format:'' | wc -l
é desligado por um.git log --oneline | wc -l
não está desativado em um (OS X 10.8.5).git rev-list HEAD --count
git rev-list
git rev-list <commit>
: Lista as confirmações alcançáveis seguindo os links pai da confirmação fornecida (neste caso, HEAD ).--count
: Imprima um número informando quantas confirmações teriam sido listadas e suprima todas as outras saídas.fonte
Este comando retorna a contagem de confirmações agrupadas por confirmadores:
Resultado:
Você pode querer saber que o
-s
argumento é a forma de contração de--summary
.fonte
git shortlog
por si só não aborda a questão original do número total de confirmações (não agrupadas por autor). Use emgit rev-list HEAD --count
vez disso.| sort -n
tambémSe você está procurando um identificador único e ainda legível para confirmações, o git description pode ser o ideal para você.
fonte
Você não é o primeiro a pensar em um "número de revisão" no Git , mas '
wc
' é bastante perigoso, pois o commit pode ser apagado ou esmagado, e a história revisitada.O "número de revisão" foi especialmente importante para o Subversion, pois era necessário em caso de mesclagem (os SVN1.5 e 1.6 foram aprimorados nessa frente).
Você pode acabar com um gancho de pré-confirmação que incluiria um número de revisão no comentário, com um algoritmo que não envolve a pesquisa de todo o histórico de uma ramificação para determinar o número correto.
O Bazaar realmente apresentou esse algoritmo , 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 confirmações, além de um pouco de uma tecla SHA-1). Você deve ver (e votar) a resposta dele, se funcionar para você.
Para ilustrar a idéia de Aaron , você também pode anexar o hash de confirmação do Git no arquivo de "informações" de um aplicativo que você está distribuindo com seu aplicativo.
Dessa forma, a caixa about seria semelhante a:
O número do aplicativo faz parte da confirmação, mas o 'arquivo de "informações" do aplicativo é gerado durante o processo de empacotamento, vinculando efetivamente um número de compilação do aplicativo a um ID de revisão técnica .
fonte
Você pode apenas usar:
Resultado:
fonte
Uma maneira simples é:
oneline
Assegura que.fonte
Para obtê-lo em uma variável, a maneira mais fácil é:
fonte
git rev-list
é a ferramenta correta a ser usada, nãogit log
como a outra diz.wc -l
apenas usar o--count
interruptor:git rev-list --all --count
.--count
própria opção.O shortlog do Git é uma maneira de obter os detalhes da confirmação:
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 que o autor fez. Remova a mesma opção se desejar ver também as mensagens de confirmação. A opção -n é usada para classificar a lista inteira. Espero que isto ajude.
fonte
git shortlog
por si só não aborda a questão original do número total de confirmações (não agrupadas por autor). Use emgit rev-list HEAD --count
vez disso.git rev-parse --short HEAD
fonte
Existe um bom script auxiliar que o pessoal do Git usa para ajudar a gerar um número de versão útil com base na descrição do Git. Eu mostro o script e explico-o na minha resposta para Como você incluiria o ID de confirmação atual nos arquivos de um projeto Git? .
fonte
Se você estiver usando apenas um ramo, como o master, acho que isso funcionaria muito bem:
Isso produzirá apenas um número. Você pode alias para algo como
para tornar as coisas realmente convenientes. Para fazer isso, edite seu
.git/config
arquivo e adicione-o em:Isso não funcionará no Windows. Eu não sei o equivalente a "wc" para esse sistema operacional, mas escrever um script Python para fazer a contagem para você seria uma solução multiplataforma.
EDIT : obtenha contagem entre dois commits:
Eu estava procurando uma resposta que mostrasse como obter o número de confirmações entre duas revisões arbitrárias e não vi nenhuma.
fonte
Gere um número durante a construção e grave-o em um arquivo. Sempre que você fizer um release, confirme esse arquivo com o comentário "Build 147" (ou qualquer que seja o número da build atualmente). Não confirme o arquivo durante o desenvolvimento normal. Dessa forma, você pode mapear facilmente entre números de compilação e versões no Git.
fonte
Em nossa empresa, passamos do SVN para o Git. A falta de números de revisão foi um grande problema!
Faça
git svn clone
e marque a última confirmação de SVN pelo número de revisão do SVN:Em seguida, você pode obter o número da revisão com a ajuda de
Este comando fornece algo como:
Significa: A última tag é 7603 - é a revisão do SVN. 3 - é a contagem de confirmações dele. Precisamos adicioná-los.
Portanto, o número da revisão pode ser contado por este script:
fonte
O que eu costumava usar era:
Simples, mas funcionou.
fonte
Usando a sintaxe do Bash,
parece bom para a história puramente linear. Se você também quiser ter "números" de ramificações (com base em
master
), considere:Quando executado a partir de um checkout de
master
, você obtém simplesmente1234.0
ou algo parecido. Quando executado a partir de uma verificação geral de uma ramificação, você obtém algo como1234.13
, se houver 13 confirmações feitas nessa ramificação. Obviamente, isso é útil apenas na medida em que você baseia no máximo uma ramificação de um determinadomaster
revisão.--first-parent
pode ser adicionado ao número micro para suprimir algumas confirmações decorrentes apenas da fusão de outras ramificações, embora isso provavelmente seja desnecessário.fonte
Podes tentar
ou listar todos os commits realizados pelas pessoas que contribuem no repositório
fonte
git config --global alias.count 'rev-list --all --count'
Se você adicionar isso à sua configuração, basta referenciar o comando;
git count
fonte
Use o git shortlog assim
git shortlog -sn
Ou crie um alias (para terminal baseado em ZSH)
# show contributors by commits alias gcall="git shortlog -sn"
fonte
Que tal fazer um
alias
?fonte