Właśnie zacząłem uczyć się git i aby to zrobić, zacząłem czytać Git Community Book , aw tej książce mówią, że SVN i CVS przechowują różnicę między plikami, a git przechowuje migawkę wszystkich plików.
Ale tak naprawdę nie zrozumiałem, co rozumieją przez migawkę. Czy git naprawdę robi kopię wszystkich plików w każdym zatwierdzeniu, ponieważ to zrozumiałem z ich wyjaśnienia.
PS: Jeśli ktokolwiek ma lepsze źródło nauki git, byłbym wdzięczny.
Odpowiedzi:
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:
Ćwiczenie 12 ilustruje, jak uzyskać poprzednie migawki
„ Mogłeś wymyślić git (a może już masz!) ”
Co to jest „migawka” git?
Dowiedz się GitHub
Książka progit ma pełniejszy opis migawka:
Jan Hudec dodaje ten ważny komentarz :
źródło
Git logicznie przechowuje każdy plik pod SHA1. Oznacza to, że jeśli masz dwa pliki o dokładnie takiej samej zawartości w repozytorium (lub jeśli zmienisz nazwę pliku), przechowywana jest tylko jedna kopia.
Ale oznacza to również, że po zmodyfikowaniu małej części pliku i zatwierdzeniu zapisywana jest kolejna kopia pliku. Sposób, w jaki git to rozwiązuje, polega na użyciu plików paczek. Raz na jakiś czas wszystkie „luźne” pliki (w rzeczywistości nie tylko pliki, ale także obiekty zawierające informacje o zatwierdzeniu i katalogu) z repozytorium są gromadzone i kompresowane do pliku paczki. Plik paczki jest kompresowany za pomocą zlib. Podobne pliki są również kompresowane w delcie.
Ten sam format jest również używany podczas ciągnięcia lub wypychania (przynajmniej w przypadku niektórych protokołów), więc te pliki nie muszą być ponownie kompresowane.
Powoduje to, że repozytorium git, zawierające całą nieskompresowaną kopię roboczą, nieskompresowane najnowsze pliki i skompresowane starsze pliki, jest zwykle stosunkowo małe, dwa razy mniejsze niż rozmiar kopii roboczej. A to oznacza, że jest mniejszy niż repozytorium SVN z tymi samymi plikami, mimo że SVN nie przechowuje historii lokalnie.
źródło