SORU
3 Mart 2011, PERŞEMBE


'in pack dosyaları deltalar yerine anlık Gıt?

Git ve en diğer sürüm kontrol sistemleri arasındaki önemli farklardan biri, Diğerleri deltalar - bir taahhüt arasında değişiklik kümeleri ve sonraki bir dizi olarak kaydeder saklamak eğilimindedir. Bu bilgileri mümkün olan en az miktarda bir taahhüt hakkında saklamak olduğu için mantıklı görünüyor. Ama artık tarih oluyor tamamlama, daha fazla hesaplama revizyon aralıklarını karşılaştırmak için alır.

Buna karşılık, Git saklarher değişiklik bütün projenin anlık tamamlayın. Bu repo boyutu önemli ölçüde büyümek her ile taahhüt yapmaz nedeni projedeki dosya içeriğinin karma adlı Gıt dizininde bir dosya olarak saklanır. Eğer içeriği değişti eğer, karma değişmedi, sadece aynı dosyaya işaret işlemek. Ve diğer iyileştirmeler vardır.

Tüm bu içine Gıt periyodik olarak veri alanı kazanmak için koyar this information about pack files üzerinde tökezledi kadar bana mantıklı geldi:

Bu yer kazanmak için, Git kullanır packfile. Bu bir. Git tek kaydedeceği biçimi ikinci olarak değişti o kısmı dosya, O dosya için bir işaretçi benzer.

Bu temelde deltalar saklamak için geri gitmiyor mu? Nasıl farklı değil mi? Nasıl bu diğer sürüm kontrolleri sistemleri var aynı sorunlar Git tabi önlemek mu?

Örneğin, Subversion deltalar kullanır ve 50 sürümleri geri Git ile ilgili anlık görüntü yakalayabilir ise felaket 50 farklar anlamına gelir. Tabii git de depolar 50 farklar içinde packfiles... orada bir mekanizma olduğunu söylüyor "sonra bazı az sayıda deltalar, edeceğiz deposu tamamen yeni bir anlık" böylece biz yok yığmak çok büyük bir değişiklik? Başka nasıl Gıt deltalar dezavantajları önlemek olabilir?

CEVAP
7 NİSAN 2011, PERŞEMBE


Özet:
Git paketi dosyaları dikkatlice etkili bir şekilde disk önbelleğe alır ve kullanmak için inşa edilir sağlamak” desen okuma için sık kullanılan komutlar için ve son başvurulan erişim “güzel nesneler.


Git paketi dosyası biçimi oldukça esnektir ya**15) 14**. Paketi iki mağaza nesneleri ana dosyaları yollar: “” (ham nesne, veri ve deflate sıkıştırma undeltified o) veya “” (delta bir başka nesneye karşı form sonra deltified deflate sıkıştırma sonucunda delta verileri). Nesnelerin içinde saklı paketi herhangi bir sırada ((mutlaka) olmak zorunda değilsiniz olabilir nesne türü nesne adı veya başka bir öznitelik) göre sıralanmış ve deltified nesneler aynı türden başka uygun bir nesne karşı yapılabilir.

Git pack-objects komut kullanır heuristics birkaç ortak locality of reference mükemmel sağlamak komutlar. Bu keşif tabanının her iki seçim kontrol deltified nesneleri ve nesnelerin düzeni için nesneler. Her mekanizması çoğunlukla bağımsız, ama bazı hedefleri paylaşıyorlar.

Git delta sıkıştırılmış nesneler, ama uzun zincirler oluştururlar keşif emin sadece “” nesneleri ucunda eski yapmayı deneyin uzun zincirler. Delta taban önbellek (who tarafından kontrol edilir boyutu. core.deltaBaseCacheLimit yapılandırma değişken) otomatik olarak. kullanılan ve büyük ölçüde “yeniden” için gerekli sayısını azaltır okumak için gereken komutları çok sayıda nesne () örneğin git log -p.

Delta Sıkıştırma Sezgisel

