गिट सबमॉड्यूल हेड 'संदर्भ एक पेड़ की त्रुटि नहीं है


305

मेरे पास एक सबमॉड्यूल वाला एक प्रोजेक्ट है जो एक अमान्य कमिट की ओर इशारा करता है: सबमॉड्यूल कमिट स्थानीय बनी हुई है और जब मैं इसे दूसरे रेपो से लाने की कोशिश करता हूं तो मुझे यह मिलता है:

$ git submodule update
fatal: reference is not a tree: 2d7cfbd09fc96c04c4c41148d44ed7778add6b43
Unable to checkout '2d7cfbd09fc96c04c4c41148d44ed7778add6b43' in submodule path 'mysubmodule'

मुझे पता है कि सबमॉड्यूल HEAD क्या होना चाहिए, क्या ऐसा कोई तरीका है जिससे मैं स्थानीय स्तर पर इसे बदल सकता हूं, बिना रेपो के जो इसे करता है 2d7cfbd09fc96c04c4c41148d44ed7778add6b43?

मुझे यकीन नहीं है कि अगर मैं स्पष्ट हो रहा हूं ... तो इसी तरह की स्थिति मुझे मिली।


11
"घातक: संदर्भ एक पेड़ नहीं है" सबमॉड्यूल्स के संदर्भ में आमतौर पर सबमॉड्यूल कमिट का मतलब है कि माता-पिता रेपो की अपेक्षाओं को अभी तक धक्का नहीं दिया गया है, या किसी अन्य तरीके से खराब हो गया है। हमारे लिए यह भ्रामक त्रुटि संदेश केवल एक सबमॉड्यूल को धक्का देकर हल किया गया था जिसे कोई धक्का देना भूल गया था।
क्रिस मोसची

1
@ChrisMoschini - मेरे पास बस यही मुद्दा था, और यह मेरा "समाधान" था, मैंने मुख्य रेपो को धक्का दिया और खींच दिया, लेकिन मैं सबमॉडल के रेपो के लिए अपने आखिरी प्रतिबद्ध को आगे बढ़ाने के लिए भूल गया। धन्यवाद!
रोटेम

हो सकता है कि आप नवीनतम
सबमॉडल

जवाबों:


378

सबमॉड्यूल के रिपॉजिटरी को मानते हैं कि एक कमिट है जिसे आप उपयोग करना चाहते हैं (उस कमिट के विपरीत जो सुपर-प्रोजेक्ट की वर्तमान स्थिति से संदर्भित है), इसे करने के दो तरीके हैं।

पहली आवश्यकता है कि आप पहले से ही उस सबमॉड्यूल से कमिटमेंट जान लें जिसका आप उपयोग करना चाहते हैं। यह "अंदर, बाहर" से सीधे सबमॉड्यूल को समायोजित करके फिर सुपर-प्रोजेक्ट को अपडेट करने का काम करता है। दूसरी परियोजना "बाहर से" में काम करती है, जो सुपर-प्रोजेक्ट की प्रतिबद्ध है जो कि सबमॉड्यूल को संशोधित करती है और फिर एक अलग सबमॉडल कमेटी को संदर्भित करने के लिए सुपर-प्रोजेक्ट के इंडेक्स को रीसेट करती है।

भीतर से बाहर

यदि आप पहले से ही जानते हैं कि आप कौन सा कमोडोड्यूल उपयोग करना चाहते हैं, तो सबमॉड्यूल का उपयोग करें, आप जो कमिटमेंट चाहते हैं 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

यह फिक्स्ड-अप सबमॉडल एंट्री करता है।


"आउटसाइड, इन" एप्रोच में, क्या आप इस पर विचार कर सकते हैं कि "ऐसा लग रहा है कि यह सी 5dcc में खराब हो गया है?" क्या उंगलियों कि एक बुरा प्रतिबद्ध के रूप में?
गैरेट अलब्राइट

