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...
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.
git rev-list HEAD --count
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.
cette commande renvoie le nombre de propagations groupées par committers:
git shortlog -s
git shortlog -s
14 John lennon
9 Janis Joplin
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.
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 à:
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 .
pour entrer dans une variable, la façon la plus simple est:
export GIT_REV_COUNT=`git rev-list --all --count`
une façon simple est:
git log --oneline | wc -l
oneline
assure que.
U peut simplement utiliser:
git shortlog -s -n
résultat:
827 user one
15 user two
2 Gest
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.
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? .
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.
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.
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)
celui que j'utilisais était:
git log | grep "^commit" | wc -l
Simple mais ça a marché.
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.
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
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"