Quand je fais “git push”, que signifient les statistiques? (Total, delta, etc.)

Voici un exemple:

$ git push -u myserver master Counting objects: 22, done. Delta compression using up to 8 threads. Compressing objects: 100% (14/14), done. Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done. Total 14 (delta 10), reused 0 (delta 0) To myserver.com:git/myrepo.git ed46414..0cae272 master -> master Branch master set up to track remote branch master from myserver. 

Fondamentalement, le seul chiffre ci-dessus qui a du sens pour moi est le 8 en “utilisant jusqu’à 8 threads”, parce que j’ai un processeur quad-core avec hyperthreading, donc je peux exécuter 8 threads.

Qu’y a-t-il de 22? Pourquoi dit-il 22 et ensuite 14, qu’est-il arrivé aux 8 autres? Pourquoi dit-il 0 octets / s, étant donné qu’il a fait des choses et a pris un temps fini? Qu’est-ce que “total” et “delta” et “réutilisé”?

Détails sur l’exemple: L’exemple ci-dessus est copié-collé à partir de Terminal sous Mac OS X. J’ai fait manuellement une recherche-remplacement pour remplacer “myrepo” et “myserver.com”, tout le rest est textuellement. Le repository a 910 commits, et j’ai fait environ 3 commits depuis la poussée précédente. Les 3 nouveaux commits ont affecté au moins 3 fichiers. Le repository contient plus de mille fichiers.

Réponse courte

Ceci est simplement la sortie de la commande git count-objects -v pour le push (la même commande est appelée pour la sortie lorsque gc , pull et clone ). Plus d’infos dans les pages de manuel: git-count-objects (1) .

 $ git count-objects -v ... size: 14 # The "Compressing objects: 100% (14/14)" part (the size in KiB) in-pack: 22 # The "Counting objects: 22" part (the number of objects) ... 

Longue réponse

 Counting objects: 22, done. 

Ceci est git 22 objects internes à compter pour ce commit spécifique. Presque tout dans git est un object, et ce sont essentiellement des blobs enregistrés dans votre dossier .git / objects sous leur hash respectif. Plus d’infos dans les pages de manuel: 9.2 Git Internals – Objets Git .

 Compressing objects: 100% (14/14), done. 

Ceci est une compression des objects avant l’envoi. Le 14/14 est la progression en KiB de la compression (14 KiB à compresser).

 Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done. 

Ceci est l’envoi git (si distant) et l’écriture des objects. Le 1,89 KiB | 0 octets / s est la progression dans KiB et la vitesse (0 octet / s une fois terminé).

 Total 14 (delta 10), reused 0 (delta 0) 

Ceci est la sortie de l’algorithme de fichier de paquetage dans git (voir 9.4 Git Internals – Packfiles ) et est assez obscure. Il emballe essentiellement les objects inutilisés, généralement de l’ancien historique, en .git / objects / pack . Après l’emballage, git vérifie s’il peut réutiliser les paquets (d’où la partie 0 réutilisée ). La partie delta 0 correspond au gain en KiB de l’emballage ou de la réutilisation.

Git est un système de fichiers adressable par contenu. c’est-à-dire qu’il prend un object (fichier, arborescence, commit) et le stocke dans des fichiers adressables par hachage.

Supposons que vous apportiez une très petite modification au fichier. Git devrait-il stocker le fichier complet en tant qu’object différent? Eh bien c’est le cas. Mais occasionnellement (en mode push, pull), git calcule les modifications de fichiers en tant que deltas et les stocke au lieu de fichiers complets.

Cela signifie que la version la plus récente du fichier est stockée dans son intégralité (puisqu’elle devrait être disponible le plus facilement), l’ancienne version du même fichier n’est qu’un object contenant la différence entre les deux, etc.

De cette façon, git économise de l’espace tout en étant capable de reconstruire le fichier pour toute révision que vous lui lancez.

Maintenant en arrivant à votre question:

Counting objects: 22, done. : Git compte l’object lié à vos commits que vous poussez.

Total 14 (delta 10) : Git a pu réduire le nombre d’objects en trouvant 10 deltas.

reused 0 (delta 0) : Git peut réutiliser les objects delta si cela existe déjà. Par exemple, si des modifications similaires peuvent avoir été introduites dans un autre fichier, le delta peut être similaire et réutilisable. Ici, il n’y avait rien à réutiliser.

Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done. Ici Git envoie (ou écrit) les objects sur le réseau, et vous pouvez voir les statistiques de progression et de vitesse en même temps.

J’espère que cela t’aides.