5
@ ग्रेट: धारणा e47c0aएक ऐसी प्रतिबद्धता है जो स्थानीय रिपॉजिटरी में मौजूद नहीं है sub, फिर भी सुपर-प्रोजेक्ट के subउस बिंदु के लिए। ऐसा शायद इसलिए हुआ क्योंकि e47c0aउनकी कॉपी में किसी और ने बनाई थी sub, उस कमिटमेंट को इंगित करने के लिए अपने सुपर-प्रोजेक्ट को अपडेट किया और सुपर-प्रोजेक्ट को e47c0aकेंद्रीय / साझा रिपॉजिटरी के लिए धक्का दिए बिना धक्का दिया sub। जब हम केंद्रीय / साझा सुपर-प्रोजेक्ट से खींचते हैं तो हमें एक कमिट मिलता है जो हमें इंगित subकरता है e47c0a, लेकिन हम उस कमिट को "देख" नहीं सकते हैं। ce5d37cयह संदिग्ध है क्योंकि, अंतर के आधार पर, इसने पेश किया e47c0a
क्रिस जॉन्सन

यह अभी भी अस्पष्ट है, जहां subमाता-पिता रेपो में रखे गए विशिष्ट हैश है, जो इसे एक सबमॉड्यूल के रूप में रखता है, और क्या यह सीधे subमाता-पिता की पुरानी स्थिति पर भरोसा किए बिना सीधे सीधे वर्तमान HEAD में हेरफेर किया जा सकता है या नहीं। रेपो, जो हमेशा मदद नहीं कर सकता है।
Matanster


187

इसे इस्तेमाल करे:

git submodule sync
git submodule update

2
दुर्भाग्य से मेरे लिए नहीं, हमारे एक सबमॉड्यूल को मुख्य कमांड रिपॉजिटरी द्वारा एक ऐड कमांड के साथ लक्षित किया गया था, अब इसे पूर्ववत करने में परेशानी हो रही है
डैनियल

9
मेरे लिए भी काम किया। हालांकि जानना पसंद करेंगे।
बेन्बग जूल

12
यह बताता है कि ऐसा git submodule syncकरना उन परिदृश्यों में आवश्यक है जहां किसी दिए गए सबमॉड्यूल के लिए रिमोट का URL बदल गया है। हमारे मामले में हमने एक सार्वजनिक रिपो से अपना सबमॉड्यूल जोड़ा था और फिर URL को एक निजी कांटा में बदल दिया - और खुद को इस विशेष अचार में मिला लिया।
Samscam

उदाहरण के लिए: मेरे पास एक रेपो (ए) था जो मेरे गीथूब रेपो (बी) की ओर इशारा करते हुए एक सबमॉड्यूल के साथ स्थापित था। मैंने रेपो ए में एक शाखा बनाई क्योंकि मैं किसी और के जीथूब रेपो में बी को इंगित करना चाहता था। उस के साथ संघर्ष करने और शाखा करने के बाद, मैंने अपने रेपो ए बैक को मास्टर में बदल दिया और रेपो बी @ लोनरे वांग के समाधान के साथ यह समस्या थी।
fbicknel

2
मान लें कि वास्तव में किसी ने भी खराब नहीं किया है (जिस स्थिति में आपको क्रिस जॉन्सन को उत्कृष्ट उत्तर की आवश्यकता होगी) लोनरे वांग ने जवाब दिया कि समस्या को ठीक करना चाहिए, ... अपने सबमॉडल्स के पास अपने स्वयं के सबमॉड्यूल हैं (और समस्या एक सबमॉड्यूल के अंदर है)। उस मामले में आपको उस सबमॉड्यूल में सीडी लगाने की जरूरत है जिसमें समस्या के साथ सबमॉड्यूल हो और उपरोक्त कमांड्स को निष्पादित करें। ध्यान दें कि अपडेट में एक -recursive विकल्प (git सबमॉड्यूल अपडेट --recursive) है, लेकिन सिंक नहीं करता है; आप वास्तव में समस्याग्रस्त उप (उप) मॉड्यूल है सबमॉडल के अंदर 'गिट सबमॉड्यूल सिंक' को मैन्युअल रूप से चलाने के लिए है। यह मेरी समस्या थी;)।
कार्लो वुड

16

