Git sürüm 2.5+ (Q2 2015) ile başlayarak, tek bir taahhüt (tam repoyu klonlamadan) getirmek aslında mümkündür.
Bkz 68ee628 taahhüt tarafından Fredrik Medley ( moroten) , 21 Mayıs 2015
(tarafından Birleştirilmiş Junio C Hamano - gitster- içinde a9d3493 işlemek 2015 Haziran 1)
Artık yeni bir yapılandırmanız var (sunucu tarafında)
uploadpack.allowReachableSHA1InWant
upload-packHerhangi bir ref ipucundan erişilebilen bir nesne isteyen bir getirme isteğinin kabul edilmesine izin ver . Ancak, nesne erişilebilirliğinin hesaplanmasının hesaplama açısından pahalı olduğunu unutmayın.
Varsayılan olarak false.
Bu sunucu tarafı yapılandırmasını sığ bir klonla ( git fetch --depth=1) birleştirirseniz, tek bir işlem gerçekleştirebilirsiniz (bkz t/t5516-fetch-push.sh:
git fetch --depth=1 ../testrepo/.git $SHA1
git cat-fileKomutun getirildiğini görmek için komutu kullanabilirsiniz :
git cat-file commit $SHA1
" git upload-pack" hizmet eder " git fetch", bir uploadpack.allowReachableSHA1InWant
yapılandırma değişkeniyle bir ref'den erişilebildiği sürece herhangi bir ref'nin ucunda olmayan taahhütleri sunması söylenebilir .
Belgelerin tamamı:
upload-pack: isteğe bağlı olarak ulaşılabilir sha1 getirilmesine izin ver
İle uploadpack.allowReachableSHA1InWantsunucu tarafında yapılandırma seçeneği seti, " git fetchisimleri reklamı olmayan bir nesnenin (muhtemelen müzik grubuna veya bir alt modül pointer dışarı elde edilmiş) olduğu Talep" hat "a sahip bir istek yapabilirsiniz".
Yalnızca şube ipuçlarından erişilebilen nesneler, yani reklamı yapılan şube ve tarafından gizlenen şube birliği transfer.hideRefsişlenecektir.
Okunabilirliği kontrol etmek için geçmişe geri dönmenin bir maliyeti olduğunu unutmayın.
Bu özellik, sha1'in bilindiği belirli bir taahhüdün içeriğini elde ederken, özellikle sığ bir getirme kullanılıyorsa, tüm deponun klonlanmasına gerek kalmadan kullanılabilir .
Yararlı durumlar örn.
- tarihte büyük dosyalar içeren depolar,
- bir alt modül ödemesi için yalnızca gerekli verileri getirme,
- bir sha1'i hangi tam dalağa ait olduğunu ve Gerrit'te olduğunu söylemeden paylaşırken, değişiklik sayıları yerine taahhütler açısından düşünürseniz.
(Gerrit davası, allowTipSHA1InWanther Gerrit değişikliğinin bir referansı olduğu için zaten çözülmüştür .)
Git 2.6 (2015 3. Çeyrek) bu modeli geliştirecektir.
Bkz. Taahhüt 2bc31d1 , taahhüt cc118a6 (28 Temmuz 2015), Jeff King ( peff) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 824a0be tamamlama 2015 19 Eyl)
refs: negatif desteği transfer.hideRefs
Bir refs hiyerarşisini transfer.hideRefsconfig kullanarak gizlerseniz , daha sonra bu yapılandırmayı "göster" için geçersiz kılmanın bir yolu yoktur.
Bu düzeltme eki, başka bir eşleşme gizlese bile eşleşmelerin hemen gizlenmemiş olarak işaretlenmesine neden olan "negatif" bir gizleme uygular.
Eşleşmeleri, yapılandırma makineleri tarafından bize nasıl beslendiklerinden ters sırada uygulamaya özen gösteriyoruz, çünkü her zamanki "sonuncusu kazanır" yapılandırma önceliği çalışmamıza izin verir (ve .git/configörneğin, girişler geçersiz kılar /etc/gitconfig).
Böylece artık şunları yapabilirsiniz:
git config --system transfer.hideRefs refs/secret
git config transfer.hideRefs '!refs/secret/not-so-secret'
refs/secretBelirli bir repodaki bir genel bit dışında, tüm depolarda gizlemek için.
Git 2.7 (Kasım / Aralık 2015) tekrar gelişecek:
Bkz 948bfa2 işlemek , 00b293e taahhüt , (2015 05 Kas) 78a766a işlemek , 92cab49 taahhüt , 92cab49 taahhüt , 92cab49 taahhüt (2015 3 Kasım), 00b293e taahhüt , 00b293e taahhüt (2015 05 Kas) ve 92cab49 taahhüt , 92cab49 taahhüt , 92cab49 taahhüt , Lukas Fleischer ( ) tarafından 92cab49 (03 Kasım 2015) taahhüt edildi .
Yardım eden: Eric Sunshine ( ) . (Tarafından Birleştirilmiş Jeff Kral - - in dbba85e işlemek , 20 Kasım 2015)lfos
sunshineco
peff
config.txt: hideRefsad alanlarıyla anlambilimini belgelemek
Şu anda, transfer.hideRefsbir ad alanı ayarlandığında nasıl davranması gerektiği konusunda net bir tanım yoktur . Bu durumda öneklerin soyulmuş isimlerle eşleştiğini
açıklayın hideRefs. hideRefsDesenlerin şu anda alma paketinde nasıl işlendiği.
hideRefs: tam referansları eşleştirmek için destek ekleyin
Sökülen ref'lerin eşleştirilmesine ek olarak, artık hideRefstam (sökülmemiş) ref'nin eşleştiği desenler eklenebilir .
Soyulmuş ve tam eşleşmeleri birbirinden ayırmak için, bu yeni kalıpların önüne circumflex ( ^) eklenmelidir .
Dolayısıyla yeni belgeler :
transfer.hideRefs:
Bir ad alanı kullanılıyorsa, ad alanı öneki, transfer.hiderefskalıplarla eşleştirilmeden önce her bir referanstan çıkarılır .
Örneğin, refs/heads/masterbelirtilen transfer.hideRefsve geçerli isim olup foo, daha sonra refs/namespaces/foo/refs/heads/master
ilanlarından atlanırsa ama refs/heads/masterve
refs/namespaces/bar/refs/heads/masteryine de sözde "var" çizgiler olarak gösterilmektedir.
Sıyırma işleminden önce referansları eşleştirmek ^için ref adının önüne bir ekleyin . Eğer birleştirirseniz !ve ^, !önce belirtmeniz gerekir.
R. , yorumlarda , herhangi bir nesneyi isteyen bir isteği kabul etmeyi uploadpack.allowAnySHA1InWantsağlayan yapılandırmadan bahseder . (Varsayılan olarak ).upload-packfetchfalse
Bkz f8edeaa taahhüt tarafından (Kasım 2016, Git v2.11.1) David "novalis" Turner ( novalis) :
upload-pack: isteğe bağlı olarak herhangi bir sha1 getirilmesine izin ver
Kullanıcının depodaki her şeye kesinlikle erişmesine güvendiğimiz durumda bir yeniden kontrol kontrolü yapmak biraz aptalca görünüyor.
Ayrıca, dağıtılmış bir sistemde açıktır - belki bir sunucu bir ref reklamını yapar, ancak diğeri o zamandan beri bu ref'ye zorladı ve belki de iki HTTP isteği bu farklı sunuculara yönlendirildi.