जीआईटी सबमॉडल्स से कैसे छुटकारा पाएं अनारक्षित स्थिति?


149

मुझे Git के सबमॉड्यूल में अनट्रैक की गई सामग्री से छुटकारा नहीं मिल रहा है। रनिंग git statusपैदावार:

# शाखा मास्टर पर
# बदलाव प्रतिबद्ध के लिए नहीं:
# (जो किया जाएगा उसे अपडेट करने के लिए "git add ..." का उपयोग करें)
# (वर्किंग डायरेक्टरी में बदलाव को त्यागने के लिए "git checkout - ..." का उपयोग करें)
# (सबमॉडुल्स में अनियंत्रित या संशोधित सामग्री को कमिट करें या त्यागें)
#
# संशोधित: बंडल / स्निपमेट (अनट्रैक की गई सामग्री)
# संशोधित: बंडल / सराउंड (अनट्रैकड कंटेंट)
# संशोधित: बंडल / अनुगामी-व्हाट्सएप (अनट्रैकड कंटेंट)
# संशोधित: बंडल / ज़ेनकोडिंग (अनट्रैकड कंटेंट)
#
इसमें कोई परिवर्तन नहीं किए गए हैं ("git add" और / या "git प्रतिबद्ध -a" का उपयोग करें)

--ignore-submodulesपैरामीटर जोड़ना इन संदेशों को छिपाता है; लेकिन मुझे आश्चर्य है कि अगर इस गंदगी को और अधिक उपयुक्त, कोर-ईश, तरीके से निकालने का कोई तरीका है।


3
यह उत्तर: stackoverflow.com/a/5127213/199649 अधिक विकल्प देता है।
charlax

जवाबों:


95

चूँकि git स्टेटस अनटैक की गई सामग्री की रिपोर्ट करता है, इसलिए स्वच्छ स्थिति रखने का वास्तविक तरीका उन सबमॉडल्स में से प्रत्येक में जाना होगा और:

  • जोड़ें और अनियंत्रित सामग्री,
  • या .gitignoreप्रत्येक मॉड्यूल के लिए एक विशिष्ट में untracked सामग्री संदर्भ ।
  • या आप उसी उपेक्षित सामग्री को सबमॉड्यूल में जोड़ सकते हैं .git/info/exclude, जैसा कि टिप्पणियों में peci1 रिपोर्ट करता है
  • या submodule विनिर्देशन में गंदा जोड़ें, जैसा कि ezraspectre के उत्तर ( उत्कीर्ण ) में वर्णित है ।

    git config -f .gitmodules submodule.<path>.ignore untracked
    
  • या एक वैश्विक .gitignore फ़ाइल (अक्सर ~/.gitignore-global) जोड़ें। उदाहरण के लिए .DS_Storeया मेरे मामले में Carthage/Buildजैसा कि मरियन inerný द्वारा टिप्पणियों में बताया गया है । .gitginoreमैन पेज देखें :

पैटर्न जो एक उपयोगकर्ता Git सभी स्थितियों में अनदेखी करने के लिए चाहता है (जैसे, पसंद के उपयोगकर्ता के संपादक द्वारा उत्पन्न बैकअप या अस्थायी फ़ाइलें) आम तौर पर द्वारा निर्दिष्ट फ़ाइल में जाने core.excludesFileउपयोगकर्ता के दशक में ~/.gitconfig। इसका डिफ़ॉल्ट मान है $XDG_CONFIG_HOME/git/ignore। यदि $XDG_CONFIG_HOMEया तो सेट या खाली नहीं है, तो $HOME/.config/git/ignoreइसके बजाय उपयोग किया जाता है।


5
+1, मैं तब तक चीखने के लिए तैयार था जब तक मुझे यह नहीं मिल गया ... तब मेरे एक सबमॉडल में एक .DS_Storeफ़ाइल स्वचालित रूप से (ओएस एक्स द्वारा) बनाई गई थी, जिससे मुझे मुख्य प्रोजेक्ट करने से रोका गया। आर्ग! अपडेट करने का समय .gitignore...
कोर्टनी क्रिस्टेंसेन

Xcode का उपयोग करते हुए, मैंने * .ignignore-Global फ़ाइल में * .xcuserdatad को जोड़ना उपयोगी पाया है। यह स्थानीय Xcode वरीयताओं को ट्रैक करने की कोशिश करने से रोकती है।
रॉय शेरोन

यदि आपके पास सबमॉड्यूल के लिए पुश अधिकार नहीं हैं, तो आप अपने परिवर्तनों को माता-पिता रेपो के अन्य उपयोगकर्ताओं के साथ साझा नहीं कर सकते हैं। @ quincyglenn का समाधान ऐसे मामले में काम करता है।
ड्रू नोक

1
@VonC, या तो उत्तर की स्थिति और वरीयता के आधार पर समझ में आता है। मैं यहां दूसरों के संदर्भ के रूप में भेद को उजागर करना चाहता था। बीटीडब्ल्यू धन्यवाद आपके एसई पर जीईटी के बारे में कई जवाबों के लिए - आपने मुझे कई बार मदद की है।
ड्रू नोक

2
आप दोनों को आने और बनाने के बिना भी कर सकते हैं। एक .ignignore (जो खुद अनट्रैक हो जाता है)। सबमॉड्यूल्स को खोलें .git/info/excludeऔर वहां मौजूद इग्नोर लाइनों को जोड़ें (यह एक .ignignore की तरह काम करता है, लेकिन साझा रिपॉजिटरी का हिस्सा नहीं है)।
मार्टिन पेका