इस त्रुटि का मतलब यह हो सकता है कि सबमॉड्यूल में एक कमिटमेंट गायब है। अर्थात्, रिपॉजिटरी (ए) में एक सबमॉड्यूल (बी) है। A, B को लोड करना चाहता है ताकि वह एक निश्चित कमिट (B) की ओर इशारा कर सके। यदि वह कमिट किसी भी तरह से गायब है, तो आपको वह त्रुटि मिल जाएगी। एक बार संभव कारण: प्रतिबद्ध का संदर्भ ए में धकेल दिया गया था, लेकिन वास्तविक प्रतिबद्ध को बी से नहीं धकेल दिया गया था, इसलिए मैं वहां शुरू करूंगा।

कम संभावना है, एक अनुमति समस्या है, और कमिट को खींचा नहीं जा सकता है (यदि आप git + ssh का उपयोग कर रहे हैं)।

सुनिश्चित करें कि सबमॉड्यूल पथ ठीक। Init / config और .gitmodules में ठीक दिखते हैं।

कोशिश करने के लिए एक आखिरी बात - सबमॉड्यूल निर्देशिका के अंदर: git रीसेट HEAD --hard


3
मैंने पहले ही समझाया कि सवाल में ... सवाल खुद ही था कि इसे कैसे हल किया जाए। और यह लगभग दो साल पहले ही सफलतापूर्वक उत्तर दिया जा चुका है ... अनुमतियों का इससे कोई लेना-देना नहीं है।
मौरिसियो शेफ़र

1
आपने कहा था, आपने निश्चित रूप से इसे नहीं समझाया।
डैनियल त्सादोक

मेरा कहना है, यह उत्तर किसी भी मूल्यवान जानकारी को नहीं जोड़ता है, मैं इसे हटा दूंगा।
मौरिसियो शेफ़र

4
"git रीसेट HEAD --hard" ने मेरी भी मदद की ... और कुछ काम नहीं किया। मैंने पिछले समाधानों की भी कोशिश की, कोई पासा नहीं। धन्यवाद!
विर्जिल

1
प्रत्येक धागा ऑनलाइन अपनी छोटी सी दुनिया है। आप जो कहते हैं वह आपका प्रतिनिधित्व करता है - आप उम्मीद नहीं कर सकते हैं कि लोग आपकी टिप्पणियों के संदर्भ में आपकी व्यक्तिगत इतिहास का अध्ययन करने की कोशिश करेंगे, जो आपको सम्मान की इच्छा के लिए अनुदान देता है। दयालु बनें, सम्मानजनक बनें, और आपको लोगों से अपने व्यक्तिगत झगड़ों के बारे में समझने की आवश्यकता नहीं होगी। यदि आप एक तटस्थ संदर्भ से अपनी टिप्पणी पढ़ सकते हैं, तो एक बाहरी व्यक्ति के रूप में, आप मेरी आलोचना को समझेंगे।
18

10

संभावित कारण

यह तब हो सकता है जब:

  1. सबमॉड्यूल (एस) को जगह-जगह संपादित किया गया है
  2. सबमॉड्यूल (एस) प्रतिबद्ध है, जो सबमॉड्यूल के हैश को इंगित करता है
  3. सबमॉड्यूल (एस) को धक्का नहीं दिया

जैसे कुछ हुआ है:

$ cd submodule
$ emacs my_source_file  # edit some file(s)
$ git commit -am "Making some changes but will forget to push!"

इस बिंदु पर सबमॉड्यूल को धक्का देना चाहिए।

$ cd .. # back to parent repository
$ git commit -am "updates to parent repository"
$ git push origin master

नतीजतन, लापता कमिट्स संभवतः दूरस्थ उपयोगकर्ता द्वारा नहीं पाए जा सकते क्योंकि वे अभी भी स्थानीय डिस्क पर हैं।

समाधान

उस व्यक्ति को सूचित करें जिसने पुश करने के लिए सबमॉड्यूल को संशोधित किया है, अर्थात

$ cd submodule
$ git push

6

जब मैंने किया तो मुझे यह त्रुटि मिली:

$ git submodule update --init --depth 1

लेकिन मूल परियोजना में प्रतिबद्ध पहले की ओर इशारा कर रहा था।

सबमॉड्यूल फ़ोल्डर को हटाना और चालू करना:

$ git submodule update --init

समस्या का समाधान नहीं किया। मैंने रेपो को हटा दिया और गहराई के झंडे के बिना फिर से कोशिश की और यह काम किया।