Tipik bir Git depo nesnelerin çok sayıda, bu yüzden mağazaları onlar makul tüm çiftleri bulmak için karşılaştırma yapamam (ve zincirleri) en küçük delta temsilleri. verecektir

Delta üssü seçim tahmini fikrine dayanmaktadır iyi delta üsleri benzer dosya adları ile nesneler arasında bulunacaktır ve boyutları. Nesne her tür ayrı ayrı (yani bir işlenir bir nesne türü asla bir delta için üs olarak kullanılacaktır başka bir nesne türü).

Delta temel seçim amaçları için, nesneleri sınıflandırılmaktadır (öncelikle) dosya adı ve boyutu. Bu sıralama listesi bir pencere sınırlamak için kullanılır potansiyel delta üssü olarak kabul edilen nesnelerin sayısı. Eğer bir“”. yeterince iyi ^sup>1delta temsili bir nesne bulunamadı onun penceresinde nesneler arasında, daha sonra nesne delta olmayacak sıkıştırılmış.

Pencerenin boyutu --window= seçeneği tarafından kontrol edilir git pack-objects pack.window yapılandırma değişken. Bu delta zinciri maksimum derinlik --depth=tarafından kontrol edilir git pack-objects pack.depth yapılandırma seçeneği değişken. git gc --aggressive seçeneği büyük ölçüde büyütür her iki pencere boyutunu ve oluşturma girişimi için maksimum derinlik küçük paket bir dosya.

Dosya Adı Sıralama ile birlikte olan girişler için nesneler kümeleri isimleri aynı (ya da en azından benzer sonlar (.c vs.)). Boyutu sıralama verileri kaldırmak deltalar, böylece gelen en büyükten en küçüğe. Veri Temizleme (deltalar var kısa beri eklemek deltalar tercih beyan) daha önce, daha büyük nesneleri ve bu yüzden (genellikle daha yeni normal sıkıştırma ile temsil edilme eğilimindedir.

1 “Yeterince iyi” söz konusu nesne ve elde edilen delta zinciri nasıl potansiyel delta tabanı olarak büyüklüğüne bağlıdır. ne olarak nitelendirir

Sipariş Sezgisel Nesne

Nesneleri “en son başvurulan”bir pack dosyalarında saklanır sipariş. Nesneler en yakın tarihi yeniden inşa etmek için ihtiyaç vardır önceki paketi içinde yer alan ve birbirine yakın olacak. Bu genellikle iyi OS disk önbelleğe için çalışıyor.

Tüm nesneleri tamamlama tarihi (en)göre sınıflandırılmaktadır taahhüt ve birlikte tutulur. Bu yerleştirme ve optimize disk sipariş erişir geçmişi grafiği yürüyüş ve temel ayıklamak için gerekli taahhüt bilgileri (örneğin git log).

Ağaç ve blob nesneleri ağacı ile başlayan saklanır ilk (en) son saklı işlemek. Her bir ağaç derinlemesine işlenir çoktan beri var olan nesneleri saklamak ilk moda saklı. Bu ağaçlar ve lekeler yeniden oluşturmak için gerekli koyar en son birlikte bir yere kaydetme. Ve bu herhangi bir ağaç lekeler ama bu taahhüt için daha sonra gerekli kaydedilmedi sonra sıralanmış saklanan sipariş işlemek.

Son sipariş biraz nesne delta taban seçimi etkilenir eğer bir nesne delta gösterimi için seçili ise, bu temel nesne temel nesne hemen önce depolanır, sonra yine saklı olup olmadığı henüz bilinmiyor. deltified kendisi nesne. Bunun muhtemel nedeni disk önbelleğine engeller doğrusal olmayan erişim olurdu temel bir nesne okumak için gerekli “” doğal olarak pack dosyasında daha sonra saklı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gadgetgal38

    gadgetgal38

    9 HAZİRAN 2009
  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009
  • Attempts at least

    Attempts at

    1 Ocak 2007