Git zawiera dla każdego zatwierdzenia pełną kopię wszystkich plików, z tym wyjątkiem, że w przypadku treści już znajdującej się w repozytorium Git migawka będzie po prostu wskazywała na tę treść, a nie powielała ją.
Oznacza to również, że kilka plików o tej samej zawartości jest przechowywanych tylko raz.
Tak więc migawka jest w zasadzie zatwierdzeniem, odnoszącym się do zawartości struktury katalogów.
Niektóre dobre referencje to:
Mówisz Gitowi, że chcesz zapisać migawkę swojego projektu za pomocą polecenia git commit i rejestruje on w zasadzie manifestację tego, jak w tym momencie wyglądają wszystkie pliki twojego projektu
Ćwiczenie 12 ilustruje, jak uzyskać poprzednie migawki
Książka progit ma pełniejszy opis migawka:
Główną różnicą między Git a innymi VCS (w tym Subversion i przyjaciółmi) jest sposób, w jaki Git myśli o swoich danych.
Pod względem koncepcyjnym większość innych systemów przechowuje informacje jako listę zmian opartych na plikach. Te systemy (CVS, Subversion, Perforce, Bazaar itd.) Myślą o przechowywanych informacjach jako zestawie plików oraz o zmianach wprowadzanych w każdym pliku w czasie

Git nie myśli ani nie przechowuje swoich danych w ten sposób. Zamiast tego Git myśli o swoich danych bardziej jak o zestawie migawek mini systemu plików.
Za każdym razem, gdy zatwierdzasz lub zapisujesz stan swojego projektu w Git, zasadniczo robi zdjęcie, jak wyglądają wszystkie twoje pliki w tym momencie i przechowuje odniesienie do tej migawki.
Aby być wydajnym, jeśli pliki się nie zmieniły, Git nie przechowuje pliku ponownie - tylko link do poprzedniego identycznego pliku, który już zapisał.
Git myśli o swoich danych bardziej jak poniżej:

Jest to ważne rozróżnienie między Git i prawie wszystkimi innymi VCS. To sprawia, że Git ponownie rozważa prawie każdy aspekt kontroli wersji, który większość innych systemów skopiowała z poprzedniej generacji. To sprawia, że Git przypomina bardziej mini-system plików z kilkoma niesamowicie potężnymi narzędziami zbudowanymi na nim, a nie tylko VCS.
Jan Hudec dodaje ten ważny komentarz :
Chociaż jest to prawda i ważne na poziomie koncepcyjnym, NIE jest to prawda na poziomie pamięci.
Git używa do przechowywania delt .
Nie tylko to, ale jest bardziej wydajne niż jakikolwiek inny system. Ponieważ nie zachowuje historii poszczególnych plików, gdy chce wykonać kompresję delta, pobiera każdy obiekt blob, wybiera niektóre obiekty blob, które prawdopodobnie będą podobne (przy użyciu heurystyki, która obejmuje najbliższe przybliżenie poprzedniej wersji i niektórych innych), próbuje wygenerować delty i wybiera najmniejszą. W ten sposób może (często w zależności od heurystyki) korzystać z innych podobnych plików lub starszych wersji, które są bardziej podobne do poprzednich. Parametr „okna pakietu” umożliwia wydajność handlową dla jakości kompresji delta. Wartość domyślna (10) zazwyczaj daje przyzwoite wyniki, ale gdy ilość miejsca jest ograniczona lub w celu przyspieszenia transferów sieciowych, git gc --aggressiveużywa wartości 250, co powoduje, że działa bardzo wolno, ale zapewnia dodatkową kompresję danych historycznych.