यह त्रुटि Ubuntu 16.04 git 2.7.4 में होती है, लेकिन Ubuntu 18.04 git 2.17 पर नहीं, TODO सटीक फ़िक्सिंग कमिट या संस्करण खोजता है।


मेरी टीम ने तब से हमारे कोड तरीके से सबमॉडल्स को छोड़ दिया है, बहुत परेशानी वाली बात है
प्लेटो

1
आपका विकल्प क्या था?
nuzzolilo

@nuzzolilo हमने username/repo#shapackage.json में जोड़ा है, एक बहुत अधिक लचीला विकल्प आपके सिस्टम को डॉकटर कंटेनरों के सेट के साथ व्यवस्थित करना है
प्लेटो

3
यह कितना कष्टप्रद है। --depth=1रेपो इतिहास की जरूरत नहीं है जब मैं इतना बैंडविड्थ बचाता है। अगर किसी को कभी पता चलता है या पता है कि ऐसा क्यों हो रहा है तो मुझे जानना अच्छा लगेगा।
०३६_

@ i336_ हालांकि मैं यह नहीं समझा सकता कि, मैंने एक सीमेक हेल्पर लिखा है जो यहां समस्या को कम करने में मदद करता है: github.com/LMMS/lmms/blob/… । यह एक deinitदृष्टिकोण का उपयोग करता है जो समय के बहुमत को समस्या को ठीक करता है। जब एक बिल्ड सिस्टम के साथ बंडल किया जाता है, तो एंड-यूज़र बस बिल्ड सिस्टम को सबमॉड्यूल लाने दे सकता है और टूटी हुई recursiveकमांड को पूरी तरह से खोद सकता है। अभी भी ऐसे परिदृश्य हैं जहां यह टूट जाता है, जैसे कि सबमॉड्यूल ने एक बल धक्का दिया है और पूरी तरह से प्रतिबद्ध मिटा दिया है।
tresf

5

यह तब भी हो सकता है जब आपके पास एक उप-संग्रह की ओर इशारा करते हुए एक भंडार होता है जिसे विद्रोह किया गया था और दी गई प्रतिबद्धता "चली गई" है। हालांकि यह प्रतिबद्ध अभी भी दूरस्थ भंडार में हो सकता है, यह एक शाखा में नहीं है। यदि आप एक नई शाखा नहीं बना सकते हैं (जैसे कि आपका भंडार नहीं), तो आप नई परियोजना को इंगित करने के लिए सुपर प्रोजेक्ट को अपडेट करने के लिए अटक गए हैं। वैकल्पिक रूप से आप सबमॉडल्स की अपनी एक कॉपी को कहीं और धकेल सकते हैं और फिर उस रिपॉजिटरी को इंगित करने के लिए सुपर-प्रोजेक्ट को अपडेट कर सकते हैं।


5

आपकी शाखा अद्यतित नहीं हो सकती है, एक सरल समाधान है लेकिन प्रयास करें git fetch


2

यह उत्तर SourceTree के उपयोगकर्ताओं के लिए सीमित टर्मिनल git अनुभव के साथ है।

गिट प्रोजेक्ट (सुपर-प्रोजेक्ट) के भीतर से समस्याग्रस्त सबमॉड्यूल खोलें।

प्राप्त करें और सुनिश्चित करें कि 'सभी टैग पाएं' की जाँच की गई है।

Rebase अपने Git प्रोजेक्ट को खींचें।

यह हल करेगा 'संदर्भ एक पेड़ नहीं है' समस्या दस में से 9 बार। 1 बार ऐसा नहीं होगा, शीर्ष उत्तर द्वारा वर्णित के रूप में एक टर्मिनल फिक्स है।


1

आपका सबमॉड्यूल इतिहास वैसे भी सबमॉड्यूल गिट में सुरक्षित रूप से संरक्षित है।

तो, क्यों नहीं बस सबमॉड्यूल को हटा दें और इसे फिर से जोड़ें?

अन्यथा, क्या आपने मैन्युअल रूप से HEADया refs/master/headसबमॉड्यूल के भीतर संपादन करने का प्रयास किया था.git


1
यह काम नहीं करेगा, क्योंकि कहीं न कहीं 2d7cfbd09fc96c04c4c41148d44ed7778add6b43 का संदर्भ है, जो केवल स्थानीय रेपो में कहीं और है, लेकिन प्रकाशित नहीं किया गया
मॉरिशियो शेफ़र

