2012-07-18 15 views
88

क्या गिट रेपॉजिटरी में सभी अनचाहे फ़ाइलों और फ़ोल्डरों को अनदेखा करने का कोई आसान तरीका है?
(मुझे .gitignore के बारे में पता है।)गिट: सभी मौजूदा अनचाहे फ़ाइलों को अनदेखा कैसे करें?

तो git status फिर से एक साफ परिणाम प्रदान करेगा।

+3

उपयोग है। – nhahtdh

+0

संभावित डुप्लिकेट [क्या गिट को अनचाहे फ़ाइलों को न दिखाने का कोई तरीका है?] (Http://stackoverflow.com/questions/2774416/is-there-a-way-to-get-git-not-to -शो-द-अनट्रैक-फाइलें) – random

+0

या आप अपनी .gitignore फ़ाइल में एक * जोड़ना चाह सकते हैं। :) – vilicvane

उत्तर

202

जैसा कि पहले ही कहा गया, में यह मिला स्थिति से बाहर करने के लिए बस का उपयोग करें:

git status -uno # must be "-uno" , not "-u no" 

आप के बजाय स्थायी रूप से वर्तमान में ट्रैक न किए गए फ़ाइलों आप कर सकते हैं की अनदेखी करने, से चाहते हैं आपकी परियोजना की जड़, लॉन्च:

git status --porcelain | grep '^??' | cut -c4- >> .gitignore 

प्रत्येक आगामी कॉल git status स्पष्ट रूप से उन फ़ाइलों को अनदेखा कर देगा।

अद्यतन: उपरोक्त आदेश में मामूली कमी है: यदि आपके पास .gitignore फ़ाइल नहीं है, तो अभी तक आपका गिटिनोरोर स्वयं अनदेखा कर देगा! ऐसा इसलिए होता है क्योंकि फ़ाइल .gitignoregit status --porcelain निष्पादित होने से पहले बनाई गई है।

echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore 

यह एक subshell जो से पहले .gitignore फ़ाइल बनाई गई है पूरा करता है बनाता है: तो अगर आप एक .gitignore फ़ाइल नहीं है फिर भी मैं का उपयोग करें।

COMMAND व्याख्या के रूप में मैं वोट का एक बहुत हो रही है (धन्यवाद!) मुझे लगता है कि मैं बेहतर चाहते आदेश थोड़ा समझाने:

  • git status --porcelaingit status --short क्योंकि manual राज्यों के बजाय प्रयोग किया जाता है " स्क्रिप्ट के लिए एक आसान-से-पार्स प्रारूप में आउटपुट दें। यह शॉर्ट आउटपुट के समान है, लेकिन गिट संस्करणों में स्थिर रहेगा और उपयोगकर्ता कॉन्फ़िगरेशन के बावजूद।
  • grep '^??' फिल्टर केवल लाइनों ?? के साथ शुरू है, जो, git status manual के अनुसार, ट्रैक न किए गए फ़ाइलों के अनुरूप;
  • cut -c4- हर पंक्ति है, जो देता है के पहले 3 अक्षरों को हटा "तो हम दोनों parseability और स्थिरता है हमें सिर्फ ट्रैक न किए गए फ़ाइल के सापेक्ष पथ;
  • >> और > प्रतीकों redirect operators कर रहे हैं, जो उत्पादन संलग्न;
  • | प्रतीकों pipes है, जो निम्न आदेश के इनपुट के लिए पिछला आदेश के उत्पादन में पारित कर रहे हैं पीआर के एक फ़ाइल के लिए evious कमांड या overwrites/क्रमशः एक नई फ़ाइल बनाता है।

जो लोग grep और cut के बजाय using sed पसंद करते हैं के लिए एक और प्रकार, यहाँ एक और तरीका है:

git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore 
+1

क्या मैं अपनी एफ # $% वोट सीमा तक नहीं पहुंच पाया था, मैं निश्चित रूप से ++ यह चाहता हूं। – sjas

+2

'cut -c4-' ** प्रत्येक पंक्ति के पहले 4 वर्ण हटा देता है, जो हमें अनचाहे फ़ाइल के सापेक्ष पथ देता है; ** नहीं। -c' कॉल करने के लिए स्तंभ संख्याओं की सूची की शुरुआत को चिह्नित करता है। और '4-'* * कॉलम 4 से अंत तक लाइन का चयन करता है, जो स्तंभ 1-3 में कटौती करता है। तो आपका कट कमांड वास्तव में प्रत्येक पंक्ति के पहले 3 अक्षर हटा देता है। यदि आपने गिट स्टेटस लाइन से 4 वर्ण हटा दिए हैं जैसे कि इस फ़ाइल के लिए यहां एक: '?? ऐप/विचार/static_pages/contact.html.erb', आप 'ऐप' के पहले अक्षर को हटा देंगे। तो आदेश सही है, लेकिन स्पष्टीकरण दोषपूर्ण है। – 7stud

+0

@ 7 स्टड: धन्यवाद, आप सही हैं, मैंने गलती से 4 लिखा है। मैंने जवाब तय कर लिया है। – Diego

2

दो तरीके:

तर्क "-uno" Git-स्थिति के लिए इस्तेमाल करते हैं। यहाँ एक उदाहरण है:

[[email protected]_vmware:ft]$ git status 
# On branch ft 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  foo 
nothing added to commit but untracked files present (use "git add" to track) 
[[email protected]_vmware:ft]$ git status -uno 
# On branch ft 
nothing to commit (working directory clean) 

या आप .gitignore करने के लिए फ़ाइलों और directires जोड़ सकते हैं, जो मामले में वे ऊपर कभी नहीं दिखाई देगा।

