Comment puis-je obtenir le compte Git commit?

j'aimerais obtenir le nombre de propagations de mon dépôt Git, un peu comme les numéros de révision SVN.

le but est de l'utiliser comme un numéro de construction unique, incrémentant.

actuellement, je fais comme ça, sur Unix/Cygwin/msysGit:

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

mais je pense que c'est un peu un piratage.

Est-il une meilleure façon de le faire? Ce serait cool si je n'avais pas besoin de wc ou même Git, donc ça pourrait marcher nue un Windows. Viens de lire un fichier ou une arborescence de répertoire...

609
demandé sur Peter Mortensen 2009-03-24 16:38:55

20 réponses

pour obtenir un nombre de propagation pour une révision ( HEAD , master , un hachage de propagation):

git rev-list --count <revision>

Pour obtenir la validation de compter dans toutes les branches:

git rev-list --all --count

je recommande de ne pas utiliser ceci pour l'identifiant de construction, mais si vous le DEVEZ, il est probablement préférable d'utiliser le nombre pour la branche contre laquelle vous construisez. De cette façon, la même révision aura toujours le même nombre. Si vous utilisez le compte pour toutes les branches, activité sur d'autres les branches pourraient changer le nombre.

922
répondu Benjamin Atkin 2015-11-17 19:37:55

git shortlog en est une.

134
répondu Rayne 2010-04-23 17:28:29

git rev-list HEAD --count

git rev-liste

git rev-list <commit> : List commits qui sont accessibles en suivant les liens parent de la propagation donnée (dans ce cas, HEAD ).

--count : imprimer un nombre indiquant combien de propagations auraient été listées, et supprimer toutes les autres sorties.

88
répondu Jake Berger 2013-03-09 19:43:54

cette commande renvoie le nombre de propagations groupées par committers:

git shortlog -s

git shortlog -s
14 John lennon
9  Janis Joplin
67
répondu pltvs 2017-11-12 01:04:13

si vous êtes à la recherche d'un identifiant unique et encore très lisible pour les commits, git describe pourrait être juste la chose pour vous.

52
répondu Bombe 2011-11-08 09:10:05

Vous n'êtes pas le premier à penser à un "" numéro de révision dans Git , mais " wc ' est très dangereux, car s'engager peut être effacé ou écrasé, et l'histoire revisitée.

le" numéro de révision "était particulièrement important pour Subversion car il fallait le en cas de fusion (SVN1.5 et 1.6 se sont améliorés sur ce front).

vous pourriez finir avec un crochet pre-commit qui serait inclure un numéro de révision dans le commentaire, avec un algorithme n'impliquant pas chercher le tout historique d'une branche pour déterminer le nombre correct.

Bazar en fait venu avec un tel algorithme , et il peut être un bon point de départ pour ce que vous voulez faire.

