कोई सबमॉड्यूल मैपिंग नहीं है।


335

मेरे पास एक परियोजना है जिसमें एक सबमॉड्यूल है lib/three20

मेरी .gitmoduleफ़ाइल इस तरह दिखती है:

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git

मैंने इसे अतीत में त्रुटियों के बिना क्लोन git submodule initकिया है , ( इसके बाद git submodule update) और यह थोड़ी देर के लिए काम कर रहा है।

मैंने इसे एक नई मशीन से जोड़ने की कोशिश की, और अब मुझे यह त्रुटि मिल रही है git submodule init:

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'

वह रास्ता Xcode में सिर्फ एक खाली फ़ोल्डर है जिसका उपयोग मैं अन्य निर्देशिका से परियोजनाओं को घर करने के लिए करता हूं। यह .gitmodulesफ़ाइल का हिस्सा नहीं है , इसलिए मैं नहीं देखता कि यह रास्ता कहाँ से मिल रहा है।

कोई विचार?


1
ऐसा लगता है कि आप एक gitlink के रूप में उस रास्ते को जोड़ने में कामयाब रहे हैं - एक सबमॉड्यूल एक gitlink और .gitmoddules और .git / config फ़ाइलों में प्रविष्टियों का एक संयोजन है। इस बारे में हाल ही में एक प्रश्न था; इसे खोजने की कोशिश ...
कास्केबेल


@ जेफ्रोमी - मुझे .gitफ़ोल्डर में कहीं भी उस रास्ते का कोई उल्लेख नहीं मिला । ऐसा करने से grep -r "Classes/Support/Three20" *.*कोई नतीजा नहीं
निकलता

2
@Ben: .git फ़ोल्डर में आप उस टेक्स्ट को क्यों खोज रहे हैं ? यह नहीं है कि कैसे गिट सामग्री संग्रहीत करता है। यदि आप वास्तव में यह सत्यापित करना चाहते हैं कि यह क्या सोचता है, तो कोशिश करें git ls-tree HEAD Classes/Support, और यदि यह कहता है कि थ्री 20 एक कमिट है, तो वहां एक गिटलिंक है। यदि वहाँ है, तो ऊपर दिए गए प्रश्न VonC से उचित निर्देशों का पालन करें या तो इसे एक उचित सबमॉड्यूल में बदल दें या इसे नियमित रूप से ट्रैक की गई सामग्री में बदल दें।
Cascabel

2
भविष्य के आगंतुकों के लिए, यदि आपका मुद्दा किसी हटाए गए सबमॉड्यूल और हेरोको में त्रुटि से जुड़ा हुआ है, तो github.com/heroku/heroku-repo और heroku repo से हरोकू-रेपो स्थापित करें : रीसेट -a appname
फैडोमायर

जवाबों:


310

