Git सबमॉड्यूल जोड़ें: "git निर्देशिका स्थानीय रूप से पाई जाती है" समस्या


191

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

अपने ट्रावेल भंडार में, मैंने पहले से ही एक सबमॉड्यूल के रूप में मेरा एक प्रोजेक्ट जोड़ा tools/libft: मैं इस सबमॉड्यूल को विकसित करने, पुश करने और इसे खींचने में सक्षम हूं।

लेकिन जब मैं अपने सर्वर पर एक और सबमॉड्यूल (नाम fdf, fdf.it से) जोड़ने की कोशिश करता हूं, तो मुझे निम्नलिखित चीजें मिलती हैं:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

'Projets / fdf' के लिए एक git डायरेक्टरी स्थानीय रूप से दूरस्थ (s) के साथ पाई जाती है: मूल ssh: //git@XXX.XXX.XXX.XXX: XXXXX / ऑप्ट / git / fdf.git यदि आप इस स्थानीय git का पुन: उपयोग करना चाहते हैं निर्देशिका से ssh फिर से क्लोनिंग के बजाय: //XXX.XXX.XXX.XXX: XXXXX / ऑप्ट / git / fdf.git '--force' विकल्प का उपयोग करें। यदि स्थानीय गिट निर्देशिका सही रेपो नहीं है या आप अनिश्चित हैं कि इसका क्या अर्थ है -'name 'विकल्प के साथ कोई अन्य नाम चुनें।

वास्तव में कोई उपनिर्देशिका नहीं है projets/

मैं किसी अन्य थ्रेड पर पढ़ता हूं जिसे मुझे git submodule sync.गितमॉड्यूल फ़ाइल का उपयोग करना या संपादित करना चाहिए जिसमें मेरे सबमॉड्यूल की मूल रिपॉजिटरी का URL बदल सकता है।

लेकिन मेरी .itmodules फ़ाइल में केवल मेरे पहले सबमॉड्यूल (उपकरण / कामचलाऊ) के बारे में जानकारी है, न कि प्रोजेट्स / एफडीएफ के बारे में:

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/libft.git

एक फ्रांसीसी छात्र के रूप में मैं अपने पास मौजूद अंग्रेजी दस्तावेज़ में कुछ याद कर सकता था, लेकिन मैंने खोजा और मुझे वास्तव में समझ में नहीं आया कि मुझे यह मुद्दा क्यों मिला।

मुझे खुशी होगी अगर मुझे कोई समाधान मिलेगा लेकिन बस एक स्पष्टीकरण भी मददगार होगा।


एक छोटा सुधार: यह 'रिपॉजिटरी' है, 'डिपॉजिटरी' नहीं। वास्तव में एक जवाब नहीं है, लेकिन अगर परियोजनाएं एक-दूसरे से स्वतंत्र हैं, तो प्रत्येक परियोजना के लिए सबडोड्यूल्स के बजाय अपना स्वयं का रेपो होना बेहतर होगा।
jcm

धन्यवाद, मैंने सही किया। मुझे पता है लेकिन मैं अपने सभी काम एक ही रेपो में अलग-अलग परियोजनाओं के रूप में इकट्ठा करना चाहूंगा। यह मेरे पूरे काम को अद्यतन रखने के लिए एक विकल्प है जब मैं अपने स्कूल से घर जाता हूं और इसके विपरीत (और इन उपकरणों का उपयोग करने का तरीका जानने के लिए, मैं उत्सुक हूं;))
vmonteco

खैर, जिज्ञासा हमेशा एक अच्छा कारण है! :) यह अजीब है। क्या आप वाकई इससे पहले सबमॉड्यूल नहीं जोड़ पाए हैं?
jcm

Travail / में नहीं है, और मेरे पास ~ / में fdf.git क्लोन करने के लिए कोई प्रोब्लम नहीं है। Travail में / मुझे fdf के कोई निशान नहीं मिले। बस कामवासना: /
vmonteco

5
ओह रुको, मैंने अंदर देखा /Travail/.git/modules/projets/और मुझे एक fdfनिर्देशिका मिली । यह काम करने वाले पेड़ में नहीं बल्कि पुराने कामों में लगता है। क्या यह मुद्दा उत्पन्न कर सकता है?
vmonteco

जवाबों:


440

मैं इस SO पोस्ट पर आया था कि एक सबमॉडल को एक सबमॉड्यूल के रूप में उसी पथ के साथ जोड़ने की कोशिश कर रहा था जिसे मैंने हाल ही में हटा दिया था।

यह वही है जो अंततः मेरे लिए काम करता है ( इस लेख ने बहुत मदद की ):

यदि आप पहले से ही git rm --cached path_to_submodule(कोई अनुगामी स्लैश) नहीं चला है और साथ ही rm -rf path_to_submodule, ऐसा करते हैं!

फिर:

  1. .gitmodulesफ़ाइल से संबंधित लाइनें हटाएं । इन्हें हटाएं:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. .It / config से संबंधित अनुभाग हटाएं। इन्हें हटाएं:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

फिर, आप अंत में कर सकते हैं:

git submodule add https://github.com/path_to_submodule


47
यह वास्तव में मददगार था, क्योंकि मुझे काम करने के अलावा और कुछ नहीं मिला। अन्य सुझावों से महत्वपूर्ण अंतर आपका चरण # 3 था। धन्यवाद!
AndroidDev