(Comme Bombe de réponse fait remarquer, Git a en fait son propre algorithme, basé sur la dernière balise, plus le nombre de commits, plus un peu D'une clé SHA-1). Si cela vous convient, voyez sa réponse.


pour illustrer L'idée D'Aaron , vous pouvez aussi ajouter le hachage de propagation Git dans le "fichier d'information" d'une application que vous distribuez avec votre application.

de cette façon, le boîte ressemblerait à:

About box

le numéro d'application fait partie du commit, mais le" fichier "info" de la demande est généré pendant le processus d'empaquetage, liant effectivement un applicatif numéro de construction à une révision technique id .

32
répondu VonC 2017-11-12 00:59:43

pour entrer dans une variable, la façon la plus simple est:

export GIT_REV_COUNT=`git rev-list --all --count`
20
répondu John Gietzen 2016-08-10 23:11:34

une façon simple est:

 git log --oneline | wc -l

oneline assure que.

18
répondu Jimmy Kane 2017-11-12 01:06:41

U peut simplement utiliser:

git shortlog -s -n

résultat:

 827  user one
    15  user two
     2  Gest 
16
répondu demenvil 2017-12-26 09:09:13

git shortlog est une façon d'obtenir les détails de la propagation:

git shortlog -s -n

indique le nombre de commits suivi du nom de l'auteur. L'option-s supprime tous les messages de propagation pour chaque propagation faite par l'auteur. Retirez la même option si vous souhaitez voir les messages de validation. L'option-n est utilisée pour trier la liste entière. Espérons que cette aide.

14
répondu Sri Murthy Upadhyayula 2012-11-25 07:59:41

git rev-parse --short HEAD

7
répondu makuchaku 2009-11-24 09:24:53

il y a un bon script helper que les gens de Git utilisent pour aider à générer un numéro de version utile basé sur Git describe. Je montre le script et je l'explique dans ma réponse à comment incluez-vous l'identifiant de propagation actuel dans les fichiers d'un projet Git? .

7
répondu Pat Notz 2017-11-12 01:03:12

génère un nombre pendant la construction et l'écrit dans un fichier. Chaque fois que vous faites une version, propagez ce fichier avec le commentaire "Build 147" (ou quel que soit le numéro de compilation actuel). Ne propagez pas le fichier pendant le développement normal. De cette façon, vous pouvez facilement mapper entre les nombres de construction et les versions dans Git.

3
répondu Aaron Digulla 2009-03-24 13:59:06

si vous n'utilisez qu'une seule branche, comme master, je pense que cela fonctionnerait très bien:

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

Cela ne sortie. Vous pouvez alias

git revno

pour rendre les choses vraiment commodes. Pour ce faire, éditez votre fichier .git/config et ajoutez ceci dans:

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

cela ne fonctionnera pas sur Windows. Je ne connais pas l'équivalent de "wc" pour cet OS, mais écrire un script Python pour faire Compter pour vous serait une solution multi-plateforme.

3
répondu NuclearPeon 2017-11-12 01:05:55

dans notre société, Nous avons déménagé de SVN à git. Le manque de numéros de révision était un gros problème!

Do git svn clone , puis marquer le dernier svn commit par son numéro de révision SVN:

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

alors vous pouvez obtenir le numéro de révision à l'aide de

git describe --tags --long

cette commande donne quelque chose comme:

7603-3-g7f4610d

signifie: la dernière balise est 7603 - c'est la révision SVN. 3 - est nombre de commits il. Nous avons besoin de l'ajouter.

ainsi, le numéro de révision peut être compté par ce script:

expr $(git describe --tags --long | cut -d '-' -f 1) + $(git describe --tags --long | cut -d '-' -f 2)
3
répondu Matvey 2017-11-12 01:08:21

celui que j'utilisais était:

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

Simple mais ça a marché.

1
répondu Robert Massaioli 2011-07-31 14:24:39

Bash de syntaxe,

$(git rev-list --count HEAD)

est parfait pour une histoire purement linéaire. Si vous voulez aussi avoir parfois des "nombres" de branches (basé sur master ), considérez:

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

lors de la course à partir d'une caisse de master , vous obtenez simplement 1234.0 ou similaire. Lorsque vous exécutez à partir d'une caisse d'une branche vous obtiendrez quelque chose comme 1234.13 , s'il y a eu 13 propagations faites sur cette branche. Évidemment, ce n'est utile que dans la mesure où vous basez au maximum une branche sur une révision master donnée.

--first-parent pourrait être ajouté au micro-numéro pour supprimer certaines commits provenant seulement de la fusion d'autres branches, bien qu'il soit probablement inutile.

1
répondu Jesse Glick 2014-09-17 20:51:30

Vous pouvez essayer

git log --oneline | wc -l

ou pour lister toutes les commits faites par les personnes contribuant au dépôt

git shortlog -s
1
répondu 2016-11-15 10:24:03

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

si vous ajoutez ceci à votre configuration, vous pouvez simplement faire référence à la commande;

git count

1
répondu Robert Pounder 2017-09-11 09:46:13

utilisez git shortlog comme ceci

git shortlog -sn

ou créer un alias (pour terminal basé sur ZSH)

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

0
répondu Ahmad Awais 2015-11-05 14:01:38