Rajibchowdhury के उत्तर ( उत्कीर्ण ) के बाद , कमांड का उपयोग करनेgit rm की सलाह दी जाती है जो सूचकांक में विशेष प्रविष्टि को हटाने के लिए है जो एक सबमॉड्यूल (एक विशेष मोड के साथ एक 'फ़ोल्डर) को दर्शाता है160000

यदि उस विशेष प्रविष्टि पथ को मूल प्रश्न में .gitmodule(जैसे '' Classes/Support/Three20) में संदर्भित नहीं किया गया है , तो आपको " पथ के लिए कोई भी सबमॉड्यूल मैपिंग नहीं मिली.gitmodules " त्रुटि संदेश से बचने के लिए इसे हटाने की आवश्यकता है ।

आप अनुक्रमणिका में सभी प्रविष्टियों की जांच कर सकते हैं जो सबमॉड्यूल का संदर्भ दे रही हैं:

git ls-files --stage | grep 160000

पिछला उत्तर (नवंबर 2010)

यह संभव है कि आपने अपने प्रारंभिक सबमॉडल को सही ढंग से घोषित न किया हो (अर्थात किसी भी पूंछ के बिना / 'अंत में, जैसा कि मेरे पुराने उत्तर में वर्णित है , भले ही आपके .gitmoduleपास रास्ते हैं जो इसमें ठीक दिखते हैं)।

यह सूत्र उल्लेख करता है:

ताजा क्लोन से 'गिट सबमॉड्यूल इनिट' चलाते समय क्या आपको वही त्रुटि मिलती है?
यदि हां, तो आपके पास कुछ गलत है।

यदि आपके पास .gitmodules.it / config में सबमॉड्यूल्स के लिए कोई सबमॉड्यूल , डिलीट , और कोई संदर्भ नहीं है और सुनिश्चित करें कि पिकिमल डायर में इसकी कोई डायर नहीं है .git
यदि वह समस्या को ठीक करता है, तो अपनी क्रूज़ वर्किंग कॉपी पर चेक इन करें और वही करें।

जाहिर है, अपनी मुख्य .gitmodulesफ़ाइल को न हटाएं , बल्कि .gitmodulesअपने काम के पेड़ की अन्य अतिरिक्त फ़ाइलों को देखें।


फिर भी "गलत submodule प्रारंभ" के विषय में, Jefromi submodules जो वास्तव में gitlinks हैं उल्लेख है।

देखें कि कैसे अनट्रैक की गई सामग्री को ट्रैक करें? इस तरह की डायरेक्टरी को वास्तविक सबमॉड्यूल में बदलने के लिए।


5
मेरे पास कोई .gitmodules फ़ाइल नहीं है और मुझे यह संदेश अभी भी हर चेकआउट / पुल पर मिल रहा है। मैं क्या करूं?
अनारोनबूमन

2
यहाँ मेरा जवाब मिला: stackoverflow.com/questions/14720034/…
aaronbauman

4
@ARonbauman हां, आपको गिटिंक को हटाने की आवश्यकता है, इसलिए git rm xxx(अनुगामी स्लैश के बिना) git rm --cachedआपको इसे सूचकांक से हटाते समय डिस्क पर रखने की अनुमति देता है।
वॉनक

Git ls-files --stage चलाने के बाद | grep 16000, मुझे कुछ प्रविष्टियाँ मिली हैं। मैं इन्हें कैसे निकालूं?
जॉन माइक

1
@JohnMike यदि आप एक है .gitmoduleउन प्रविष्टियों को संदर्भित, तो stackoverflow.com/a/16162000/6309 । यदि नहीं, तो एक सरल git rm afolder(कोई अनुगामी / स्लैश)
VONC

412

जब पथ 'OtherLibrary / MKStore' के लिए .itmodules में कोई सबमॉड्यूल मैपिंग नहीं मिली

$ git submodule update --init

मुझे नहीं पता कि त्रुटि क्यों होती है। एक मिनट बिताने के बाद और स्टैकओवरफ्लो में जवाब मिला।

$ git rm --cached OtherLibrary/MKStore

और फिर सबमॉड्यूल को फिर से अपडेट करें। यह ठीक काम कर रहा है।

http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules


2
// लिंक: // Git द्वारा लिंक: यह https बदलने के लिए .gitmodules फ़ाइल संपादित करने के बाद मेरे लिए काम किया
Diwann

1
इसने मेरे लिए भी काम किया, लेकिन मुझे यह सुनिश्चित करना था कि सबमॉडल पथ के अंत में कोई स्लैश न हो।
पीटर

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

रेपो की रूट डायरेक्टरी में इसे चलाना था, तो सब कुछ ठीक रहा। धन्यवाद!
पावडर

Rm के लिए बहुत बहुत धन्यवाद कमांड के । मैंने git submodule sync | grep "mapping found"फिर फोन git rmकिया git submodule sync। समस्या दूर हो गई!
नौ ९फाइव

24

जब मैं सामान करने के लिए SourceTree का उपयोग करता हूं, तो यह इस संदेश को थूक देगा।
संदेश जो मुझे मिला:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule update --init --recursive
No submodule mapping found in .gitmodules for path 'SampleProject/SampleProject'
Completed with errors, see above

मेरा परिदृश्य है कि मैं प्रॉजेक्ट डायरेक्टरी में .गित फ़ोल्डर को गलत बता रहा हूं ।
SourceTree ने इस फ़ोल्डर को गिट सबमॉड्यूल माना है, लेकिन वास्तव में ऐसा नहीं है।

मेरा समाधान इसे हटाने के लिए कमांड लाइन का उपयोग है।

$ git rm -r SampleProject --cached
$ git commit -m "clean up folders"

कचरे को git में निकालें और उसे साफ रखें।


17

मैंने इस मुद्दे को मेरे लिए हल कर दिया। शुरू में मैंने ऐसा करने की कोशिश की:

git submodule add --branch master [URL] [PATH_TO_SUBMODULE]

जैसा कि यह पता चला है - Thebranch विकल्प के विनिर्देश का उपयोग नहीं किया जाना चाहिए यदि आप मास्टर शाखा को क्लोन करना चाहते हैं । यह इस त्रुटि को फेंकता है:

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'

हर बार जब आप एक करने की कोशिश करते हैं

git submodule sync

यह त्रुटि डाली जाएगी:

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'

और .gitmodules में आवश्यक लाइनें कभी नहीं जोड़ी जाती हैं।

तो मेरे लिए समाधान यह था:

git submodule add [URL] [PATH_TO_SUBMODULE]

9

मैंने अपने रेपो के एक नए चेकआउट पर "गिट सबमॉडल इनिट" को आजमाने के बाद बस इस त्रुटि को मारा। शुरू में मैंने गलत मामले के साथ मॉड्यूल उप-फ़ोल्डर को निर्दिष्ट किया था। चूंकि मैं मैक पर केस-संवेदी फाइलसिस्टम (हुर) के साथ असफल रहा था। उदाहरण के लिए:

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

सफल होता है लेकिन परेशानी यह है कि डिस्क पर पथ है

Myapp/Resources/Project

मुझे समझ में नहीं आता है कि git मॉड्यूल को गलत फ़ोल्डर में क्यों रोक रहा है (मेरे आदेश में गलत मामले की अनदेखी) लेकिन फिर बाद के आदेशों के साथ सही तरीके से (विफल होकर) काम कर रहा है।


यहाँ (विंडोज) समान है, हालांकि मुझे समझ नहीं आता कि क्यों। आपको चेकआउट के लिए अलग आवरण के साथ एक फ़ोल्डर निर्दिष्ट करने के लिए स्वतंत्र होना चाहिए और यह मॉड्यूल का नाम नहीं बदलना चाहिए।
जेवियर पोइनास

6

बस git rm subdir ठीक रहेगा। जो उप सूचकांक को एक सूचकांक के रूप में हटा देगा।


5

बस यह समस्या थी। थोड़ी देर के लिए मैंने रास्ता निकालने के बारे में सलाह की कोशिश की, रास्ते को हटाने, गिट को हटाने, .itmodules को हटाने, .it / config से प्रविष्टि को हटाने, सबमॉड्यूल को वापस जोड़ने, फिर कमिट करने और परिवर्तन को आगे बढ़ाने के लिए। यह हैरान करने वाला था क्योंकि यह कोई परिवर्तन नहीं लग रहा था जब मैंने "गिट कमिट-ए" किया था, इसलिए मैंने सिर्फ हटाने को धक्का देने की कोशिश की, फिर इसे बदलाव की तरह देखने के लिए रीडडिशन को धक्का दिया।

थोड़ी देर के बाद मैंने दुर्घटना से देखा कि सब कुछ हटाने के बाद, अगर मैंने "गिट सबमॉड्यूल अपडेट - इनिट" चलाया, तो इसमें एक विशिष्ट नाम के बारे में संदेश था कि जीआईटी का अब कोई संदर्भ नहीं होना चाहिए: रिपॉजिटरी का नाम सबमॉड्यूल लिंकिंग कर रहा था, पथ का नाम नहीं था जो इसे जाँच रहा था। ग्रीपिंग ने बताया कि यह संदर्भ .it / index में था। इसलिए मैंने "git rm - cached repo-name" चलाया और फिर मॉड्यूल को पढ़ा। जब मैंने इस बार प्रतिबद्ध किया, तो प्रतिबद्ध संदेश में एक परिवर्तन शामिल था जो इस अप्रत्याशित वस्तु को हटा रहा था। इसके बाद यह ठीक काम करता है।

यकीन नहीं हुआ कि क्या हुआ, मैं अनुमान लगा रहा हूं कि किसी ने गिट सबमॉड्यूल कमांड का दुरुपयोग किया है, शायद तर्कों को उलट रहा है। मुझे भी हो सकता था ... आशा है कि यह किसी की मदद करता है!


5

फ़ाइल .gitmodules में , मैंने स्ट्रिंग बदल दी

"path = thirdsrc\boost" 

साथ में

"path = thirdsrc/boost", 

और यह हल हो गया! - -


धन्यवाद ने मेरी समस्या ठीक कर दी। शायद खिड़कियों में होने वाली समस्या। मेरे मामले में पथ "पथ = कुछ \\ फ़ोल्डर" था
रूजबेह जी

यह मेरे लिए तब काम करता है जब मैं खिड़कियों पर गिट के बजाय गिट-लाइट्स का उपयोग करते समय त्रुटि करता हूं। (मानक गिट का उपयोग करते समय कोई त्रुटि नहीं हुई)
0

5

फ़ोल्डर मैपिंग फ़ोल्डर में पाया जा सकता है .git/modules(प्रत्येक में configइसके संदर्भ में फ़ाइल है worktree), इसलिए सुनिश्चित करें कि ये फ़ोल्डर कॉन्फ़िगरेशन में .gitmodulesऔर इसके अनुरूप हैं.git/config

तो .gitmodulesसही रास्ता है:

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git

और में .git/modules/<path>/configमें [core]अनुभाग आप अपने को सही रास्ते है <path>, जैसे

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>

यदि सही फ़ोल्डर .git/modulesगायब है, तो आप अपने सबमॉड्यूल डायर पर जाएं और कोशिश करें git reset HEAD --hardया git checkout master -f। यदि यह मदद नहीं करेगा, तो आप शायद टूटे हुए सबमॉड्यूल के सभी संदर्भों को हटा दें और इसे फिर से जोड़ दें, फिर देखें: एक गिट सबमॉडल का नाम बदलें


3

परिदृश्य: निर्देशिका dirA-xxx से उप निर्देशिका को एक और निर्देशिका dirB-xxx में बदलना

  1. dirB-xxx को dirA-xxx स्थानांतरित करें
  2. dirB-xxx का उपयोग करने के लिए .gitmodules में प्रविष्टि संशोधित करें
  3. dirB-xxx का उपयोग करने के लिए .git / config में प्रवेश संशोधित करें
  4. सही निर्देशिका को प्रतिबिंबित करने के लिए .git / मॉड्यूल / dirA-xxx / config संशोधित करें
  5. सही निर्देशिका को प्रतिबिंबित करने के लिए dirA-xxx / .git संशोधित करें
  6. Daud git submodule status

    अगर रिटर्न एरर: पथ dirA-xxx के लिए .itmodules में कोई सबमॉड्यूल मैपिंग नहीं मिली। इसका कारण dirA-xxx मौजूद नहीं है, फिर भी इसे git द्वारा ट्रैक किया जाता है। इसके द्वारा git इंडेक्स अपडेट करें:git rm --cached dirA-xxx

    के साथ प्रयास करें git submodule foreach git pull। मैं गिट सबमॉडल संरचना के वास्तविक अध्ययन से नहीं गुजरा, इसलिए उपरोक्त कदम कुछ तोड़ सकते हैं। फिर भी, उपरोक्त चरणों से गुजरना, इस समय चीजें अच्छी लगती हैं। यदि आपके पास किसी चीज को प्राप्त करने के लिए कोई अंतर्दृष्टि या उचित कदम है, तो इसे यहां साझा करें। :)


1

आमतौर पर, git प्रोजेक्ट की रूट डायरेक्टरी (.git /) में एक छिपी निर्देशिका बनाता है

जब आप CMS पर काम कर रहे होते हैं, तो इसका संभवतया आप मॉड्यूल / प्लगइन्स को स्थापित करते हैं। विशिष्ट मॉड्यूल / प्लगइन के लिए git के मेटाडेटा के साथ .git / निर्देशिका

त्वरित समाधान सभी .IT निर्देशिकाओं को खोजने और केवल अपने रूट गिट मेटाडेटा निर्देशिका रखने के लिए है। यदि आप ऐसा करते हैं, तो गिट उन मॉड्यूलों को प्रोजेक्ट सबमॉड्यूल्स के रूप में नहीं मानेंगे।


1

मेरी .gitmodulesतरफ देखने के बाद , यह पता चला कि मेरे पास एक बड़ा पत्र था जहां मुझे नहीं होना चाहिए। तो ध्यान रखें, .gitmodulesनिर्देशिका संवेदनशील हैं


1
क्या आप सुनिश्चित हैं कि आपको .gitmodulesइसके बजाय मतलब नहीं था ?
सेरही खलीक

0

मेरे मामले में त्रुटि संभवतः अलग-अलग सबमॉड्यूल्स कॉन्फ़िगरेशन के साथ दो शाखाओं पर .gitmodules के बीच एक गलत मर्ज के कारण थी। इस मंच से सुझाव लेने के बाद, मैंने समस्या संपादन को मैन्युअल रूप से .gitmodules फ़ाइल को हल किया, लापता सबमॉड्यूल प्रविष्टि को जोड़ना बहुत आसान है। उसके बाद, कमांड git सबमॉड्यूल अपडेट --init --recursive ने बिना किसी समस्या के काम किया।


0

हमारे लिए समस्या यह थी कि डुप्लिकेट सबमॉडल एंट्रीज को .gitmodules (शायद एक मर्ज से) में जोड़ा गया था। हमने .itmodules के बारे में शिकायत किए गए पथ git की खोज की और दो समान खंडों को पाया। किसी एक अनुभाग को हटाने से हमारे लिए समस्या हल हो गई।

इसके लायक क्या है, इसके लिए git 1.7.1 ने "नो सबमॉड्यूल मैपिंग" त्रुटि दी, लेकिन git 2.13.0 की देखभाल नहीं की।

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