Git clone «vérification de la connectivité» - qu'est-ce que c'est?


11

Lorsque vous effectuez un git clonerepo sur SSH ou HTTP, vous obtenez une sortie qui ressemble à ceci:

Cloning into 'some_directory'...
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 0), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), done.
Checking connectivity... done.

Je suis intéressé par cette dernière étape "Vérification de la connectivité". Cela se produit après que le dépôt et toutes ses métadonnées ont été téléchargées, c'est-à-dire bien après la fin de toute connexion Internet.

Qu'est-ce que cette étape du processus accomplit exactement?


1
Avez-vous remarqué l' Checking out files: 100% (2897/2897), done.après Checking connectivity? Il semble que Receiving objectscela ne signifie pas réellement recevoir le contenu. Par exemple, quand je cloné git, je suis arrivé cette ligne de sortie: Receiving objects: 100% (199562/199562), 84.06 MiB | 3.90 MiB/s, done.. Cependant, lorsque j'ai téléchargé un zip depuis GitHub, le répertoire décompressé n'était que de 28 Mio. Je ne sais pas ce que cela signifie, mais ce pourrait être le résumé de tous les engagements passés ou quelque chose comme ça.
ecube

1
@ecube: Le clonage d'un référentiel git consiste à faire une copie locale de tout son historique, y compris chaque branche, validation et révision. Le fichier ZIP fourni par Github n'est pas un référentiel git, mais plutôt un instantané de la dernière révision du référentiel sur la branche principale. Ces derniers seront bien entendu toujours plus petits.
Radon Rosborough

Réponses:


15

Je pense que le mot connectivityn'a rien à voir avec la connectivité réseau ici. Le message s'affiche une fois que toutes les données ont déjà été reçues du serveur git.

On peut trouver quelques indices dans les sources git. Il y a le commentaire suivant dans le fichier connected.c :

/*
 * If we feed all the commits we want to verify to this command
 *
 *  $ git rev-list --objects --stdin --not --all
 *
 * and if it does not error out, that means everything reachable from
 * these commits locally exists and is connected to our existing refs.
 * Note that this does _not_ validate the individual objects.
 *
 * Returns 0 if everything is connected, non-zero otherwise.
 */

Il est lié à la fonction check_everything_connected_realappelée après l' affichage duChecking connectivity... message .

Cela signifie donc que git vérifie si tous les objets ont été reçus correctement (sont connectés aux références existantes).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.