1

बस सुनिश्चित करने के लिए, अपने gitबायनेरिज़ को अपडेट करने का प्रयास करें ।

Windows के लिए GitHub में वह संस्करण है git version 1.8.4.msysgit.0जो मेरे मामले में समस्या थी। अद्यतन करने से इसे हल किया गया।


1

मेरे मामले में, ऊपर दिए गए उत्तर में से कोई भी समस्या को हल नहीं करता है, भले ही वे अच्छे उत्तर हों। इसलिए मैं अपना समाधान पोस्ट करता हूं (मेरे मामले में दो ग्राहक हैं, ग्राहक ए और बी):

  1. सबमॉड्यूल की डायर पर जाएं:

    cd sub
    
  2. मास्टर करने के लिए चेकआउट:

    git checkout master
    
  3. रिड्यूस एक कमिट कोड के लिए जिसे दोनों क्लाइंट देख सकते हैं

  4. माता-पिता की पीठ पर वापस जाएं:

  5. स्वामी के प्रति

  6. अन्य ग्राहक के लिए परिवर्तन ,rebaseफिर से करते हैं ।

  7. अंत में अब यह ठीक काम करता है! हो सकता है कि एक-दो कमिट खो जाएं लेकिन यह काम करता है।

  8. FYI करें, अपने .git/modulesसबमॉडल को हटाने की कोशिश न करें, यह वहीं रहेगा और जब तक स्थानीय एक प्रतिक्रिया नहीं करता तब तक इस सबमॉडल को दोबारा नहीं पढ़ सकते।


1

सबमोडुले के सिर के साथ गिट रेपो को सिंक करने के लिए, वास्तव में जो आप चाहते हैं, उसके मामले में, मैंने पाया कि सबमॉड्यूल को हटाना और फिर इसे पढ़ना इतिहास के साथ छेड़छाड़ से बचा जाता है। दुर्भाग्य से एक सबमॉडल को हटाने के लिए एक सिंगल गिट कमांड के बजाय हैकिंग की आवश्यकता होती है, लेकिन यह उल्लेखनीय है।

Https://gist.github.com/kyleturner/1563153 से प्रेरित सबमॉडल हटाने के लिए मैंने जो कदम उठाए, वे निम्नलिखित हैं :

  1. रन git rm - कैश किया गया
  2. .Gitmodules फ़ाइल से संबंधित लाइनें हटाएं।
  3. .It / config से संबंधित अनुभाग हटाएं।
  4. अब अनटैक की गई सबमॉड्यूल फ़ाइलों को हटा दें।
  5. निर्देशिका निकालें।

फिर, यह उपयोगी हो सकता है यदि आप चाहते हैं कि सबमॉडल के सिर को फिर से इंगित किया जाए, और आप सबमॉड्यूल की स्थानीय प्रतिलिपि को बरकरार रखने की आवश्यकता के द्वारा चीजों को जटिल नहीं करते हैं। यह मानता है कि आपके पास जहाँ कहीं भी इसका मूल है, वहां सबमॉडल को "रेपो" के रूप में "राइट" किया जाता है, और आप इसे सबमॉडल के रूप में शामिल करना चाहते हैं।

नोट: हमेशा इस तरह की जोड़-तोड़ या सरल कमिट या पुश से परे किसी भी git कमांड में उलझने से पहले अपने प्रोजेक्ट की पूरी कॉपी बना लें। मैं सलाह दूंगा कि अन्य सभी उत्तरों के साथ, और एक सामान्य गिट दिशानिर्देश के रूप में।


1

बस इस समस्या पर ठोकर खाई, और इनमें से किसी भी समाधान ने मेरे लिए काम नहीं किया। मेरी समस्या का हल जो निकला वह वास्तव में बहुत सरल है: Git को अपग्रेड करें। मेरा 1.7.1 था, और मैंने इसे 2.16.1 (नवीनतम) में अपग्रेड करने के बाद, समस्या ट्रेस के बिना चली गई! मुझे लगता है कि मैं इसे यहाँ छोड़ रहा हूँ, आशा है कि यह किसी की मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.