Git: fatal: Pathspec सबमॉड्यूल में है


146

मैं इस गाइड के अनुसार ट्रैविसी को अपने हकील स्थिर साइट को स्वचालित रूप से तैनात करने की कोशिश कर रहा हूं ।

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

मैं समस्या के बिना साइट का निर्माण करता हूं, फिर cd_साइट डायरेक्टरी में। हालाँकि, जब मैं git add ./*नई जेनरेट की गई HTML फ़ाइलों की कोशिश करता हूं, तो मुझे निम्न त्रुटि मिलती है:

fatal: Pathspec './about.html' is in submodule '_site'

जब मैं कोशिश करता हूं git add --all, मुझे यह त्रुटि मिलती है:

git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len <= item->len && item->prefix <= item->len' failed.

/home/travis/build.sh: line 245: 1566 Aborted git add --all

यह क्या कारण है, और मैं इससे कैसे बच सकता हूं?

आप यहां भंडार देख सकते हैं

जवाबों:


431

निर्देशिका को गिट से हटाकर फिर से जोड़ना मेरे लिए काम कर गया:

 git rm --cached directory
 git add directory

यह काम करता है यदि आपने उद्देश्यपूर्ण रूप से .gitनिर्देशिका को हटा दिया है क्योंकि आप directoryअपने मुख्य गिट प्रोजेक्ट में जोड़ना चाहते हैं । अपने विशिष्ट मामले में, मैंने एक एक्सटेंशन का क्लोन तैयार किया था और git add .बहुत अधिक सोचने के बिना चला । गिट ने एक सबमॉड्यूल बनाने का फैसला किया, जो मुझे पसंद नहीं आया। तो मैं हटा directory/.gitऔर में भाग गया Git: fatal: Pathspec is in submodule। मैं यह नहीं पता लगा सका कि सबमॉड्यूल का सामान कैसे हटाया जाए। ऊपर दो पंक्तियों के साथ फिक्स्ड।


8
इससे मुझे एक समस्या हल हो गई, जहां मैंने एक प्रोजेक्ट को गलती से एक मौजूदा प्रोजेक्ट में खींच लिया, जिससे एक सबमॉड्यूल बना। मैं वहाँ से बाहर हर दूसरे सुझाव के बारे में कोशिश की थी। निर्देशिका को हटाने और फिर से जोड़ने से मेरी समस्या का समाधान हो गया। धन्यवाद।
RevNoah 4

मेरे पास .it है और इसे देखें! लेकिन जब मैं एक फ़ोल्डर में स्थित कुछ फ़ाइलों को कमिट करना चाहता हूं, तो यह एक त्रुटि दिखाता है "ब्लाब्लह किसी भी फाइल (एस) से मेल नहीं खाता है"
डॉजकी ऑक्ट

यह मुद्दा तय किया। मेरे मामले में, मैंने प्रोजेक्ट को किसी अन्य मशीन में क्लोन किया।
एंटोनियोवा

मैं एक दृश्य स्टूडियो परियोजना के साथ एक ही समस्या थी जो मैं GitHub के साथ सिंक करता हूं। जहाँ मेरा अधिकांश विकास हो रहा है, उस पर नज़र नहीं रखी जा रही थी, और अगर मैंने इसे जोड़ने की कोशिश की तो मुझे वही त्रुटि मिल रही थी। इस समाधान ने इसे मेरे लिए भी तय कर दिया!
JohnRDOrazio

10

ऐसा लगता है कि git addसंदर्भ मूल रेपो ("पैरेंट" का अर्थ है सबमॉड्यूल सहित एक), जो चेतावनी को ट्रिगर करता है।

इसके साथ इसका संदर्भ देखें और बदलें

cd _site
git --git-dir=.git --work-tree=. add . 
git --git-dir=.git --work-tree=. commit -m "new files"

यह मत भूलो, अगर यह काम करता है, तो आपको अभी भी माता-पिता के रेपो में वापस जाना होगा, और git add _site, चूंकि सब्रेपो में बदलाव होगा।

और आपको दोनों को धक्का देना होगा।


अपडेट जनवरी 2017 (2+ वर्ष बाद)

2.12 Git के साथ, आप prefix_pathspec: Assertionअब और नहीं देखेंगे ।

Stefan Beller ( ) द्वारा प्रतिबद्ध 2d81c48 (09 जनवरी 2017) देखें । हेल्प-बाय: जेफ़ किंग ( ) , और जूनियो सी हमानो ( )(द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 00880a1 , 18 जनवरी 2017)stefanbeller
peffgitster
gitster

pathspec: सबमॉडल संबंधित pathspecत्रुटि के लिए बेहतर संदेश दें

रनिंग " git add a/b" जब " a" एक सबमॉड्यूल है जिसे सही ढंग से गलत तरीके से तैयार किया गया है, लेकिन एक सार्थक त्रुटि संदेश के बिना।


error: unknown option गित-दिर = ित .गित'`। इसके अलावा, मैं ट्रैविस के भीतर से मेरे माता-पिता रेपो प्रतिबद्ध नहीं कर सकते हैं, कि ट्रैविस चलाने का एक अनंत लूप ... कारण होगा
jmite

@jmite मैंने जवाब तय कर दिया है: --git-dirऔर कमांड के --work-treeविकल्प हैं, gitकमांड के नहीं git addgit addयदि git commitव्यावहारिक नहीं है , तो कम से कम भाग का प्रयास करें ।
VonC

यह मेरे लिए कुछ तोड़ने के लिए लगता है, लेकिन मैं यहाँ
CGTheLegend

4

ऐसा लगता है कि मेरी समस्या यह है कि मैं गलती से सबमॉड्यूल के .gitफ़ोल्डर को हटा रहा था ।


1
मुझे भी ठीक यही समस्या है। क्या आप इसे साझा कर सकते हैं कि आपने इसे कैसे हल किया?
मैट

मैंने अपनी स्क्रिप्ट को बदलकर .IT फ़ोल्डर को नहीं हटाने के लिए इसे हल किया। इसलिए मैं आपको सलाह दूंगा कि आप अपनी स्क्रिप्ट की जांच करें, देखें कि क्या वास्तव में आपके पास निर्देशिका में एक .git फ़ोल्डर है।
jmite

1
मैं करता हूं लेकिन मैं इससे छुटकारा चाहता हूं क्योंकि रिमोट रेपो अब मौजूद नहीं है। हमारे लिए इसके स्रोत कोड को शामिल करना आसान है।
मैट

आप सबसे अच्छी शर्त हैं तो दूरस्थ रिपॉजिट को बदलना है। git remoteकमान पर एक नजर डालें ।
jmite

3

ऐसा लगता है कि आप गैर-आरंभिक सबमॉड्यूल पर काम कर रहे हैं (वे मूल रूप से .gitनिर्देशिकाओं को याद कर रहे हैं ), इसलिए आपको उन्हें पहले शुरू करना चाहिए और अपडेट करना चाहिए:

git submodule init
git submodule update

अन्यथा अगर आपको इस सबमॉडल की आवश्यकता नहीं है, तो इसे हटा दें:

git submodule deinit _site

या:

git rm -f --cached _site

और इसे फिर से जोड़ें:

git add _site

अपने वर्तमान बकाया submodules की जाँच करें: git submodule status

यह भी देखें: git ऐड पर 'अभिकथन विफल' होने के कारण git क्यों गलत है?


1

इस समस्या के लिए 100% फिक्स, भले ही आपके पास परियोजना के अंदर एक से अधिक सबमॉड्यूल निर्देशिका हो:

> git submodule foreach --recursive deinit -f --all -- <relative path>
> git add --all -f
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.