Git-Klon "Konnektivität überprüfen" - was ist das?


11

Wenn Sie git cloneein Repo über SSH oder HTTP durchführen, erhalten Sie eine Ausgabe, die ungefähr so ​​aussieht:

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.

Ich interessiere mich für den letzten Schritt "Konnektivität überprüfen". Dies geschieht, nachdem das Repo und alle seine Metadaten heruntergeladen wurden, dh nachdem die Internetverbindung beendet wurde.

Was genau leistet dieser Schritt des Prozesses?


1
Hast du das Checking out files: 100% (2897/2897), done.nachher bemerkt Checking connectivity? Es scheint, dass Receiving objectsdies nicht wirklich bedeutet, den Inhalt zu erhalten. Als ich zum Beispiel geklont habe git, habe ich folgende Ausgabezeile erhalten : Receiving objects: 100% (199562/199562), 84.06 MiB | 3.90 MiB/s, done.. Als ich jedoch eine Zip-Datei von GitHub heruntergeladen habe, war das dekomprimierte Verzeichnis nur 28 MiB groß. Ich bin mir nicht sicher, was dies bedeutet, aber es könnte die Zusammenfassung aller vergangenen Commits oder ähnliches sein.
Ecube

1
@ecube: Beim Klonen eines Git-Repositorys wird eine lokale Kopie des gesamten Verlaufs erstellt, einschließlich aller Zweige, Festschreibungen und Überarbeitungen. Die von Github bereitgestellte ZIP-Datei ist kein Git-Repository, sondern eine Momentaufnahme der letzten Version des Repositorys im primären Zweig. Letzteres wird natürlich immer kleiner sein.
Radon Rosborough

Antworten:


15

Ich denke, das Wort connectivityhat hier nichts mit Netzwerkkonnektivität zu tun. Die Nachricht wird angezeigt, nachdem alle Daten bereits vom Git-Server empfangen wurden.

Man kann einige Hinweise in Git-Quellen finden. In der Datei linked.c befindet sich folgender Kommentar :

/*
 * 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.
 */

Es bezieht sich auf eine Funktion check_everything_connected_real, die aufgerufen wird, nachdem die Checking connectivity...Nachricht angezeigt wurde .

Das bedeutet also im Grunde, dass git prüft, ob alle Objekte korrekt empfangen wurden (mit vorhandenen Refs verbunden sind).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.