Czytałem o kilku dyskusjach tutaj i na SO, że repozytoria DVCS zajmują mniej więcej tyle samo miejsca niż ich scentralizowane odpowiedniki. Mogłem to przegapić, ale nie znalazłem dobrego wyjaśnienia, dlaczego tak jest. Ktoś wie?
Czytałem o kilku dyskusjach tutaj i na SO, że repozytoria DVCS zajmują mniej więcej tyle samo miejsca niż ich scentralizowane odpowiedniki. Mogłem to przegapić, ale nie znalazłem dobrego wyjaśnienia, dlaczego tak jest. Ktoś wie?
Odpowiedzi:
Z własnego doświadczenia wynika, że wszystkie poniższe stwierdzenia są prawdziwe:
Jeśli porównasz lokalizację kasy (która sama w sobie jest repozytorium z Git), historia będzie zupełnie inna:
Jeśli porównasz liczbę bajtów, które musisz pobrać lub przesłać, znowu będzie inaczej.
Na koniec porównujesz jabłka z pomarańczami i w zależności od tego, co chcesz zrobić z Subversion lub Git, wynik może być inny.
@jk zapytał o kompletne kopie lub różnice binarne i nie mogłem odpowiedzieć na to pytanie. Zapytałem Matthew McCullougha, który ostatnio przeprowadził warsztaty Git na Jax 2012 (który odwiedziłem). Poświęcił czas (dziękuję mu bardzo), aby wyjaśnić ze szczegółową istotą wewnętrzne działanie Git. Więc tak, działa tam kompresja (i ja też przeprowadzę eksperyment z plikiem biurowym Microsoft i porównam go z jego treścią), ale nie, kompresja jest wykonywana dla całego pliku. Powołując się na swoją treść:
Luźne obiekty są zapisywane w skompresowanym formacie innym niż delta w momencie każdego zatwierdzenia.
git gc
lub nagromadzenie zbyt wielu luźnych obiektów, znajdzie dobrych kandydatów do skompresowania ich w delcie (git może różnić się w stosunku do innej niż poprzednia wersja), przechowuje delty w „paczce” i usuwa luźne obiekty.