Git her komut için tüm dosyaların tam bir kopyasını içerir, ancak Git deposunda zaten mevcut olan içerik için, anlık görüntü çoğaltmak yerine söz konusu içeriğe işaret eder.
Bu, aynı içeriğe sahip birkaç dosyanın yalnızca bir kez depolandığı anlamına gelir.
Dolayısıyla, anlık görüntü temel olarak bir dizin yapısının içeriğine atıfta bulunarak bir taahhüttür .
Bazı iyi referanslar:
Git'e git taahhüdü komutuyla projenizin anlık görüntüsünü kaydetmek istediğinizi söylersiniz ve temel olarak projenizdeki tüm dosyaların o noktada nasıl göründüğünün bir tezahürünü kaydeder
Lab 12 , önceki anlık görüntülerin nasıl alınacağını gösterir
Progit kitap bir anlık daha kapsamlı açıklama vardır:
Git ve diğer VCS (Subversion ve arkadaşlar dahil) arasındaki en büyük fark Git'in verileri hakkında düşünme şeklidir.
Kavramsal olarak, diğer sistemlerin çoğu bilgileri dosya tabanlı değişikliklerin bir listesi olarak depolar. Bu sistemler (CVS, Subversion, Perforce, Bazaar, vb.) Sakladıkları bilgileri bir dizi dosya olarak ve zaman içinde her dosyada yapılan değişiklikleri düşünürler.

Git, verilerini bu şekilde düşünmez veya saklamaz. Bunun yerine Git, verilerini daha çok bir mini dosya sisteminin anlık görüntüleri gibi düşünüyor.
Projenizin durumunu Git'e her kaydettiğinizde veya kaydettiğinizde, temelde o anda tüm dosyalarınızın nasıl göründüğünün bir resmini çeker ve bu anlık görüntüye bir referans depolar.
Verimli olmak için, dosyalar değişmediyse Git dosyayı tekrar saklamaz - sadece önceden depolanmış olan aynı dosyaya bir bağlantı.
Git, verilerini aşağıdaki gibi düşünüyor:

Bu Git ve neredeyse diğer tüm VCS'ler arasında önemli bir ayrımdır. Git, sürüm denetiminin hemen hemen her yönünü önceki nesilden kopyalanan çoğu sistemin yeniden gözden geçirmesini sağlar. Bu, Git'i sadece bir VCS'den ziyade üzerine inşa edilmiş inanılmaz derecede güçlü araçlarla mini bir dosya sistemi gibi yapar.
Jan Hudec bu önemli yorumu ekliyor :
Kavramsal düzeyde bu doğru ve önemli olsa da, depolama düzeyinde doğru DEĞİLDİR.
Git depolama için delta kullanır .
Sadece bu değil, aynı zamanda diğer tüm sistemlerden daha verimlidir. Delta sıkıştırması yapmak istediğinde dosya başına geçmiş tutmaz., her blob'u alır, benzer olması muhtemel bazı lekeleri seçer (önceki sürümün en yakın yaklaşımını ve bazılarının sezgisel yöntemini kullanarak), deltaları oluşturmaya çalışır ve en küçük olanı alır. Bu şekilde (çoğu zaman sezgisel yöntemlere bağlı olarak) diğer benzer dosyalardan veya öncekinden daha benzer olan eski sürümlerden yararlanabilir. "Paket penceresi" parametresi, delta sıkıştırma kalitesi için işlem performansına izin verir. Varsayılan (10) genellikle iyi sonuçlar verir, ancak alan sınırlı olduğunda veya ağ aktarımlarını hızlandırmak için git gc --aggressive250 değerini kullanır, bu da çok yavaş çalışmasını sağlar, ancak geçmiş verileri için ekstra sıkıştırma sağlar.