144

मुझे यह ब्लॉग पोस्ट कुल मिलाकर काम करने के लिए मिली । फ़ाइल ignore = dirtyमें प्रविष्टियों में से हर एक में विकल्प जोड़कर .gitmodules

[submodule "zen-coding-gedit3"]
    path = zen-coding-gedit3
    url = git://github.com/leafac/zen-coding-gedit3.git
    ignore = dirty

मेरा पसंदीदा समाधान, क्योंकि यह आसानी से स्वचालित है।
घातक-गिटार

24
वर्थ का उल्लेख है कि ignore = untrackedयह भी मौजूद है, और संशोधित ट्रैक की गई फ़ाइलों को दिखाता है, लेकिन बिना फ़ाइलों के नहीं। यह अच्छा होगा अगर सभी
सबमॉड्यूल्स के

12

आप प्रत्येक सबमॉड्यूल डायर पर भी जा सकते हैं और एक अलग गिट के रूप में कार्य कर सकते हैं। उदाहरण के लिए:

cd my/project/submodule
git status

... / संशोधित फ़ाइलों की सूची प्राप्त करता है /

git add .  //to add all of them to commit into submodule
git commit -m "message to your submodule repo"

आप अपने रिमोट सबमॉडल रेपो को भी अपडेट कर सकते हैं

git submodule update

आख़िरकार


5
आप शायद git add .संशोधित फ़ाइलों की समीक्षा के बिना नहीं करना चाहते हैं । ज्यादातर बार, जो बदलाव किए गए थे, वे अतिरिक्त .DS_Storeफाइलें हैं - यह संभवतः आपके द्वारा पकड़ा जाना चाहिए .gitignore, जैसा कि ज़ोर्त्नी ने उत्तर में पहली टिप्पणी में उल्लेख किया है।
gregoltsov

यदि आप वास्तव में सबमॉड्यूल को अपडेट नहीं करना चाहते हैं और मूल स्थिति में वापस आना चाहते हैं, तो आप चलाना चाहते हैं git submodule update --force
टॉम

4

यह detached HEADआपकी सबमॉड्यूल शाखा में होने के कारण हो सकता है । यदि यह स्थिति है, तो अपने सबमॉड्यूल पथ (जैसे:) में जाएं ./bundle/snipmate, फिर दौड़ें git checkout master


2

मैं कल इस मुद्दे पर अटक गया, एक परियोजना में जिसके पास 12 सबमॉडल्स थे।

git status आउटपुट दिखा रहा था।

# On branch master
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)
#
#   modified:   proj1 (untracked content)
#   modified:   proj1 (modified content, untracked content)
#   ...

अनट्रैक कंटेंट एरर को हल करने के लिए, मुझे सभी सबमॉडल्स (सभी थे *.pyc, *.pyoपाइथन द्वारा जनरेट की गई फाइल्स) से एक का उपयोग करके अनट्रैक फाइल्स को हटाना था .gitignore

दूसरे को हल करने के लिए, मुझे दौड़ना पड़ा git submodule updateजिसने प्रत्येक सबमॉड्यूल को अपडेट किया।


1

मेरी स्थिति में मैं अपने ZF2 वातावरण में एक नए मॉड्यूल के लिए शुरुआती बिंदु के रूप में मॉड्यूल क्लोन करता हूं। यह क्या करता है अपने स्वयं के .git फ़ोल्डर निर्देशिका में डाल दिया।

इस मामले में समाधान .git फ़ोल्डर को हटाने के लिए है (आपको इसे देखने के लिए छिपी हुई फ़ाइलों को दिखाने की आवश्यकता होगी)।


1

यह संभवत: तब होता है जब आपके पास एक विशेष फ़ोल्डर के अंदर एक .गित [छिपा हुआ फ़ोल्डर] होता है।

संशोधित: ./../ .. (संशोधित सामग्री, अनट्रेंड सामग्री)

सुनिश्चित करें कि आपकी उप-निर्देशिका में यह .गित फ़ोल्डर नहीं है।

यदि ऐसा है तो समस्या को। निर्देशिका को मैन्युअल रूप से उप निर्देशिका से हटाकर हल किया जा सकता है।


1

मैं SourceTree का उपयोग करना पसंद करता हूं , इसलिए मेरे लिए समाधान SourceTree में सबमॉड्यूल रेपो को खोलना था जो मुझे सभी अनट्रैक फ़ाइलों की सूची दिखाता है। मैंने तब समूह को उन सभी को चुना, फिर "निकालें" का उपयोग किया।

मैं ऐसा करने में सक्षम था क्योंकि मुझे पता था कि सभी अनट्रैक फाइलें वास्तव में जरूरत नहीं थीं।


1

यह मेरे लिए ठीक काम किया:

git update-index --skip-worktree <path>

यदि यह साथ काम नहीं करता है pathname, तो फ़ाइल नाम का प्रयास करें। मुझे बताएं कि क्या यह आपके लिए भी काम करता है।


-1

यदि यह एक अस्थायी समस्या है, तो आप सबमॉड्यूल फ़ोल्डर में जा सकते हैं और चला सकते हैं git reset HEAD --hardलेकिन आप सबमॉडल के अंदर अपने सभी बदलाव खो देंगे।

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