Git संस्करण 2.5+ (Q2 2015) से शुरू होकर, एक एकल कमिट (पूर्ण रेपो की क्लोनिंग के बिना) प्राप्त करना वास्तव में संभव है।
फ्रेड्रिक मेडले द्वारा प्रतिबद्ध 68ee628 देखें ( moroten
) , 21 मई 2015 ( जूनियो सी हमानो द्वारा
विलय - gitster
- in a9d3493 , 01 जून 2015)
अब आपके पास एक नया कॉन्फ़िगरेशन है (सर्वर की तरफ)
uploadpack.allowReachableSHA1InWant
upload-pack
किसी ऐसे रेफरी के अनुरोध को स्वीकार करने की अनुमति दें जो किसी भी रेफ टिप से पहुंच योग्य वस्तु के लिए पूछता है। हालांकि, ध्यान दें कि ऑब्जेक्ट की वास्तविकता की गणना करना कम्प्यूटेशनल रूप से महंगा है।
के लिए चूक false
।
यदि आप उस सर्वर-साइड कॉन्फ़िगरेशन को एक उथले क्लोन ( git fetch --depth=1
) के साथ जोड़ते हैं , तो आप एक सिंगल कमिट के लिए पूछ सकते हैं (देखें t/t5516-fetch-push.sh
:
git fetch --depth=1 ../testrepo/.git $SHA1
आप यह git cat-file
देखने के लिए आदेश का उपयोग कर सकते हैं कि कमिट किया गया है:
git cat-file commit $SHA1
" git upload-pack
" वह कार्य करता है " git fetch
" उन कमिटों की सेवा करने के लिए कहा जा सकता है जो किसी भी रेफरी की नोक पर नहीं हैं, जब तक कि वे uploadpack.allowReachableSHA1InWant
कॉन्फ़िगरेशन वेरिएबल के साथ एक रेफ से पहुंच से बाहर हैं ।
पूर्ण प्रलेखन है:
upload-pack
: वैकल्पिक रूप से पुनः प्राप्त करने की अनुमति देना sha1
uploadpack.allowReachableSHA1InWant
सर्वर साइड पर सेट किए गए कॉन्फ़िगरेशन विकल्प के साथ , " git fetch
" एक "वांट" लाइन के साथ एक अनुरोध कर सकता है जो एक ऑब्जेक्ट का नाम देता है जिसे विज्ञापित नहीं किया गया है (संभवतः बैंड से या सबमॉड्यूल पॉइंटर से प्राप्त किया गया है)।
केवल शाखा युक्तियों से प्राप्य वस्तुएं, अर्थात विज्ञापित शाखाओं और शाखाओं के संघ द्वारा छिपी हुई transfer.hideRefs
, संसाधित की जाएंगी।
ध्यान दें कि रीचैबिलिटी की जांच करने के लिए इतिहास को वापस चलने की एक संबद्ध लागत है।
इस सुविधा का उपयोग एक निश्चित प्रतिबद्ध की सामग्री प्राप्त करते समय किया जा सकता है, जिसके लिए sha1 ज्ञात है, पूरे रिपॉजिटरी की क्लोनिंग की आवश्यकता के बिना, खासकर अगर एक उथले लाने का उपयोग किया जाता है ।
उपयोगी मामले उदाहरण के लिए हैं
- इतिहास में बड़ी फ़ाइलों वाली रिपॉजिटरी,
- सबमॉड्यूल चेकआउट के लिए केवल आवश्यक डेटा प्राप्त करना,
- जब यह बताए बिना कि सही संख्या में परिवर्तन संख्याओं के बजाए Gerrit में कौन सी और किस शाखा में है, बिना बताए sha1 साझा करना।
(गेरिट मामले को पहले ही हल कर लिया गया है allowTipSHA1InWant
क्योंकि हर गेरिट परिवर्तन में एक रेफरी है।)
Git 2.6 (Q3 2015) उस मॉडल में सुधार करेगा।
देखें 2bc31d1 प्रतिबद्ध , cc118a6 प्रतिबद्ध द्वारा (28 जुला 2015) जेफ राजा ( peff
) ।
(द्वारा विलय Junio सी Hamano - gitster
- में प्रतिबद्ध 824a0be , 19 अगस्त 2015)
refs
: नकारात्मक का समर्थन करें transfer.hideRefs
यदि आप transfer.hideRefs
कॉन्फ़िगरेशन का उपयोग करके रेफरी की पदानुक्रम छिपाते हैं , तो बाद में उस कॉन्फ़िगरेशन को "अनहाइड" करने के लिए ओवरराइड करने का कोई तरीका नहीं है।
यह पैच एक "नकारात्मक" छिपाने का कारण बनता है, जिसके कारण मैच को तुरंत अस्वीकार कर दिया जाता है, भले ही दूसरा मैच इसे छिपाए।
हम मैच को रिवर्स-ऑर्डर में लागू करने के लिए ध्यान रखते हैं कि कैसे वे हमें कॉन्फ़िगर मशीनरी द्वारा खिलाए जाते हैं, क्योंकि इससे हमारे सामान्य "पिछले एक" कॉन्फ़िगरेशन की पूर्ववर्ती जीत (और प्रविष्टियों में .git/config
, उदाहरण के लिए, ओवरराइड हो जाएगी /etc/gitconfig
)।
तो आप अब कर सकते हैं:
git config --system transfer.hideRefs refs/secret
git config transfer.hideRefs '!refs/secret/not-so-secret'
refs/secret
सभी रेपो में छिपाने के लिए, एक विशिष्ट रेपो में एक सार्वजनिक बिट को छोड़कर।
Git 2.7 (नवंबर / दिसंबर 2015) में फिर से सुधार होगा:
प्रतिबद्ध देखें 948bfa2 , प्रतिबद्ध 00b293e (05 नवंबर 2015), 78a766a के लिए प्रतिबद्ध , 92cab49 के लिए , 92cab49 के लिए प्रतिबद्ध , 92cab49 (03 नवंबर 2015) के लिए, 00b293e के लिए प्रतिबद्ध करें , 00b293e (05 नवंबर 2015) के लिए, और 92cab49 के लिए , 92cab49 के लिए प्रतिबद्ध हैं । Lukas Fleischer ( ) द्वारा 92cab49 (03 नवंबर 2015) प्रतिबद्ध है ।
मदद-द्वारा: एरिक सनशाइन ( ) । (द्वारा विलय जेफ राजा - - में dbba85e प्रतिबद्ध , 20 नवंबर 2015)lfos
sunshineco
peff
config.txt
: hideRefs
नाम स्थान के साथ शब्दार्थ का दस्तावेज
अभी, कोई स्पष्ट परिभाषा नहीं है कि transfer.hideRefs
नाम स्थान सेट होने पर व्यवहार कैसे करना चाहिए।
बता दें कि hideRefs
उपसर्ग उस मामले में छीन लिए गए नामों से मेल खाते हैं। इस तरह से hideRefs
पैटर्न वर्तमान में प्राप्त-पैक में संभाला जाता है।
HideRefs: पूर्ण रेफरी मिलान के लिए समर्थन जोड़ें
hideRefs
स्ट्रिप्ड रेफ के मिलान के अलावा, अब एक पैटर्न जोड़ सकते हैं कि पूर्ण (अनस्ट्रिप्ड) रेफ के विरुद्ध मिलान किया जाता है।
छीनने और पूर्ण मैचों के बीच अंतर करने के लिए, उन नए पैटर्न को एक परिधि ( ^
) के साथ उपसर्ग करना चाहिए ।
इसलिए नया दस्तावेज़ :
transfer.hideRefs:
यदि कोई नामस्थान उपयोग में है, तो प्रत्येक संदर्भ से नाम स्थान उपसर्ग छीन लिया जाता है, इससे पहले कि वह transfer.hiderefs
पैटर्न से मेल खाता हो ।
उदाहरण के लिए, यदि refs/heads/master
में निर्दिष्ट किया जाता transfer.hideRefs
है और वर्तमान नाम स्थान है foo
, तो refs/namespaces/foo/refs/heads/master
विज्ञापनों से छोड़ दिया जाता है, लेकिन refs/heads/master
और
refs/namespaces/bar/refs/heads/master
अभी भी तथाकथित "है" लाइनों के रूप में विज्ञापित कर रहे हैं।
स्ट्रिपिंग से पहले Refs से मिलान करने के लिए, ^
Ref नाम के सामने एक जोड़ दें । यदि आप संयोजन करते हैं !
और ^
, !
पहले निर्दिष्ट किया जाना चाहिए।
आर .. में टिप्पणियों का उल्लेख हैuploadpack.allowAnySHA1InWant
, जो कि किसी भी वस्तु के लिए पूछने वाले अनुरोध upload-pack
को स्वीकार करने की अनुमति देता है fetch
। (चूक false
)।
डेविड "नोवलिस" टर्नर ( ) द्वारा देखें प्रतिबद्ध f8edeaa (Nov. 2016, Git v2.11.1) देखें :novalis
upload-pack
: वैकल्पिक रूप से किसी भी sha1 को लाने की अनुमति दें
यह उस मामले में एक रीचबिलिटी चेक करने के लिए थोड़ा मूर्खतापूर्ण लगता है जहां हम उपयोगकर्ता को रिपॉजिटरी में पूरी तरह से सब कुछ एक्सेस करने के लिए भरोसा करते हैं।
इसके अलावा, यह एक वितरित प्रणाली में दोष है - शायद एक सर्वर एक रेफरी का विज्ञापन करता है, लेकिन दूसरे ने तब से उस रेफरी को एक बल-धक्का दिया है, और शायद दो HTTP अनुरोध इन अलग-अलग सर्वरों को निर्देशित करते हैं।