Git klon „sprawdza łączność” - co to jest?

11

Podczas wykonywania git clonerepozytorium przez SSH lub HTTP otrzymujesz dane wyjściowe wyglądające mniej więcej tak:

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.

Interesuje mnie ten ostatni krok „Sprawdzanie łączności”. Dzieje się tak po pobraniu repozytorium i pobraniu wszystkich jego metadanych, tj. Długo po zakończeniu łączności z Internetem.

Co dokładnie wykonuje ten etap procesu?

Mikey TK
źródło
1
Czy zauważyłeś Checking out files: 100% (2897/2897), done.później Checking connectivity? Wygląda na to, że Receiving objectstak naprawdę nie oznacza to odbierania treści. Na przykład, kiedy sklonowany git, mam ten wiersz wyjścia: Receiving objects: 100% (199562/199562), 84.06 MiB | 3.90 MiB/s, done.. Jednak gdy pobrałem zip z GitHub, zdekompresowany katalog miał tylko 28 MiB. Nie jestem pewien, co to oznacza, ale może to być podsumowanie wszystkich przeszłych zobowiązań lub coś w tym rodzaju.
ecube,
1
@ecube: Klonowanie repozytorium git oznacza tworzenie lokalnej kopii całej jego historii, w tym każdej gałęzi, zatwierdzenia i zmiany. Plik ZIP dostarczony przez Github nie jest repozytorium git, ale raczej migawką najnowszej wersji repozytorium w gałęzi podstawowej. Te ostatnie będą oczywiście zawsze mniejsze.
Radon Rosborough,

Odpowiedzi:

15

Myślę, że słowo connectivityto nie ma tu nic wspólnego z łącznością sieciową. Komunikat jest wyświetlany po tym, jak wszystkie dane zostały już odebrane z serwera git.

Kilka wskazówek można znaleźć w źródłach git. W pliku connected.c znajduje się następujący komentarz :

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

Jest to związane z funkcją check_everything_connected_real, która jest wywoływana po Checking connectivity...to komunikat wyświetlany .

Oznacza to w zasadzie, że git sprawdza, czy wszystkie obiekty zostały poprawnie odebrane (są podłączone do istniejących referencji).

ge0rdi
źródło