web-dev-qa-db-fra.com

Comment puis-je obtenir le nombre de validations Git?

J'aimerais connaître le nombre de commits de mon référentiel Git, un peu comme les numéros de révision SVN.

Le but est de l’utiliser comme un numéro de build incrémentant unique.

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

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

Mais je sens que c'est un peu un bidouillage.

Y a-t-il une meilleure façon de le faire? Ce serait cool si je n'avais pas besoin de wc ou même de Git, pour que cela fonctionne sur une simple Windows. Il suffit de lire un fichier ou une structure de répertoire ...

699
Splo

Pour obtenir un compte de validation pour une révision (HEAD, master, un hachage de validation):

git rev-list --count <revision>

Pour obtenir le nombre de validations dans toutes les branches:

git rev-list --all --count

Je recommande de ne pas utiliser ceci pour l'identifiant de build, mais si vous devez le faire, il est probablement préférable d'utiliser le nombre pour la branche que vous construisez. Ainsi, la même révision aura toujours le même numéro. Si vous utilisez le nombre pour toutes les branches, l'activité sur d'autres branches peut changer le nombre.

1047
Benjamin Atkin

git shortlog est un moyen.

146
Rayne

git rev-list HEAD --count

git rev-list

git rev-list <commit>: Liste les commits accessibles en suivant les liens parents de la validation donnée (dans ce cas, HEAD).

--count: Affiche un nombre indiquant le nombre de validations qui aurait été répertorié et supprime toutes les autres sorties.

103
Jake Berger

Cette commande retourne le nombre de commits regroupés par committers:

git shortlog -s

Sortie:

14 John lennon
9  Janis Joplin

Vous voudrez peut-être savoir que l'argument -s est la forme de contraction de --summary.

82
Alex Pliutau

Si vous recherchez un identifiant unique et toujours lisible pour les commits, git decrire pourrait bien être ce qu’il vous faut.

53
Bombe

Vous n'êtes pas le premier à penser à un "numéro de révision" dans Git , mais 'wc' est assez dangereux, car commit peut être effacé ou écrasé, 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 à cet égard).

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 recherchant le all historique d'une branche pour déterminer le numéro correct.

Bazar est en fait venu avec n tel algorithme , et cela peut être un bon point de départ pour que veux-tu faire.

(Comme réponse de Bombe , Git a en réalité 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 faire voter) sa réponse si cela fonctionne pour vous.


Pour illustrer idée d’Aaron , vous pouvez aussi ajouter le hachage de validation Git dans le fichier "info" d’une application vous distribuez avec votre application.

De cette façon, la boîte à propos ressemblerait à ceci:

About box

Le numéro applicatif fait partie de la validation, mais le fichier "info" de l'application est généré pendant le processus de création du package, liant ainsi un numéro de construction applicatif à une révision technique id .

33
VonC

U peut simplement utiliser:

git shortlog -s -n

Résultat :

 827  user one
    15  user two
     2  Gest 
29
demenvil

Un moyen simple est:

 git log --oneline | wc -l

oneline assure cela.

21
Jimmy Kane

Pour le mettre dans une variable, le moyen le plus simple est:

export GIT_REV_COUNT=`git rev-list --all --count`
21
John Gietzen

Le shortlog de Git est un moyen d’obtenir les détails du commit:

git shortlog -s -n

Cela donnera le nombre de commits suivi 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 complète. J'espère que cela t'aides.

15

git rev-parse --short HEAD

8
makuchaku

Les utilisateurs de Git utilisent un script d'assistance Nice pour générer un numéro de version utile basé sur la description de Git. Je montre le script et l'explique dans ma réponse à Comment voudriez-vous inclure l'ID de validation actuel dans les fichiers d'un projet Git? .

7
Pat Notz

Si vous utilisez uniquement une branche, telle que master, je pense que cela fonctionnerait très bien:

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

Cela ne produira qu'un nombre. Vous pouvez l'alias à quelque chose comme

git revno

rendre les choses vraiment pratiques. Pour ce faire, éditez votre fichier .git/config et ajoutez-le dans:

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

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 effectuer le décompte à votre place serait une solution multiplate-forme.

4
NuclearPeon

Dans notre société, 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:

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

Ensuite, 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

Moyens: La dernière balise est 7603 - c'est la révision SVN. 3 - compte des commits de celui-ci. Nous devons les ajouter.

Donc, 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
Matvey

Générez un numéro lors de la construction et écrivez-le dans un fichier. Chaque fois que vous publiez un communiqué, validez ce fichier avec le commentaire "Build 147" (ou quel que soit le numéro de build actuel). Ne commettez 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.

3
Aaron Digulla

Celui que j'avais l'habitude d'utiliser était:

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

Simple mais ça a fonctionné.

1
Robert Massaioli

Utiliser la syntaxe Bash,

$(git rev-list --count HEAD)

semble bien pour l'histoire purement linéaire. Si vous voulez aussi parfois avoir des “numéros” de branches (basés sur master), considérez:

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

Lorsqu'il est exécuté à partir d'une extraction de master, vous obtenez simplement 1234.0 ou similaire. Lorsqu'il est exécuté à partir de la caisse d'une branche, vous obtenez quelque chose comme 1234.13, s'il y a eu 13 validations effectuées sur cette branche. Evidemment, cela n’est utile que dans la mesure où vous basez au maximum une branche d’une révision master 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 que cela soit probablement inutile.

1
Jesse Glick

Tu peux essayer

git log --oneline | wc -l

ou pour lister tous les commits faits par les personnes contribuant dans le référentiel

git shortlog -s
1
user7161360

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

1
Robert Pounder

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"

0
Ahmad Awais