Not: git rev-parse --short
En kısa ve benzersiz SHA1'i isteyebilirsiniz .
Bkz. " Git normal karmadan kısa karma "
git rev-parse --short=4 921103db8259eb9de72f42db8b939895f5651489
92110
Örneğimde de görebileceğiniz gibi, 4 uzunluğunu belirtmiş olsam bile SHA1'in uzunluğu 5'tir.
Büyük depolar için 7, 2010'dan beri yeterli değildir ve Linus Torvalds'ın kendisi tarafından dce9648 taahhüt edin (git 1.7.4.4, Eki 2010):
Yedi varsayılan rakam, yedi onaltılık basamak çok olduğunda (yaklaşık 250+ milyon hash değerini kapsar) git gelişiminde oldukça erken gelir.
O zamanlar 65k revizyonun çok olduğunu düşündüm (BK'da vurmak üzereydik) ve her revizyon yaklaşık 5-10 yeni nesne ya da bu yüzden bir milyon nesne büyük bir sayıydı.
(BK = BitKeeper)
Bu günlerde, çekirdek en büyük git projesi bile değil ve hatta çekirdek bile yaklaşık 220 bin revizyona sahip ( BK ağacından çok daha büyük) ve iki milyon nesneye yaklaşıyoruz.
Bu noktada, yedi onaltılık basamak hala birçoğu için benzersizdir, ancak nesne sayısı ve karma boyutu arasında sadece iki büyüklük farkı söz konusu olduğunda , kesilmiş karma değerlerinde çarpışmalar olacaktır .
Artık gerçekçi olmayanlara bile yakın değil - her zaman oluyor.
Biz de gerçekçi olamayacak kadar küçüktü varsayılan kısaltması artırmak gerektiğini ve insanların git config dosyasında başına proje kendi varsayılan ayarlamak için bir yol ekleyin .
core.abbrev
Uzunluk olarak adlandırılan nesne adlarını ayarlayın.
Belirtilmezse, birçok komut 7 onaltılık kısaltma ile kısaltılır; bu, kısaltılmış nesne adlarının yeterince uzun süre benzersiz kalması için yeterli olmayabilir.
environment.c
:
int minimum_abbrev = 4, default_abbrev = 7;
Not: As aşağıda yorumladı tarafından marco.m , core.abbrevLength
içinde değiştirildi core.abbrev
içinde aynı Git 1.7.4.4 yılında a71f09f taahhüt
Yeniden adlandırma core.abbrevlength
gericore.abbrev
Sonuçta --abbrev=$n
komut satırı seçeneğine karşılık gelir .
Daha yakın zamanlarda, Linus ilave e6c587c taahhüt (Git 2.11 için, S4 2016):
(belirtildiği gibi Matthieu Moy 'ın cevabı )
Oldukça erken günlerde, bir şekilde 7-onaltılık sayılara kadar nesne adlarını kısaltmaya karar verdik, ancak projeler büyüdükçe, daha önceki günlerde yapılan ve günlük iletilerine kaydedilen bu kadar kısa bir nesne adlarının artık benzersiz olmadığı görülüyor.
Şu anda Linux çekirdeği projesi 11 ila 12 onaltılık düzeye ihtiyaç duyarken, Git'in sahip oldukları nesneleri benzersiz bir şekilde tanımlamak için 10 onaltılık düzeye ihtiyacı varken, birçok küçük proje orijinal 7-onaltılık varsayılanı ile hala iyi olabilir. Tek beden tüm projelere uymaz.
Bir nesne adını varsayılan ayarla kısaltmak ve depo için aklı başında bir varsayılan bulmak için ilk istek üzerine depodaki nesne sayısını tahmin ettiğimiz bir mekanizma tanıtın. 2^(2N)
İlk N bitine kısaltılmış nesne adlarını kullanırken nesnelerle birlikte bir depoda çarpışma göreceğimiz beklentisine dayanarak, havuzdaki nesne sayısını karşılamak için yeterli sayıda onaltılık kullanın.
Kısaltılmış ada eklediğimiz her hexdigit (4 bit), depodaki nesnelerin dört katına (2 bit) sahip olmamızı sağlar.
Linus Torvalds ( ) tarafından taahhüt edilen e6c587c (01 Ekim 2016) bölümüne bakınız .
Bkz 7b5b772 işlemek , 65acfea taahhüt tarafından (01 Eki 2016) Junio C Hamano ( ) . ( Junio C Hamano tarafından birleştirildi - - içinde taahhüt bb188d0 , 03 Eki 2016)torvalds
gitster
gitster
Bu yeni özelliğin (SHA1 kısaltma değeri için makul bir varsayılan tahmin) Git'in sürüm için kendi sürüm numarasını nasıl hesapladığı üzerinde doğrudan bir etkisi vardır .