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 diff
et compter les lignes, mais cela semble fastidieux. J'aimerais également savoir comment je peux y parvenir, en n'incluant que mes propres commits dans les comptes linéaires.
Vous voulez l'option --stat
de git diff
ou, si vous souhaitez l'analyser dans un script, l'option --numstat
.
git diff --stat <commit-ish> <commit-ish>
--stat
produit la sortie lisible par l'homme que vous avez l'habitude de voir après les fusions; --numstat
produit une mise en page de table agréable que les scripts peuvent facilement interpréter.
J'ai loupé que vous cherchiez à le faire sur plusieurs commits en même temps - c'est une tâche pour git log
. Ron DeVera en parle, mais vous pouvez en faire beaucoup plus que ce qu'il mentionne. Étant donné que git log
appelle en interne le diff machine afin d'imprimer les informations demandées, vous pouvez lui attribuer l'une des options de diff stat - pas seulement --shortstat
. Ce que vous voulez probablement utiliser est:
git log --author="Your name" --stat <commit1>..<commit2>
mais vous pouvez aussi utiliser --numstat
ou --shortstat
. git log
peut également sélectionner les commits de différentes manières - jetez un œil à la documentation . Vous pourriez être intéressé par des éléments tels que --since
(plutôt que de spécifier des plages de validation, il suffit de sélectionner les validations depuis la semaine dernière) et --no-merges
(les validations de fusion n'introduisent pas réellement de modifications), ainsi que les jolies options de sortie (--pretty=oneline, short, medium, full...
).
Voici un one-liner pour obtenir le total des modifications au lieu des modifications par validation à partir du journal git (modifiez les options de sélection de validation à votre guise - ceci est une validation de votre part, 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 afficher des informations d'identification sur le commit; j'ai arbitrairement choisi le hachage, puis utilisé awk pour ne sélectionner que les lignes avec trois champs, ceux qui contiennent les informations stat)
Pour les paresseux, utilisez git log --stat
.
git diff --shortstat
vous donne juste le nombre de lignes modifiées et ajoutées.
git diff --stat commit1 commit2
EDIT: Vous devez également spécifier les commits (sans paramètres, le répertoire de travail est comparé à l'index). Par exemple.
git diff --stat HEAD^ HEAD
comparer le parent de HEAD
avec HEAD
.
En supposant que vous souhaitiez comparer tous vos commits entre abcd123 (le premier commit) et wxyz789 (le dernier commit), inclusivement:
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(-)
Un autre moyen d'obtenir tout le journal des modifications dans une période donné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
git log --numstat ne vous donne que les chiffres