Git kendi başına bilgi atmaz *. Her dosyanın önceki tüm sürümleri her zaman geri dönüşler, farklar, denetimler vb. İçin kullanılabilir.
Tüm ağaç ve Bireysel dosyalar
Uzlaştırmaya çalıştığınız şey, Git'in geçmiş modelinin tüm ağaca odaklanmış olmasına karşı, tek bir dosyanın eski bir sürümüne erişme fikridir. Tüm ağacın sürümlendirilmesi, on değişikliğin foo.c
var olduğu halini görmek için (örneğin), on foo.c
değişikliğin öncesine göre on tam ağaç değişikliğini görmek için biraz daha fazla çalışma gerektirir :
# 10 foo.c-changes ago
git show $(git rev-list -n 10 --reverse HEAD -- foo.c | head -1):foo.c
# 10 whole-tree-changes ago
git show HEAD~10:foo.c
Ağacın yönlendirilmesinin faydaları, esas olarak, tüm ağacın çeşitli kısımlarında yapılan karşılıklı bağımlılıkların bir birimi olarak taahhütleri görme yeteneği, genel olarak ekstra yazımdan (takma adlar, komut dosyaları, vb.) Ve CPU zamanından büyük ölçüde ağır basar. geçmiş taahhütleri kazarak geçirdi.
Depolama Verimliliği
Yeni bir nesne (ör. Önceden görülmemiş içeriğe sahip bir dosya) sisteme girdiğinde, "gevşek nesne" olarak düz (zlib) sıkıştırmayla depolanır. Yeterli gevşek nesne biriktiğinde ( gc.auto
yapılandırma seçeneğine bağlı olarak veya kullanıcı git gc veya alt düzey paketleme komutlarından birini çalıştırdığında ), Git birçok gevşek nesneyi tek bir “paket dosyasına” toplar.
Bir paket dosyasındaki nesneler ya düz sıkıştırılmış veriler (gevşek nesnelerle aynı, sadece diğer nesnelerle birlikte paketlenmiş) ya da başka bir nesneye karşı sıkıştırılmış deltalar olarak saklanabilir. Deltalar yapılandırılabilir derinliklere ( pack.depth
) zincirlenebilir ve herhangi bir uygun nesneye karşı yapılabilir ( pack.window
Git'in en iyi delta tabanını ne kadar geniş aradığını kontrol eder; eğer geçmişte ilgisiz bir dosyanın bir sürümü bir taban verirse bir taban olarak kullanılabilir iyi delta sıkıştırma). Derinlik ve pencere boyutu yapılandırmalarının delta sıkıştırma motoruna verdiği enlem, genellikle CVS tarzı basit bir sürümden sonraki / önceki sürüm “fark” sıkıştırmasına göre daha iyi bir delta sıkıştırması ile sonuçlanır.
Bir Git havuzunun (tam geçmiş ve sıkıştırılmamış bir çalışma ağacı ile) tek bir SVN kasasından (sıkıştırılmamış çalışma ağacı ve bozulmamış kopya ile) genellikle daha az yer kaplamasına izin verebilen bu agresif delta sıkıştırmasıdır (normal zlib sıkıştırması ile birlikte).
Bkz Nasıl Git Mağazaları Nesneleri ve Packfile bölümleri Git Topluluk Kitabı . Ayrıca git pack-objects manpage .
* Git'in işlemlerini “geçmişi yeniden yazarak” ve git reset gibi komutlarla söyleyebilirsiniz , ancak bu durumlarda Git, yeni atılan işlemlerin bir süreliğine “askıda kaldığını”, sadece ihtiyacınız olduğuna karar vermeniz durumunda. Bkz git reflog ve git eriği .