J'aimerais obtenir le nombre de validations de mon référentiel Git, un peu comme les numéros de révision SVN.
L'objectif est de l'utiliser comme un numéro de build incrémentiel unique.
Je fais actuellement comme ça, sur Unix / Cygwin / msysGit:
git log --pretty=format:'' | wc -l
Mais je pense que c'est un peu un hack.
Y a-t-il une meilleure façon de le faire? Ce serait cool si je n'avais pas vraiment besoin wc
ou même Git, donc cela pourrait fonctionner sur un Windows nu. Il suffit de lire un fichier ou une structure de répertoire ...
git rev-list HEAD --count
git rev-listRéponses:
Pour obtenir un commettras chef d' accusation pour une révision (
HEAD
,master
, un hachage commettras):Pour obtenir le nombre de validations dans toutes les branches:
Je recommande de ne pas utiliser cela pour l'identificateur de build, 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 numéro. Si vous utilisez le nombre pour toutes les succursales, l'activité sur d'autres succursales pourrait changer le nombre.
la source
git shortlog | grep -E '^[ ]+\w+' | wc -l
si vous voulez obtenir le nombre total etgit shortlog | grep -E '^[^ ]'
si vous voulez obtenir le nombre de commits pour chaque contributeur.wc -l
. Minimalisme FTW. Je l'ai intégré à ma réponse.git log --pretty=format:'' | wc -l
approche donnée dans la question d'origine) et incorrecte: vous pouvez le voir en inversant la correspondance (git shortlog | grep -Ev '^[ ]+\w+'
) et en voyant par exemple que les validations sans message (c'est-à-dire "<aucun>") ne sont pas comptées. L'utilisationgit rev-list HEAD --count
est à la fois plus succincte et plus précise.git rev-list HEAD --count
c'est une meilleure solution maintenant.git log --oneline | wc -l
git shortlog
est une façon.la source
git rev-list HEAD --count
plutôt que l'approche originale donnée dans le PO. Dans mes tests, ilgit log --pretty=format:'' | wc -l
est décalé d'un.git log --oneline | wc -l
n'est pas en reste (OS X 10.8.5).git rev-list HEAD --count
git rev-list
git rev-list <commit>
: Liste les validations accessibles en suivant les liens parents du commit donné (dans ce cas, HEAD ).--count
: Affiche un nombre indiquant le nombre de validations qui auraient été répertoriées et supprime toutes les autres sorties.la source
Cette commande renvoie le nombre de validations regroupées par committers:
Production:
Vous voudrez peut-être savoir que l'
-s
argument est la forme de contraction de--summary
.la source
git shortlog
en soi ne répond pas à la question initiale du nombre total de commits (non groupés par auteur). Utilisezgit rev-list HEAD --count
plutôt.| sort -n
tropSi vous cherchez un identifiant unique et encore tout à fait lisible pour les commits, git describe pourrait être exactement ce qu'il vous faut.
la source
Vous n'êtes pas le premier à penser à un "numéro de révision" dans Git , mais '
wc
" est assez dangereux, car la validation peut être effacée ou écrasée, et l'historique revisité.Le "numéro de révision" était particulièrement important pour Subversion car il était nécessaire en cas de fusion (SVN1.5 et 1.6 se sont améliorés sur ce front).
Vous pourriez vous retrouver avec un hook de pré-validation qui inclurait un numéro de révision dans le commentaire, avec un algorithme n'impliquant pas de rechercher tout l' historique d'une branche pour déterminer le numéro correct.
Bazaar est en fait venu avec un tel algorithme , et il peut être un bon point de départ pour ce que vous voulez faire.
(Comme le souligne la réponse de Bombe , Git a en fait un algorithme qui lui est propre, basé sur la dernière balise, plus le nombre de validations, plus un peu d'une clé SHA-1). Vous devriez voir (et voter) sa réponse si cela fonctionne pour vous.
Pour illustrer l'idée d'Aaron , vous pouvez également ajouter le hachage de validation Git dans le fichier "info" d'une application que vous distribuez avec votre application.
De cette façon, la boîte about ressemblerait à:
Le numéro d'application fait partie de la validation, mais le «fichier« info »de l'application» est généré pendant le processus d'empaquetage, liant efficacement un numéro de version d' application à un ID de révision technique .
la source
Vous pouvez simplement utiliser:
Résultat :
la source
Un moyen simple est:
oneline
s'assure que.la source
Pour l'intégrer dans une variable, le moyen le plus simple est:
la source
git rev-list
c'est l'outil correct à utiliser, pasgit log
comme les autres disent.wc -l
suffit d' utiliser le--count
commutateur:git rev-list --all --count
.--count
commutateur lui-même.Git shortlog est un moyen d'obtenir les détails de la validation:
Cela donnera le nombre de validations suivies du nom de l'auteur. L'option -s supprime tous les messages de validation pour chaque validation effectuée par l'auteur. Supprimez la même option si vous souhaitez également voir les messages de validation. L'option -n est utilisée pour trier la liste entière. J'espère que cela t'aides.
la source
git shortlog
en soi ne répond pas à la question initiale du nombre total de commits (non groupés par auteur). Utilisezgit rev-list HEAD --count
plutôt.git rev-parse - short HEAD
la source
Il y a un joli script d'aide que les gens de Git utilisent pour aider à générer un numéro de version utile basé sur Git. Je montre le script et l'explique dans ma réponse à Comment incluriez-vous l'ID de validation actuel dans les fichiers d'un projet Git? .
la source
Si vous n'utilisez qu'une seule branche, comme master, je pense que cela fonctionnerait très bien:
Cela ne produira qu'un nombre. Vous pouvez l'aliaser à quelque chose comme
pour rendre les choses vraiment pratiques. Pour ce faire, modifiez votre
.git/config
fichier et ajoutez-le dans:Cela ne fonctionnera pas sous Windows. Je ne connais pas l'équivalent de "wc" pour ce système d'exploitation, mais écrire un script Python pour faire le décompte pour vous serait une solution multi-plateforme.
EDIT : Obtenez le décompte entre deux commits:
Je cherchais une réponse qui montrerait comment obtenir le nombre de commits entre deux révisions arbitraires et n'en ai pas vu.
la source
Générez un nombre lors de la construction et écrivez-le dans un fichier. Chaque fois que vous faites une version, validez ce fichier avec le commentaire "Build 147" (ou quel que soit le numéro de build actuellement). Ne validez pas le fichier pendant le développement normal. De cette façon, vous pouvez facilement mapper entre les numéros de build et les versions dans Git.
la source
Dans notre entreprise, nous sommes passés de SVN à Git. Le manque de numéros de révision était un gros problème!
Faites
git svn clone
, puis marquez le dernier commit SVN par son numéro de révision SVN:Ensuite, vous pouvez obtenir le numéro de révision à l'aide de
Cette commande donne quelque chose comme:
Signifie: La dernière balise est 7603 - c'est la révision SVN. 3 - est le nombre de commits. Nous devons les ajouter.
Ainsi, le numéro de révision peut être compté par ce script:
la source
Celui que j'utilisais était:
Simple mais cela a fonctionné.
la source
En utilisant la syntaxe Bash,
semble bien pour une histoire purement linéaire. Si vous voulez aussi parfois avoir des «numéros» de succursales (basés sur
master
), pensez à:Lorsque vous exécutez à partir d'une caisse
master
, vous obtenez simplement1234.0
ou similaire. Lorsque vous exécutez à partir d'une caisse d'une branche, vous obtiendrez quelque chose comme1234.13
, s'il y a eu 13 commits effectués sur cette branche. Évidemment, cela n'est utile que dans la mesure où vous basez au plus une branche sur unemaster
révision donnée .--first-parent
pourrait être ajouté au micro-numéro pour supprimer certains commits résultant uniquement de la fusion d'autres branches, bien qu'il soit probablement inutile.la source
Tu peux essayer
ou pour lister tous les commits effectués par les personnes contribuant dans le référentiel
la source
git config --global alias.count 'rev-list --all --count'
Si vous ajoutez ceci à votre configuration, vous pouvez simplement référencer la commande;
git count
la source
Utilisez git shortlog comme ceci
git shortlog -sn
Ou créez un alias (pour un terminal basé sur ZSH)
# show contributors by commits alias gcall="git shortlog -sn"
la source
Que diriez-vous de faire un
alias
?la source