(Git 2.22, Q2 2019, पेश किया गया है git submodule set-branch --branch aBranch -- <submodule_path>
)
ध्यान दें कि आप एक है, तो मौजूदा जो submodule नहीं है अभी तक एक शाखा पर नज़र रखने के लिए, तो ( यदि आप Git 1.8.2+ है ):
सुनिश्चित करें कि जनक रेपो जानता है कि उसका सबमॉडल अब एक शाखा को ट्रैक करता है:
cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>
सुनिश्चित करें कि आपका सबमॉड्यूल वास्तव में उस शाखा के नवीनतम स्थान पर है:
cd path/to/your/submodule
git checkout -b branch --track origin/branch
# if the master branch already exist:
git branch -u origin/master master
( 'मूल' के नाम होने के साथ रेपो नदी के ऊपर रिमोट submodule से। क्लोन किया गया है
एक git remote -v
के अंदर है कि submodule यह प्रदर्शित करेगा। आमतौर पर, यह है 'मूल')
अपने माता-पिता रेपो में अपने सबमॉडल की नई स्थिति को रिकॉर्ड करना न भूलें:
cd /path/to/your/parent/repo
git add path/to/your/submodule
git commit -m "Make submodule tracking a branch"
उस सबमॉडल के बाद के अपडेट के लिए --remote
विकल्प का उपयोग करना होगा :
# update your submodule
# --remote will also fetch and ensure that
# the latest commit from the branch is used
git submodule update --remote
# to avoid fetching use
git submodule update --remote --no-fetch
ध्यान दें कि Git 2.10+ (Q3 2016) के साथ, आप .
शाखा नाम के रूप में ' ' का उपयोग कर सकते हैं :
शाखा के नाम के रूप में दर्ज की गई है submodule.<name>.branch
में .gitmodules
के लिए update --remote
।
एक विशेष मूल्य का .
उपयोग यह इंगित करने के लिए किया जाता है कि सबमॉड्यूल में शाखा का नाम वर्तमान रिपॉजिटरी में वर्तमान शाखा के समान नाम होना चाहिए ।
लेकिन, जैसा कि लुबोस ने टिप्पणी की है
साथ git checkout
, अगर पालन करने के लिए शाखा का नाम "है .
", यह आपके अप्रतिबद्ध काम मार देंगे! इसके बजाय
उपयोग करें git switch
।
इसका मतलब है Git 2.23 (अगस्त 2019) या अधिक।
देखें " द्वारा भ्रमितgit checkout
"
यदि आप एक शाखा के बाद अपने सभी सबमॉड्यूल को अपडेट करना चाहते हैं:
git submodule update --recursive --remote
ध्यान दें कि प्रत्येक अपडेट किए गए सबमॉड्यूल के लिए परिणाम, लगभग हमेशा एक अलग HEAD होगा , जैसा कि उनके जवाब में डैन कैमरन ने लिखा है ।
( क्लिंट टिप्पणी में टिप्पणी करते हैं कि, यदि आप चलाते हैं git submodule update --remote
और परिणामी sha1 शाखा के रूप में एक ही है, तो उपमोडल वर्तमान में है, यह कुछ भी नहीं करेगा और सबमॉडल को अभी भी "उस शाखा पर" नहीं छोड़ेगा और अलग राज्य में अलग नहीं होगा। )
यह सुनिश्चित करने के लिए कि वास्तव में शाखा की जाँच की गई है (और यह अभिभावक रेपो के लिए सबमॉडल का प्रतिनिधित्व करने वाली विशेष प्रविष्टि के SHA1 को संशोधित नहीं करेगा ), वे सुझाव देते हैं:
git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git switch $branch'
प्रत्येक सबमॉड्यूल अभी भी उसी SHA1 को संदर्भित करेगा, लेकिन यदि आप नए कमिट करते हैं, तो आप उन्हें धक्का दे पाएंगे क्योंकि वे उस शाखा द्वारा संदर्भित किए जाएंगे जिसे आप ट्रैक करना चाहते हैं।
एक सबमॉड्यूल के भीतर धक्का देने के बाद, उन संशोधित सबमॉडल्स के लिए नए SHA1 को जोड़ना, कमिट करना और पुश करना न भूलें।
अलेक्जेंडर पोगरेबनीक द्वारा टिप्पणियों में$toplevel
अनुशंसित, के उपयोग पर ध्यान दें । मई 2010 में git1.7.2 में पेश किया गया था: f030c96 ।
$toplevel
इसमें शीर्ष स्तरीय निर्देशिका (जहां .gitmodules
है) का निरपेक्ष पथ समाहित है।
dtmland
टिप्पणियों में जोड़ता है :
फ़ॉरेस्ट स्क्रिप्ट उन सबमॉडल्स की जांच करने में विफल होगी जो एक शाखा का पालन नहीं कर रहे हैं।
हालाँकि, यह आदेश आपको दोनों देता है:
git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout master || git switch $branch' –
एक ही कमांड लेकिन पढ़ने में आसान:
git submodule foreach -q --recursive \
'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; \
[ "$branch" = "" ] && \
git checkout master || git switch $branch' –
umläute ने dtmland की कमांड को टिप्पणियों में सरलीकृत संस्करण के साथ परिष्कृत किया :
git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
कई लाइनें:
git submodule foreach -q --recursive \
'git switch \
$(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
Git 2.26 (Q1 2020) से पहले, एक भ्रूण जिसे submodules में पुनरावर्ती रूप से अपडेट करने के लिए कहा जाता है, अनिवार्य रूप से आउटपुट का उत्पादन करता है, और त्रुटि संदेशों को स्पॉट करना कठिन हो जाता है।
कमांड को सबमॉड्यूल्स को एन्यूमरेट करने के लिए सिखाया गया है जिसमें ऑपरेशन के अंत में त्रुटियां थीं ।
एमिली शफ़र ( ) द्वारा देखें 0222540 (16 जनवरी 2020 ) । (द्वारा विलय Junio सी Hamano - - में b5c71cc प्रतिबद्ध , 05 फरवरी 2020)nasamuffin
gitster
fetch
: सबमॉड्यूल लाने के दौरान विफलता पर जोर दें
साइन-ऑफ-बाय: एमिली शफ़र
ऐसे मामलों में जब कई सबमोड्यूल्स होने पर एक सबमॉड्यूल लाने में असफलता होती है, एक से अधिक भ्रूण वापस आने पर अन्य सबमोड्यूल्स पर गतिविधि के तहत लोन फेलिंग सबमॉड्यूल लाने में त्रुटि होती है fetch-by-oid
।
एक विफलता को देर से कॉल करें ताकि उपयोगकर्ता को पता चले कि कुछ गलत हो गया है, और कहां ।
क्योंकि fetch_finish()
केवल run_processes_parallel,
म्यूटिंग द्वारा सिंक्रोनस कहा जाता है चारों ओर की आवश्यकता नहीं है submodules_with_errors
।