सबमॉड्यूल के रिपॉजिटरी को मानते हैं कि एक कमिट है जिसे आप उपयोग करना चाहते हैं (उस कमिट के विपरीत जो सुपर-प्रोजेक्ट की वर्तमान स्थिति से संदर्भित है), इसे करने के दो तरीके हैं।
पहली आवश्यकता है कि आप पहले से ही उस सबमॉड्यूल से कमिटमेंट जान लें जिसका आप उपयोग करना चाहते हैं। यह "अंदर, बाहर" से सीधे सबमॉड्यूल को समायोजित करके फिर सुपर-प्रोजेक्ट को अपडेट करने का काम करता है। दूसरी परियोजना "बाहर से" में काम करती है, जो सुपर-प्रोजेक्ट की प्रतिबद्ध है जो कि सबमॉड्यूल को संशोधित करती है और फिर एक अलग सबमॉडल कमेटी को संदर्भित करने के लिए सुपर-प्रोजेक्ट के इंडेक्स को रीसेट करती है।
भीतर से बाहर
यदि आप पहले से ही जानते हैं कि आप कौन सा कमोडोड्यूल उपयोग करना चाहते हैं, तो सबमॉड्यूल का उपयोग करें, आप जो कमिटमेंट चाहते हैं cd
, उसकी जांच करें git add
और फिर git commit
सुपर-प्रोजेक्ट में वापस करें।
उदाहरण:
$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'
उफ़, किसी ने एक सुपर-प्रोजेक्ट कमेटी बनाई जो सबमॉड्यूल में एक अप्रकाशित प्रतिबद्ध को संदर्भित करता है sub
। किसी तरह, हम पहले से ही जानते हैं कि हम चाहते हैं कि सबमॉडल प्रतिबद्ध हो 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
। वहां जाकर सीधे जांच करें।
सबमॉड्यूल में चेकआउट
$ cd sub
$ git checkout 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Note: moving to '5d5a3ee314476701a20f2c6ec4a53f88d651df6c' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 5d5a3ee... quux
$ cd ..
चूँकि हम एक कमिट की जाँच कर रहे हैं, यह सबमॉडल में एक अलग HEAD का उत्पादन करता है। यदि आप यह सुनिश्चित करना चाहते हैं कि सबमॉड्यूल एक शाखा का उपयोग कर रहा है, तो git checkout -b newbranch <commit>
प्रतिबद्ध पर एक शाखा बनाने और जांचने के लिए उपयोग करें या उस शाखा को चेकआउट करें जो आप चाहते हैं (जैसे टिप पर वांछित प्रतिबद्ध के साथ)।
सुपर-प्रोजेक्ट को अपडेट करें
उप-परियोजना में एक चेकआउट सुपर-प्रोजेक्ट में कार्यशील पेड़ के परिवर्तन के रूप में परिलक्षित होता है। इसलिए हमें सुपर-प्रोजेक्ट इंडेक्स में बदलाव को चरणबद्ध करना होगा और परिणामों को सत्यापित करना होगा।
$ git add sub
परिणाम देखें
$ git submodule update
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
सबमॉड्यूल अपडेट मौन था क्योंकि सबमॉडल पहले से ही निर्दिष्ट कमिट पर है। पहला अंतर दिखाता है कि सूचकांक और कार्यक्षेत्र समान हैं। तीसरा अंतर दर्शाता है कि एकमात्र मंचन बदलाव sub
एक अलग प्रतिबद्ध के लिए सबमॉड्यूल को आगे बढ़ा रहा है ।
कमिट
git commit
यह फिक्स्ड-अप सबमॉडल एंट्री करता है।
बाहर
यदि आप सुनिश्चित नहीं हैं कि आपको कौन सा प्रतिबद्ध होना चाहिए, तो आपको सबमॉड्यूल से उपयोग करना चाहिए, आप इतिहास में सुपरप्रोजेक्ट में आपका मार्गदर्शन करने के लिए देख सकते हैं। आप सुपर-प्रोजेक्ट से सीधे रीसेट का प्रबंधन भी कर सकते हैं।
$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'
ऊपर भी यही स्थिति है। लेकिन इस बार हम इसे सबमॉडल में डुबकी लगाने के बजाय सुपर-प्रोजेक्ट से ठीक करने पर ध्यान देंगे।
सुपर-प्रोजेक्ट की एरेंट कमिटमेंट का पता लगाएं
$ git log --oneline -p -- sub
ce5d37c local change in sub
diff --git a/sub b/sub
index 5d5a3ee..e47c0a1 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
+Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
bca4663 added sub
diff --git a/sub b/sub
new file mode 160000
index 0000000..5d5a3ee
--- /dev/null
+++ b/sub
@@ -0,0 +1 @@
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
ठीक है, ऐसा लगता है कि यह खराब हो गया है ce5d37c
, इसलिए हम इसके माता-पिता ( ce5d37c~
) से सबमॉड्यूल को पुनर्स्थापित करेंगे ।
वैकल्पिक रूप से, आप पैच टेक्स्ट ( 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
) से सबमॉड्यूल्स कमिटमेंट ले सकते हैं और इसके बजाय ऊपर "अंदर, बाहर" प्रक्रिया का उपयोग कर सकते हैं।
सुपर-प्रोजेक्ट में चेकआउट
$ git checkout ce5d37c~ -- sub
यह सुपर-प्रोजेक्ट में sub
इसके लिए सबमॉडल प्रविष्टि को रीसेट कर देता है ce5d37c~
।
सबमॉड्यूल को अपडेट करें
$ git submodule update
Submodule path 'sub': checked out '5d5a3ee314476701a20f2c6ec4a53f88d651df6c'
सबमॉड्यूल अपडेट ठीक चला (यह एक अलग हेड इंगित करता है)।
परिणाम देखें
$ git diff ce5d37c~ -- sub
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
पहला अंतर दिखाता है कि sub
अब उसी में है ce5d37c~
। दूसरा अंतर दिखाता है कि सूचकांक और कार्यक्षेत्र समान हैं। तीसरा अंतर दिखाता है कि एकमात्र मंचन बदलाव sub
एक अलग प्रतिबद्ध के लिए सबमॉड्यूल को आगे बढ़ा रहा है ।
कमिट
git commit
यह फिक्स्ड-अप सबमॉडल एंट्री करता है।