Comment puis-je obtenir la taille de validation indiquée dans la sortie de git log
?
Vous pouvez comprendre taille de validation comme la différence entre ses parents et lui-même, ou tout ce qui raisonnable vous indique quelle taille la validation est.
git log
a un --log-size
option mais c'est la taille du message de log, pas le commit lui-même.
La "taille" d'un commit peut signifier différentes choses. Si vous voulez dire combien de stockage sur disque cela prend ... c'est très difficile à dire dans Git et probablement improductif. Alors que quelque chose comme SVN stocke les validations sous forme de deltas, lorsque vous modifiez un fichier dans Git, il stocke une nouvelle copie du fichier en tant qu'objet dans une base de données de graphiques. Un objet peut être partagé dans de nombreuses validations. Bien que cela puisse sembler inefficace, Git a de nombreuses façons intelligentes d'utiliser efficacement l'espace disque de manière choquante.
Si vous voulez dire combien de lignes cela a changé, c'est facile. Vous pouvez utiliser divers indicateurs pour obtenir le nombre de fichiers et de lignes modifiés, la plupart d'entre eux contiennent le mot "stat". Par exemple, git log --shortstat
vous indiquera le nombre de fichiers modifiés et le nombre de lignes insérées et supprimées. Voici un exemple.
commit e3d1909c875ea0c1a64246d735affa039ad11aa0 (Origin/master, Origin/HEAD)
Author: Michael G. Schwern <[email protected]>
Date: Thu Aug 11 13:04:24 2016 -0700
Add default Travis and AppVeyor configs.
The AppVeyor one is set up for Dist::Zilla, the hardest of the bunch.
2 files changed, 60 insertions(+)
Si vous voulez avoir une idée du stockage sur disque représenté par la validation, vous devez obtenir les ID des nouveaux fichiers (objets blob) créés par la validation, puis vérifier leur taille. Vous pouvez les voir dans un git log -p
.
commit 0f28d9a96bc92d802b57900ce4a06db71cbaef6d
Author: Michael G. Schwern <[email protected]>
Date: Wed Aug 10 09:13:40 2016 -0700
Remove my name from the gitconfig.
Now it can be used by anyone. Git will Prompt for the user info.
diff --git a/.gitconfig b/.gitconfig
index 1d539bd..538440f 100644
--- a/.gitconfig
+++ b/.gitconfig
@@ -1,18 +1,10 @@
-# If you use this file, remember to change the [user] and [sendemail] sections.
-
...and so on...
index 1d539bd..538440f 100644
indique cet objet blob remplacé (fichier) 1d539bd avec 538440f et utilise les autorisations 0644. Si vous exécutez git cat-file -s 538440f
il me dit que l'objet fait 4356 octets. C'est sa taille non compressée . Sur le disque, c'est juste 1849 octets.
$ ls -l .git/objects/53/8440f84014584432fa5bf09d761926b3d70dbe
-r--r--r-- 1 schwern staff 1849 Aug 10 09:14 .git/objects/53/8440f84014584432fa5bf09d761926b3d70dbe
Après je git gc
même le fichier objet a disparu. Maintenant, tout est dans un fichier pack utilisant moins de 10K.
$ tree -h .git/objects/
.git/objects/
├── [ 102] info
│ └── [ 54] packs
└── [ 136] pack
├── [1.9K] pack-d5b7110001ed35cce1aa0a380db762f39505b1c0.idx
└── [7.8K] pack-d5b7110001ed35cce1aa0a380db762f39505b1c0.pack
Cette réponse montre comment obtenir les blobs d'un commit de manière plus automatisée.