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-pack
Herhangi 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-file
Komutun 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.allowReachableSHA1InWant
sunucu tarafında yapılandırma seçeneği seti, " git fetch
isimleri 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.hideRefs
iş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ı, allowTipSHA1InWant
her 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.hideRefs
config 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/secret
Belirli 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
: hideRefs
ad alanlarıyla anlambilimini belgelemek
Şu anda, transfer.hideRefs
bir 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
. hideRefs
Desenlerin ş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 hideRefs
tam (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.hiderefs
kalıplarla eşleştirilmeden önce her bir referanstan çıkarılır .
Örneğin, refs/heads/master
belirtilen transfer.hideRefs
ve geçerli isim olup foo
, daha sonra refs/namespaces/foo/refs/heads/master
ilanlarından atlanırsa ama refs/heads/master
ve
refs/namespaces/bar/refs/heads/master
yine 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.allowAnySHA1InWant
sağlayan yapılandırmadan bahseder . (Varsayılan olarak ).upload-pack
fetch
false
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.