+2

'gitignore' को 'गिट स्थिति' संपादित करने का एक आसान तरीका | बिल्ली >> temp && vim temp'। फिर फ़ाइल को संपादित करना ताकि पहले कुछ पंक्तियां और आखिरी पंक्ति हटा दी जा सके, साथ ही इसके पीछे '# 'और व्हाइटस्पेस पीछे हो। फिर 'बिल्ली temp >> .gitignore और आरएम temp'। यदि कोई 'gitignore' पहले मौजूद नहीं था, तो' mv temp .gitignore' करेगा। बदसूरत सामान लेकिन '.gitignore' मैन्युअल रूप से अद्यतन करने से बेहतर है। – sjas

+1

यह उत्तर गलत है। सही जवाब '-uno' है। यदि आप '-u no' का उपयोग करते हैं, तो यह 'no -u' के बराबर है - यह' नो' 'नामक फ़ाइल पर एक स्थिति करेगा (जो शायद मौजूद नहीं है) और डिफ़ॉल्ट' -u' मोड का उपयोग करें। अर्थात।यह 'गिट स्थिति संख्या 0 के बराबर है –

10

the manual

git status -uno

+29

ठीक है अगर पोस्ट करने से पहले सभी आरटीएफएम करेंगे, तो हम में से कोई भी कभी भी कोई प्रतिनिधि नहीं मिलेगा :-) –

+4

लेकिन यह पोस्ट प्रश्न का उत्तर नहीं देती है। आरटीक्यू अधिक उपयुक्त लगता है। –

+1

@ श्रीधर-सरनोबत मेरा उत्तर मेरे प्रश्न का उत्तर देता है, इसलिए मुझे समझ में नहीं आता कि आप क्या बताने की कोशिश करते हैं? – sjas

1

आप ट्रैक न किए गए फ़ाइलों का एक बहुत कुछ है, तो और नहीं करना चाहते करने के लिए " gitignore "उनमें से सभी, ध्यान दें कि, git 1.8.3 (April, 22d 2013), git status--untracked-files=no का उल्लेख करेगा भले ही आपने उस विकल्प को पहले स्थान में नहीं जोड़ा हो!

"git status" उपयोगकर्ताओं को --untracked=no विकल्प का उपयोग करने में बहुत समय लगता है जब यह बहुत लंबा लगता है।

4

-u no या तो अस्थिर फ़ाइलों को नहीं दिखाता है। -uno वांछित के रूप में काम करता है और अस्थिर दिखाता है, लेकिन अनचाहे छुपाता है।

+0

यहां तक ​​कि यह काफी सही नहीं है। 'गिट स्थिति -यू एक्स'' गिट स्थिति X -u' के बराबर है ('एक्स' '-यू' के लिए तर्क नहीं है)। यह बदले में, 'गिट स्थिति X' के बराबर है (क्योंकि तर्क के बिना '-u' डिफ़ॉल्ट '-u' है)। इसलिए, यह फ़ाइल 'एक्स' पर बस एक गिट-स्टेटस है। इसलिए, यदि 'एक्स'' नहीं 'है तो यह' नो 'नामक फ़ाइल पर गिट स्टेटस करने की कोशिश करता है, जो आपके पास –

31

आप स्थायी रूप से इन फ़ाइलों को अनदेखा करना चाहते हैं, तो उन्हें .gitignore में जोड़ने के लिए एक आसान तरीका `-uno` झंडा

git ls-files --others --exclude-standard >> .gitignore 
+3

नहीं है, इसलिए इसे कई वोट क्यों नहीं मिलते हैं? 2 अन्य कार्यक्रमों के माध्यम से पाइप करने की कोई ज़रूरत नहीं है! – JoelFan

+3

@ जोएलफ़ान: दो कारण: 1) ** यह केवल गिट की जड़ से काम करता है **, जबकि स्वीकार्य एक प्रत्येक उपनिर्देशिका से काम करता है, आपको केवल गंतव्य '.gitignore' पथ 2) को ट्विक करने की आवश्यकता है। आपके पास एक अनचाहे निर्देशिका है, ** यह प्रत्येक में प्रत्येक फ़ाइल को सूचीबद्ध करता है, लेकिन अनचाहे निर्देशिका नहीं ** (इसलिए आप निर्देशिका को अनदेखा नहीं करेंगे, और इस प्रकार निर्देशिका में भविष्य में फ़ाइलों को अनचाहे के रूप में रिपोर्ट किया जाएगा, जबकि स्वीकृत एक केवल निर्देशिका को सूचीबद्ध करता है, न कि अनचाहे फाइलों के अंदर। यह एक बात है कि आप क्या करना चाहते हैं, लेकिन अक्सर आप पूरे डीआईआर – Diego

+1

को अनदेखा करना चाहते हैं धन्यवाद पूली मैं आपके सुझाव * के अंतर की सराहना करता हूं * क्योंकि * @ डिएगो द्वारा उल्लिखित बिंदुओं में से मैंने फ़ाइलों और फ़ोल्डर्स की लाइब्रेरी के साथ काम करना शुरू कर दिया है और मैं मूल फ़ाइलों को ट्रैक/पुश नहीं करना चाहता हूं। मैं केवल उन फाइलों को ट्रैक करना चाहता हूं जिन्हें मैं पुस्तकालय में जोड़ता हूं या पुनर्निर्माण करता हूं। देहात किराया फ़ोल्डर्स सब कुछ अनदेखा करेंगे। इस/आपके समाधान ने स्नैप में सभी 16 9 6 फाइलों को जोड़ा। xD – Chaos7703

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