Question Comment puis-je calculer le nombre de lignes modifiées entre deux commits dans git?


Existe-t-il un moyen simple de calculer le nombre de lignes modifiées entre deux commits dans git? Je sais que je peux faire un git diffet compte les lignes, mais cela semble fastidieux. Je voudrais aussi savoir comment je peux faire cela, y compris seulement mes propres engagements dans les lignes.


530
2018-03-27 04:02


origine


Réponses:


Vous voulez le --stat option de git diff, ou si vous cherchez à analyser cela dans un script, le --numstat option.

git diff --stat <commit-ish> <commit-ish>

--stat produit la sortie lisible par l'utilisateur que vous avez l'habitude de voir après fusion; --numstat produit une belle mise en page que les scripts peuvent facilement interpréter.

J'ai raté d'une manière ou d'une autre le fait que vous cherchiez à faire cela sur plusieurs commits en même temps - c'est une tâche pour git log. Ron DeVera y touche, mais vous pouvez en faire beaucoup plus que ce qu'il mentionne. Depuis git log appelle en interne la machine de diff afin d'imprimer les informations demandées, vous pouvez lui donner l'une des options stat stat - pas seulement --shortstat. Ce que vous voulez probablement utiliser est:

git log --author="Your name" --stat <commit1>..<commit2>

mais vous pouvez utiliser --numstat ou --shortstat ainsi que. git log peut également sélectionner des commits d'une autre manière - jetez un oeil à Documentation. Vous pourriez être intéressé par des choses comme --since (plutôt que de spécifier des plages de validation, sélectionnez simplement les validations depuis la semaine dernière) et --no-merges (les commits de fusion n'introduisent pas de changements), ainsi que les jolies options de sortie (--pretty=oneline, short, medium, full...).

Voici une ligne pour obtenir les changements totaux au lieu des changements par commit du journal git (changez les options de sélection de commit comme vous le souhaitez - ceci est validé par vous, de commit1 à commit2):

git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'

(vous devez laisser git log imprimer quelques informations d'identification sur le commit, j'ai arbitrairement choisi le hash, puis utilisé awk pour ne sélectionner que les lignes avec trois champs, qui sont ceux avec les informations statistiques)


810
2018-03-27 04:14



Pour les fainéants, utilisez git log --stat.


141
2017-10-26 21:59



git diff --shortstat

vous donne juste le nombre de lignes modifiées et ajoutées.


68
2017-12-23 21:17



git diff --stat commit1 commit2

EDIT: Vous devez aussi spécifier les commits (sans paramètres, il compare le répertoire de travail à l'index). Par exemple.

git diff --stat HEAD^ HEAD

comparer le parent de HEAD avec HEAD.


38
2018-03-27 04:14



En supposant que vous voulez comparer tous vos commits entre abcd123 (le premier commit) et wxyz789 (le dernier commit), inclus:

git log wxyz789^..abcd123 --oneline --shortstat --author="Mike Surname"

Cela donne une sortie succincte comme:

abcd123 Made things better
 3 files changed, 14 insertions(+), 159 deletions(-)
wxyz789 Made things more betterer
 26 files changed, 53 insertions(+), 58 deletions(-)

15
2018-03-27 04:21



Une autre façon d'obtenir tous les changements se connecter dans une période de temps spécifiée

git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10"

Sortie:

2637cc736 Revert changed code
 1 file changed, 5 insertions(+), 5 deletions(-)
ba8d29402 Fix review
 2 files changed, 4 insertions(+), 11 deletions(-)

Avec un long contenu de sortie, vous pouvez exporter dans un fichier pour plus de lisibilité

git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" > /mnt/MyChangeLog.txt

7
2018-03-17 07:58