8
चरण 2 और 3 मेरे लिए आवश्यक थे।
U007D

8
चरण 3 मेरे लिए आवश्यक था, लेकिन, सबमॉडल वहां भी क्यों मौजूद है?
Crt

1
मेरे लिए, मैंने चरण 1 और 2 को छोड़ दिया (जिसमें पहले से ही इसकी सही सेटिंग थी) और चरण 3 ने मेरे लिए इसे निर्धारित किया। (मैंने पहले ही चरण git rmऔर rm -rfचरणों का आरंभ कर दिया था ।)
रॉक ली

2
यहां तक ​​कि चरण 3 ने भी मेरे लिए काम नहीं किया। मेरे पास केवल एक सबमॉड्यूल था इसलिए मैंने पूरा डिलीट कर दिया .git/modulesऔर वह काम करना बंद कर दिया।
ACH

47

मैंने jbmilgrom के समाधान की कोशिश की, विशेष रूप से मैंने कोशिश की git rm --cacheऔर यह मेरे लिए काम नहीं किया क्योंकि निर्देशिका / सबमॉड्यूल नहीं था। मेरे लिए क्या काम था:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

मैं इस कोशिश कर के बाद किया था --forceभीतर git submoduleआदेश और rmसभी अन्य निर्देशिकाओं, धक्का आदि में महारत हासिल करने ... निर्देशिका मौजूद नहीं था और कैश के लिए कोई वजह नहीं थी। इसमें वह मोड़ आता .git/modulesहै जहां यह त्रुटि पड़ी थी।


15

आपने 'projets/fdf'डिस्क से अपना डिलीट कर दिया होगा , लेकिन आपके Git रिपॉजिटरी में अभी भी यह है। git rm -rf projets/fdfइसे Git से हटाने के लिए उपयोग करें , फिर परिवर्तन करें। उसके बाद आप इस फ़ोल्डर को सबमॉड्यूल के रूप में जोड़ पाएंगे।


यह काम किया :) धन्यवाद। मुझे लगता है कि मैंने वास्तव में यह गलती की है।
vmonteco

21
जब मैं ऐसा करता हूं तो मुझे बताया जाता है कि निर्देशिका मौजूद नहीं है। लगता है कि यह दोनों मौजूद है और नहीं: /
नाथन हॉर्बी

41
@ tom-mcfarlin अंत में, .itmodule और इंजील / मॉड्यूल से एक फ़ोल्डर को हटा दिया गया, फिर इसने मुझे एक नया सबमॉड्यूल जोड़ने दिया। शायद ऐसा करने का बेहतर तरीका है, लेकिन मैं समय से बाहर चल रहा था। यदि आप इस तरह से जाने वाले हैं, तो मैं आपको एक अच्छा बैकअप बनाने की सलाह देता हूं और कृपया मुझे दोष न दें, अगर यह आपके लिए गलत है। सौभाग्य।
स्पार्कलॉस

5
धन्यवाद, मैंने .git / मॉड्यूल से फ़ोल्डर को हटाने के लिए एक और पोस्ट पर पाया और मेरे लिए काम किया। समझ में आता है कि त्रुटि के कारण संघर्ष क्या था ... मैं बस उस फ़ोल्डर से अनजान था
टॉम मैकफर्लिन

10
@NathanHornby @Sparklos @TomMcFarlin - git के अधिक हाल के संस्करणों में, आप पाएंगे कि git-submodule एक निर्देशिका को .git फ़ोल्डर में जोड़ता है। उदाहरण के लिए, यदि आप निर्देशिका में हैं /tmp/repo, तो चलाएं git submodule add ../otherrepo.git, फिर आप देखेंगे कि /tmp/repo/.git/modules/otherrepoफ़ोल्डर मौजूद है। यही समस्या मेरे लिए थी। मैंने .git से उस फ़ोल्डर को मैन्युअल रूप से हटा दिया है, और सब कुछ काम किया है।
अलेक्जेंडर बर्ड

13

यदि आपने पहले से ही सबमॉड्यूल डायरेक्टरी को डिलीट कर दिया है, जैसे मैंने किया, तो jbmilgrom के बाकी निर्देशों का पालन करें। कुंजी है, rm -rf .git/modules/path_to_submoduleलेकिन आगे बढ़ो और पहले अपने पूरे माता-पिता रेपो निर्देशिका का बैकअप लें

यदि आपके पास केवल एक सबमॉड्यूल था तो बस हटा दें .gitmodules


2

ये दोनों आज्ञाएँ मेरे लिए काम करती हैं।

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf

यह। ऐसा लगता है कि सबमॉडल्स के निर्माण के दो तरीके हैं। उनमें से एक में, सबफ़ोल्डर में केवल एक .ITI फ़ाइल होगी जो केवल सुपरप्रोजेक्ट में एक निर्देशिका को इंगित करती है, जिसके साथ शुरू होता है .git/modules/। इसमें एक फ़ोल्डर है जो सबमॉड्यूल के लिए भंडार को संग्रहीत करता है। उस रिपॉजिटरी को हटाने से मेरे लिए समस्या ठीक हो गई, जबकि स्वीकृत जवाब नहीं था।
विलियम रंडोकुन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.