आगामी git1.8.4 में नया (जुलाई 2013) :
" git submodule update
" वैकल्पिक रूप से सबमॉड्यूल रिपॉजिटरी को उथले रूप से क्लोन कर सकता है।
(और git 2.10 Q3 2016 के साथ रिकॉर्ड करने की अनुमति देता है git config -f .gitmodules submodule.<name>.shallow true
।
इस उत्तर का अंत देखें)
देखें 275cd184d52b5b81cb89e4ec33e540fb2ae61c1f प्रतिबद्ध :
--depth
"Git सबमॉड्यूल" के ऐड और अपडेट कमांड का विकल्प जोड़ें , जिसे बाद में क्लोन कमांड पर पास किया जाता है। यह तब उपयोगी होता है जब सबमोडुले (s) विशाल होते हैं और आपको वास्तव में किसी भी चीज में दिलचस्पी नहीं होती है लेकिन नवीनतम प्रतिबद्ध होते हैं।
टेस्ट जोड़े जाते हैं और कुछ इंडेक्शन एडजस्टमेंट को बाकी टेस्टफाइल के अनुरूप बनाया जाता है, "सबमॉड्यूल अपडेट pwd में प्रतीकात्मक लिंक को हैंडल कर सकता है"।
साइन-ऑफ-बाय: फ्रेड्रिक गुस्ताफसन <iveqy@iveqy.com>
एकेड-बाय: जेन्स लेहमन<Jens.Lehmann@web.de>
इसका मतलब है कि यह काम करता है:
git submodule add --depth 1 -- repository path
git submodule update --depth -- [<path>...]
साथ में:
--depth::
यह विकल्प add
और update
आदेशों के लिए मान्य है ।
एक 'उथले' क्लोन का निर्माण करें जिसमें इतिहास को संशोधित संख्या में संशोधित किया गया हो।
atwyman टिप्पणियों में जोड़ता है :
जहां तक मैं बता सकता हूं कि यह विकल्प सबमॉडल्स के लिए उपयोग करने योग्य नहीं है जो master
बहुत बारीकी से ट्रैक नहीं करते हैं। यदि आप गहराई 1 सेट करते हैं, तो submodule update
केवल तभी सफल हो सकता है जब आप जिस सबमॉड्यूल के लिए प्रतिबद्ध हैं वह नवीनतम मास्टर है। अन्यथा आपको " fatal: reference is not a tree
" मिलता है ।
यह सच है।
यही है, जब तक git 2.8 (मार्च 2016)। 2.8 के साथ, submodule update --depth
सफल होने के लिए एक और मौका है, भले ही SHA1 रिमोट रेपो हेड्स में से एक से सीधे पहुंच रहा हो।
Stefan Beller ( ) द्वारा प्रतिबद्ध fb43e31 (24 फ़रवरी 2016) देखें ।
हेल्प-बाय: जूनियो सी हमानो ( ) । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 9671a76 , 26 फ़र 2016)stefanbeller
gitster
gitster
submodule: सीधे लाने के लिए कठिन प्रयास करना चाहिए
जब एक परिवर्तन की समीक्षा की जाती है जो गेरिट में एक सबमॉड्यूल को अपडेट करता है, तो एक सामान्य समीक्षा अभ्यास पैच को स्थानीय रूप से परीक्षण करने के लिए डाउनलोड और चुनना है।
हालाँकि, इसका स्थानीय स्तर पर परीक्षण करने पर, ' git submodule update
' सही सबमॉडल sha1 लाने में विफल हो सकता है क्योंकि सबमॉड्यूल में संबंधित वचन अभी तक परियोजना के इतिहास का हिस्सा नहीं है, लेकिन सिर्फ एक प्रस्तावित बदलाव भी है।
यदि $sha1
हम डिफ़ॉल्ट लाने का हिस्सा नहीं थे, तो हम $sha1
सीधे लाने की कोशिश करते हैं । कुछ सर्वर हालांकि sha1 द्वारा सीधे लाने का समर्थन नहीं करते हैं, जो git-fetch
जल्दी विफल हो जाता है।
हम यहां खुद को विफल कर सकते हैं क्योंकि अभी भी लापता sha1 चेकआउट चरण में बाद में किसी भी तरह से विफलता का कारण बन जाएगा, इसलिए यहां असफल होना उतना ही अच्छा है जितना हम प्राप्त कर सकते हैं।
MVG बताते टिप्पणी में करने के लिए प्रतिबद्ध fb43e31 (Git 2.9, फ़रवरी 2016)
यह मेरे लिए प्रतीत होता है कि fb43e31 SHA1 आईडी द्वारा लापता होने का अनुरोध करता है, इसलिए सर्वर पर सेटिंग्स uploadpack.allowReachableSHA1InWant
और uploadpack.allowTipSHA1InWant
सेटिंग्स शायद यह प्रभावित करती हैं कि क्या यह काम करता है।
मैंने आज git सूची में एक पोस्ट लिखी है , जिसमें बताया गया है कि कैसे उथले सबमॉड्यूल्स का उपयोग कुछ परिदृश्यों के लिए बेहतर काम करने के लिए किया जा सकता है, अर्थात् यदि कमिट भी एक टैग है।
चलो इन्तेजार करके देखते है।
मुझे लगता है कि यह एक कारण है कि fb43e31 ने एक विशिष्ट SHA1 के लिए भ्रूण को डिफ़ॉल्ट शाखा के लिए लाने के बाद एक वापसी की।
फिर भी, "--depth 1" के मामले में, मुझे लगता है कि यह जल्दी से गर्भपात करने के लिए समझ में आता है: यदि सूचीबद्ध में से कोई भी अनुरोध किए गए मेल से मेल नहीं खाता है, और SHA1 द्वारा पूछना सर्वर द्वारा समर्थित नहीं है, तो इसमें कोई मतलब नहीं है किसी भी चीज को लाना, क्योंकि हम सबमॉडल की आवश्यकता को किसी भी तरह से संतुष्ट नहीं कर पाएंगे।
अगस्त 2016 को अपडेट करें (3 साल बाद)
Git 2.10 (Q3 2016) के साथ, आप कर पाएंगे
git config -f .gitmodules submodule.<name>.shallow true
अधिक के लिए " अतिरिक्त वजन के बिना गिट उपमॉडल " देखें ।
Git 2.13 (Q2 2017) में जोड़ सकता हूँ 8d3047c प्रतिबद्ध द्वारा (19 अप्रैल 2017) सेबस्टियन Schuberth ( sschuberth
) ।
(द्वारा विलय सेबस्टियन Schuberth - sschuberth
- में 8d3047c प्रतिबद्ध , 20 अप्रैल 2017)
इस सबमॉडल का एक क्लोन उथले क्लोन के रूप में किया जाएगा (1 की इतिहास गहराई के साथ)
हालाँकि, Ciro Santilli टिप्पणियों में जोड़ता है (और उनके उत्तर में विवरण )
shallow = true
पर .gitmodules
उसे प्रभावित करती है संदर्भ का उपयोग करते समय दूरदराज के प्रमुख द्वारा पता लगाया --recurse-submodules
, लक्ष्य के लिए प्रतिबद्ध है, भले ही एक शाखा द्वारा की ओर इशारा किया है, और भले ही आप डाल branch = mybranch
पर .gitmodules
के रूप में अच्छी तरह से।
Git 2.20 (Q4 2018) submodule समर्थन, पर ब्लॉब से पढ़ने के लिए अद्यतन किया गया है, जिस पर बेहतर बनाता है HEAD:.gitmodules
जब .gitmodules
फ़ाइल काम कर पेड़ से लापता है।
देखें 2b1257e प्रतिबद्ध , 76e9bdc प्रतिबद्ध (25 अक्टू 2018), और b5c259f प्रतिबद्ध , 23dd8f5 प्रतिबद्ध , b2faad4 प्रतिबद्ध , 2502ffc प्रतिबद्ध , 996df4d प्रतिबद्ध , d1b13df प्रतिबद्ध , 45f5ef3 प्रतिबद्ध , प्रतिबद्ध bcbc780 (05 अक्टू 2018) द्वारा एंटोनियो Ospite ( ao2
) ।
( जूनियो सी gitster
हमानो द्वारा विलय - - in abb4824 , 13 Nov 2018)
submodule
: पढ़ने का समर्थन .gitmodules
जब यह काम कर रहे पेड़ में नहीं है
जब .gitmodules
फ़ाइल काम कर रहे पेड़ में उपलब्ध नहीं है, तो सूचकांक से सामग्री का उपयोग करने की कोशिश करें और वर्तमान शाखा से।
यह उस मामले को कवर करता है जब फ़ाइल रिपॉजिटरी का हिस्सा होती है लेकिन किसी कारण से इसे चेक आउट नहीं किया जाता है, उदाहरण के लिए एक विरल चेकआउट के कारण।
यह कम से कम ' git submodule
' कमांड का उपयोग करना संभव बनाता है जो वर्किंग ट्री को पूरी तरह से आबाद किए बिना कॉन्फ़िगरेशन फ़ाइल को पढ़ता है gitmodules
।
लिखने के लिए .gitmodules
अभी भी फ़ाइल की जाँच करने की आवश्यकता होगी, इसलिए कॉल करने से पहले उसके लिए जाँच करें config_set_in_gitmodules_file_gently
।
समान रूप से एक चेक भी जोड़ें git-submodule.sh::cmd_add()
" git submodule add
" कमांड की अंतिम विफलता का अनुमान लगाने के लिए जब .gitmodules
सुरक्षित रूप से लेखन योग्य नहीं है; यह आदेश को एक स्थान पर रिपॉजिटरी को छोड़ने से रोकता है (उदाहरण के लिए सबमॉड्यूल रिपॉजिटरी को क्लोन किया गया था लेकिन असफल होने के .gitmodules
कारण अपडेट नहीं किया गया था config_set_in_gitmodules_file_gently
)।
इसके अलावा, चूंकि config_from_gitmodules()
अब वैश्विक ऑब्जेक्ट स्टोर तक पहुंच है, इसलिए सभी कोड रास्तों की रक्षा करना आवश्यक है, जो फ़ंक्शन को वैश्विक सुरक्षा स्टोर तक पहुंच के खिलाफ कहते हैं।
वर्तमान में यह केवल में होता है builtin/grep.c::grep_submodules()
, इसलिए grep_read_lock()
कोड शामिल करने से पहले कॉल करें
config_from_gitmodules()
।
नोट: एक दुर्लभ मामला है जहां यह नई सुविधा अभी तक ठीक से काम नहीं करती है: नेस्टेड सबमॉड्यूल .gitmodules
उनके काम के पेड़ के बिना ।
नोट: Git 2.24 (Q4 2019) एक सबमॉड्यूल उथले को क्लोन करते समय एक संभावित सेगफॉल्ट को ठीक करता है।
अली Utku सेलेन ( ) द्वारा प्रतिबद्ध ddb3c85 (30 सितंबर 2019) देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 678a9ca , 09 अक्टू 2019)auselen
gitster
Git 2.25 (Q1 2020), git submodule update
प्रलेखन को स्पष्ट करता है।
फिलिप ब्लेन ( ) द्वारा प्रतिबद्ध f0e58b3 (24 नवंबर 2019) देखें । ( जूनियो सी हमानो द्वारा विलय - - कम से कम एफई ६१०४५ , ०५ दिसंबर २०१ ९)phil-blain
gitster
doc
: उल्लेख है कि 'git सबमॉड्यूल अपडेट' के लापता होने की सूचना मिलती है
हेल्प-बाय: जूनियो सी हमानो हेल्प
-बाय: जोहान्स शिंडेलिन ने
हस्ताक्षर किए-ऑफ-ऑफ: फिलिप कोन
सुपरप्रोजेक्ट में दर्ज SHA-1 नहीं मिलने पर ' git submodule
अपडेट' सबमॉडल रिमोट से नया संचार करेगा । प्रलेखन में इसका उल्लेख नहीं किया गया था।
चेतावनी: Git 2.25 (Q1 2020) के साथ, " git clone --recurse-submodules
" और वैकल्पिक ऑब्जेक्ट स्टोर के बीच की बातचीत को डिजाइन किया गया था।
जब उपयोगकर्ता विफलताओं को देखते हैं तो अधिक स्पष्ट सिफारिशें करने के लिए प्रलेखन और कोड सिखाया गया है।
देखें 4f3e57e प्रतिबद्ध , प्रतिबद्ध 10c64a0 द्वारा (02 दिसंबर 2019) जोनाथन टैन ( jhowtan
) ।
(द्वारा विलय Junio सी Hamano - gitster
- में प्रतिबद्ध 5dd1d59 , 10 दिसंबर 2019)
साइन-ऑफ-बाय: जोनाथन टैन
एकेड-बाय: जेफ किंग
जब एक सुपरप्रोजेक्ट को कुछ उथले मॉड्यूल से परिभाषित करते हुए पुनरावर्ती किया जाता है .gitmodules
, तो " --reference=<path>
" के साथ पुनरावृत्ति , एक त्रुटि उत्पन्न होती है। उदाहरण के लिए:
git clone --recurse-submodules --branch=master -j8 \
https://android.googlesource.com/platform/superproject \
master
git clone --recurse-submodules --branch=master -j8 \
https://android.googlesource.com/platform/superproject \
--reference master master2
के साथ विफल रहता है:
fatal: submodule '<snip>' cannot add alternate: reference repository
'<snip>' is shallow
जब सुपरप्रोजेक्ट के वैकल्पिक से गणना की गई वैकल्पिक को जोड़ा नहीं जा सकता है, चाहे इस मामले में या किसी अन्य, क्लोनिंग करते समय " submodule.alternateErrorStrategy
" कॉन्फ़िगरेशन विकल्प को कॉन्फ़िगर करने और " --reference-if-able
" के बजाय " " का उपयोग करने के बारे में सलाह दें --reference
।
यह विस्तृत है:
2.25 Git (Q1 2020) के साथ, "git क्लोन --recurse-submodules" और वैकल्पिक ऑब्जेक्ट स्टोर के बीच की बातचीत को डिजाइन किया गया था।
Doc
: submodule.alternateErrorStrategy समझाएं
साइन-ऑफ-बाय: जोनाथन टैन
एकेड-बाय: जेफ किंग
प्रतिबद्ध 31224cbdc7 (" clone
: पुनरावर्ती और संदर्भ विकल्प सबमॉडल विकल्प को ट्रिगर करता है", 2016-08-17, Git v2.11.0-rc0 - बैच में सूचीबद्ध मर्ज # 1 ) ने एक सुपरप्रोजेक्ट पर कॉन्फ़िगरेशन विकल्प " submodule.alternateLocation
" और " submodule.alternateErrorStrategy
" का समर्थन करने के लिए सिखाया। ।
यदि किसी सुपरप्रोजेक्ट पर submodule.alternateLocation
" superproject
" को " " कॉन्फ़िगर किया जाता है , तो जब भी उस सुपरप्रोजेक्ट का एक सबमॉड्यूल क्लोन किया जाता है, तो वह सुपरप्रोजेक्ट से उस सबमॉड्यूल के लिए अनुरूप वैकल्पिक पथ की गणना करता है $GIT_DIR/objects/info/alternates
और इसका संदर्भ देता है।
" submodule.alternateErrorStrategy
" विकल्प निर्धारित करता है कि क्या होता है यदि उस वैकल्पिक को संदर्भित नहीं किया जा सकता है।
हालांकि, यह स्पष्ट नहीं है कि क्लोन आगे बढ़ता है जैसे कि कोई विकल्प निर्दिष्ट नहीं किया गया था जब वह विकल्प "डाई" पर सेट नहीं होता है (जैसा कि 31224cbdc7 में परीक्षणों में देखा जा सकता है )।
इसलिए, तदनुसार दस्तावेज़।
Config submodule प्रलेखन अब में शामिल हैं:
submodule.alternateErrorStrategy::
निर्दिष्ट करता है कि एक सबमॉड्यूल के लिए वैकल्पिक के साथ त्रुटियों का इलाज कैसे किया जाए submodule.alternateLocation
।
संभावित मान हैं ignore
, info
, die
।
डिफ़ॉल्ट है die
।
ध्यान दें कि यदि सेट किया गया है , ignore
या यदि गणना किए गए वैकल्पिक के साथ कोई त्रुटि है, तो क्लोन आगे बढ़ता है जैसे कि कोई वैकल्पिक निर्दिष्ट नहीं किया गया था ।info
git submodule add/update
" अब सबमॉड्यूल रिपॉजिटरी को धीरे-धीरे क्लोन कर सकता है! देखें नीचे मेरा उत्तर