2011-11-03 10 views
36

यह मेरा git status 'परिणाम जैसा दिखता है:संशोधित और अनचाहे सामग्री के साथ गिट submodules - क्यों और कैसे इसे हटाने के लिए?

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# (commit or discard the untracked or modified content in submodules) 
# 
# modified: vim/bundle/pathogen (modified content) 
# modified: vim/bundle/sparkup (untracked content) 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

चल रहा git diff vim यह दिखाता है:

diff --git a/vim/bundle/pathogen b/vim/bundle/pathogen 
--- a/vim/bundle/pathogen 
+++ b/vim/bundle/pathogen 
@@ -1 +1 @@ 
-Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf 
+Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf-dirty 
diff --git a/vim/bundle/sparkup b/vim/bundle/sparkup 
--- a/vim/bundle/sparkup 
+++ b/vim/bundle/sparkup 
@@ -1 +1 @@ 
-Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70 
+Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70-dirty 

एक अनचाहे क्यों है, दूसरा संशोधित, अंतर का क्या अर्थ है? लेकिन सबसे महत्वपूर्ण: यह कैसे हुआ और इससे कैसे छुटकारा पाना?

+0

इस उत्तर: http://stackoverflow.com/a/5127213/199649 अधिक विकल्प उदाहरण भी देते हैं

cd YOUR_REPO_WITH_SUBMODULES/ git submodule foreach git clean -f -d 

-f आप डॉक्स जाँच कर सकते हैं यहाँ निर्देशिका

दूर करने के लिए मजबूर करने के लिए, -d। – charlax

उत्तर

41

vim/bundle/pathogen में ट्रैक की गई फ़ाइलों में से किसी एक को संशोधित किया गया है। सबमिशन vim/bundle/sparkup में कुछ अनचाहे (और हस्ताक्षरित) सामग्री भी है। किसी भी मामले में, संशोधित/अनचाहे क्या है यह जानने का तरीका सबमिशन निर्देशिका में बदलना है और git status चलाएं। (एक submodule में ट्रैक न किए गए फ़ाइलों के मामले में, यह अक्सर एक निर्माण उत्पाद है कि नदी के ऊपर में .gitignore को जोड़ा नहीं किया गया है।)

+14

+1 'सबमिशन निर्देशिका में परिवर्तन' के बारे में +1! –

+0

+1 स्पष्ट प्रतीत होता है, लेकिन यह मुझे थोड़ी देर के लिए फेंक दिया। मेरा सबमिशन कुछ भी अनदेखा नहीं कर रहा था, लेकिन रूट रेपो था। – bentford

1

FAQ में रोगज़नक़ राज्यों के लेखक के रूप में, आप टैग विश्व स्तर पर उपेक्षा कर सकते हैं:

git config --global core.excludesfile '~/.cvsignore' 
echo tags >> ~/.cvsignore 
34

रेपो परिचालक के मूल में .gitmodules फाइलों में प्रत्येक समस्याग्रस्त submodule अनुभाग के लिए ignore = dirty जोड़ें। उदाहरण:

[submodule "vim/bundle/nerdtree"]            
    path = vim/bundle/nerdtree              
    url = https://github.com/scrooloose/nerdtree.git        
    ignore = dirty 

जैसा कि निल्सएच के How to ignore changes in git submodules में देखा गया है। Synchronizing plugins with git submodules and pathogen vimcast के लिए धन्यवाद मिला।

+1

बहुत उपयोगी है। धन्यवाद – nouh

17

सबमिशन की निर्देशिका में जाएं और सुनिश्चित करें कि कुछ भी नहीं बनाया जा रहा है (किसी प्रकार का आउटपुट) w/o आप जानते हैं।

cd submoduledir/ 
git status 

तुम यहाँ में किसी भी ट्रैक न किए गए फ़ाइलों को देखते हैं, बस उन्हें हटाने के लिए ऐसा करते हैं:

git reset --hard HEAD 
git clean -fxd 
+1

मैंने पाया कि भले ही अनचाहे फ़ाइलें वास्तव में डिस्क पर मौजूद नहीं थीं, फिर भी गिट ऐसा व्यवहार कर रहा था जैसे वे थे। मुझे नहीं पता कि यह क्यों हुआ, लेकिन आपके उदाहरण के अनुसार स्वच्छ कमांड का उपयोग करना। –

+2

.gitignore के अंतर्गत मौजूद सभी चीज़ों को हटाने के लिए धन्यवाद। अब मेरा पूरा आईडीई कॉन्फ़िगरेशन और विक्रेता कैश चला गया है ... एनबी। यह सब कुछ हटा देगा जो .gitignore'd है –

3

तुम सच में यकीन है कि आप चाहते हैं बस कर (मैं के साथ vim बंडलों प्रबंध कर रहा हूँ करने के लिए कर रहे हैं रोगजनक और गिट submodules और कुछ कैसे मैं repos में कुछ टैग फ़ोल्डर्स प्राप्त करने में कामयाब रहे - और उन्हें बस जाना था) आप submodules के माध्यम से पाश कर सकते हैं और अनचाहे फ़ाइलों को हटा सकते हैं। https://git-scm.com/docs/git-clean

संबंधित मुद्दे