Git kitabı bir dizinin içeriğine dair bir makale içerir :
Dizin .git/index
, her biri izinlere ve bir blob nesnesinin SHA1'e sahip sıralı yol adları listesini içeren bir ikili dosyadır (genellikle tutulur ); git ls-files
size dizinin içeriğini gösterebilir:
$ git ls-files --stage
100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0 .gitignore
100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0 .mailmap
Açık saçık git sorun o yapı üzerinde biraz daha ayrıntı verir:
Dizin git'teki en önemli veri yapılarından biridir.
Yolların listesini ve nesne adlarını kaydederek sanal bir çalışma ağacı durumunu temsil eder ve işlenecek bir sonraki ağaç nesnesini yazmak için bir hazırlama alanı görevi görür.
Durum, çalışma ağacındaki dosyaları zorunlu olarak eşleştirmek zorunda olmadığı ve çoğu zaman eşleşmediği anlamında "sanal" dır.
Daha fazlasını görmek için bkz. " git / git / Dokümantasyon / teknik / index-format.txt ":
Git dizin dosyası aşağıdaki biçime sahiptir
Tüm ikili sayılar ağ bayt sırasına göre verilmiştir.
Sürüm 2 , aksi belirtilmedikçe burada açıklanmaktadır.
- Aşağıdakilerden oluşan 12 baytlık bir başlık:
- 4 baytlık imza :
İmza {' D
', ' I
', ' R
', ' C
'} (" dircache
" anlamına gelir )
- 4 bayt sürüm numarası :
Desteklenen geçerli sürümler 2, 3 ve 4'tür.
- 32 bit dizin girişi sayısı.
- Bir dizi sıralı dizin girişi .
- Uzantılar :
Uzantılar imza ile tanımlanır.
Git bunları anlamadığında isteğe bağlı uzantılar yok sayılabilir.
Git şu anda önbelleğe alınmış ağacı destekler ve geri alma uzantılarını çözer.
- 4 bayt uzantı imzası. İlk bayt '
A
' .. ' Z
' ise uzantı isteğe bağlıdır ve yok sayılabilir.
- Uzantının 32 bit boyutu
- Uzantı verileri
- Bu sağlama toplamından önce dizin dosyasının içeriği üzerinde 160 bit SHA-1.
mljrg yorumlar :
Endeks bir sonraki taahhüdün hazırlandığı yerse, " git ls-files -s
" işlemden sonra neden hiçbir şey döndürmüyor?
Endeks, izlenmekte olanı temsil ettiğinden ve bir taahhütten hemen sonra, izlenmekte olan git diff --cached
şey son taahhütle özdeştir ( hiçbir şey döndürmez).
Böylece git ls-files -s
izlenen tüm dosyaları listeler (çıktıdaki nesne adı, mod bitleri ve sahne numarası).
Bu liste (izlenen öğenin) bir taahhüdün içeriği ile başlatılır.
Şubeyi değiştirdiğinizde, dizin içeriği, az önce geçiş yaptığınız dalın başvurduğu kesinliğe sıfırlanır.
Git 2.20 (4. Çeyrek 2018) bir Endeks Giriş Ofseti Tablosu (IEOT) ekliyor :
Bkz. Taahhüt 77ff112 , taahhüt 3255089 , taahhüt abb4bb8 , taahhüt c780b9c , taahhüt 3b1d9e0 , taahhüt 371ed0d (10 Ekim 2018), Ben Peart ( benpeart
) .
Bakınız Nguy2n Thái Ngọc Duy ( pclouds
) tarafından 252d079 (26 Eyl 2018) taahhüdü .
(Tarafından Birleştirilmiş Junio C Hamano - gitster
- içinde taahhüt e27bfaa , 19 Ekim 2018)
ieot: Dizin Giriş Ofseti Tablosu (IEOT) uzantısı ekle
Bu düzeltme eki, dizine önbellek girdilerinin yüklenmesini ve dönüştürülmesini verimli bir şekilde çok işleyebilmemizi sağlayacak ek veriler ekleyerek dizinin yüklenmesinin CPU maliyetinin ele alınmasını sağlar.
Bunu, dizin dosyasındaki önbellek girdileri bloklarına ofsetler tablosu olan (isteğe bağlı) bir dizin uzantısı ekleyerek gerçekleştirir.
V4 dizinleri için bu işi yapmak için, önbellek girdilerini yazarken, önceki girdinin yol adı tamamen farklıymış gibi geçerli girdiyi kodlayarak önek sıkıştırmasını periyodik olarak "sıfırlar" ve IEOT'taki girdinin ofsetini kaydeder .
Temel olarak, V4 indeksleri ile önek sıkıştırılmış giriş bloklarına ofsetler üretir.
İle yeni index.threads yapılandırma ayarı , endeks yükleme artık daha hızlı.
Sonuç olarak ( IEOT kullanarak ), Git 2.23 (Q3 2019) işlevini 7bd9631 temizleme read-cache.c load_cache_entries_threaded()
işlevini tamamlayın .
Bkz 8373037 işlemek , d713e88 işlemek , d92349d işlemek , 113c29a işlemek , işlemek c95fc72 , 7a2a721 taahhüt , c016579 işlemek , işlemek be27fb7 , 13a1781 taahhüt , 7bd9631 taahhüt , 3c1dce8 taahhüt , cf7a901 işlemek , d64db5b işlemek , 76a7bc0 taahhüt tarafından (2019 09 Mayıs) Jeff Kral ( peff
) .
(Göre Birleştirilmiş Junio Cı Hamano - gitster
- içinde işlemek c0e78f7 , 13 Haziran 2019)
read-cache: kullanılmayan parametreyi dişli yükten çıkar
load_cache_entries_threaded()
Fonksiyon alır src_offset
o kullanmayan parametreyi. Bu, 77ff112'deki başlangıcından beri var ( read-cache
: çalışan iş parçacıklarına yük önbellek girdileri, 2018-10-10, Git v2.20.0-rc0).
Posta listesinde kazıldığında , bu parametre serinin daha önceki bir yinelemesinin bir parçasıydı , ancak kod IEOT uzantısını kullanmaya geçtiğinde gereksiz hale geldi.