प्रत्येक फ़ोल्डर और सबफ़ोल्डर में सभी .DS_Store फ़ाइलें


559

मैंने .DS_Store को .gitignore फ़ाइल में जोड़ा है, लेकिन ऐसा लगता है कि यह केवल अनदेखा कर रहा है। रूट निर्देशिका में .DS_Store, प्रत्येक फ़ोल्डर और सबफ़ोल्डर में नहीं।

मैं यह कैसे तय करुं?



आपने इसे .gitignore से कैसे जोड़ा? इसे सभी निर्देशिकाओं में काम करना चाहिए (मेरे लिए)।
थिलो

मेरे लिए भी यह काम कर रहा है। मैंने कोशिश भी की जब फ़ाइल के अंत में, यदि आपके पास एक (प्लेटफ़ॉर्म विशिष्ट) नईलाइन होनी चाहिए, लेकिन वह परिवर्तित नहीं हुई है। पदानुक्रम के किसी भी भाग के भीतर .DS_Store निर्देशिकाओं को अभी भी अनदेखा किया गया था।
enorl76

जैसा कि मैं समझता हूं कि यह प्रश्न था: प्रत्येक उपनिर्देशिका में मैन्युअल रूप से ऐसा किए बिना सभी उपनिर्देशिकाओं में .DS_Store की सभी घटनाओं को आसानी से अनदेखा कैसे करें। मुझे भी यही समस्या थी। नीचे दिए गए उत्तर से पता चलता है कि इसे कैसे हल किया जाए (अंतिम 2 पैराग्राफ)।
पेट्र्सिन

जवाबों:


645

मुझे लगता है कि आपको जो समस्या हो रही है, वह यह है कि पहले की किसी गलती में, आपने गलती से .DS_Store फाइल को रिपॉजिटरी में जोड़ दिया है। बेशक, एक बार किसी फ़ाइल को आपकी रिपॉजिटरी में ट्रैक कर लेने के बाद, इसे तब भी ट्रैक किया जाता रहेगा, जब यह किसी .gitignore फ़ाइल में प्रविष्टि से मेल खाती है।

आपको मैन्युअल रूप से .DS_Store फ़ाइलों को हटाना होगा जो आपके रिपॉजिटरी में जोड़े गए थे। आप उपयोग कर सकते हैं git rm --cached .DS_Store। एक बार हटाने के बाद, गिट को इसे अनदेखा करना चाहिए। आप केवल अपने जड़ .gitignore फ़ाइल में निम्न पंक्ति की आवश्यकता चाहिए: .DS_Store। अवधि मत भूलना!

git rm --cached .DS_Storeकेवल .DS_Storeवर्तमान निर्देशिका से निकालता है । आप रिपॉजिटरी से find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatchसभी को हटाने के लिए उपयोग कर सकते हैं .DS_Stores

लगा टिप: चूंकि आप कभी भी .DS_Store फ़ाइलों को शामिल नहीं करना चाहते हैं, इसलिए एक वैश्विक नियम बनाएं। सबसे पहले, कहीं एक वैश्विक .gitignore फ़ाइल बनाएं, जैसे echo .DS_Store >> ~/.gitignore_global। अब सभी खजाने के लिए इसका इस्तेमाल करने के Git बता: git config --global core.excludesfile ~/.gitignore_global

इस पृष्ठ ने मुझे आपके प्रश्न का उत्तर देने में मदद की: https://help.github.com/articles/ignoring-files


41
अंतिम 2 पैराग्राफ इस प्रश्न का उत्तर देते हैं। धन्यवाद।
पेट्र्सिन

70
´´it rm --cached .DS_Storees मौजूदा निर्देशिका से केवल एक .DS_Store निकालता है। ´´find का उपयोग करें। -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch remove को हटाने के लिए सभी .DS_Stores से रेपो
auco

4
नजरअंदाज करने के लिए अन्य आम फाइलों की एक सूची काम में आ सकती है
मैथ्यू

14
वैश्विक नियम IMO का उपयोग करने के लिए बुरा विचार: कई उपयोगकर्ताओं / मशीनों पर वैश्विक कॉन्फिग को बनाए रखने की कोशिश कभी काम नहीं करती है - आप चाहते हैं कि रेपो में ही आपके रेपो को नियंत्रित करने वाले नियम हों। इससे सहमत
यारिन

15
मैं आपसे सहमत नहीं हूँ। (हालांकि मुझे लगता है कि यह असंवेदनशील है, क्योंकि मैंने आपकी टिप्पणी को गलत ठहराया है।) यदि हम वैश्विक करते हैं, तो प्रत्येक मैक उपयोगकर्ता को ऐसा करने की आवश्यकता है, लेकिन केवल एक बार। यदि हम भंडार विस्तृत करते हैं, तो हमें प्रत्येक भंडार के लिए ऐसा करने की आवश्यकता है। मैं आपके बारे में नहीं जानता, लेकिन मैं हर समय नए रेपो बनाता हूं। विश्व स्तर पर ऐसा करने से, समस्या एक बार और सभी के लिए हल कर देती है।
एडवर्ड नेवेल

354

जोड़ना**/.DS_Store में .gitignoreउप निर्देशिका के लिए


अगर .DS_Store पहले से ही प्रतिबद्ध है:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

सभी भंडार में उन्हें अनदेखा करने के लिए: (कभी-कभी इसका नाम ._.DS_Store)

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

अभी भी मेरे रेपो में अपलोड किया गया है?
फ्रेडी सिदौरुक

@FreddySidauruk git rm --cached your_fileपहले का उपयोग करें
ronald8192

@FreddySidauruk से होना चाहिए find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch: stackoverflow.com/questions/18393498/…
ronald8192

1
लगता है कि जोड़ने -fकी जरूरत है अगर आप relavent फ़ोल्डर्स में खुली फाइलें हैं:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan

158

यदि .DS_Store को आपके git रिपॉजिटरी में कभी नहीं जोड़ा गया, तो बस इसे अपनी .gitignore फ़ाइल में जोड़ें।

यदि आपके पास एक नहीं है, तो नामक एक फ़ाइल बनाएं

.gitignore

अपने एप्लिकेशन की रूट डायरेक्टरी में और बस लिखें

**/.DS_Store

में इस। यह आपके git में .DS_Store फ़ाइल को कभी भी चुपके नहीं होने देगा।

लेकिन, अगर यह पहले से ही है, तो अपने टर्मिनल में लिखें:

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

फिर अपने दूरस्थ रेपो से .DS_Store को हटाने के लिए परिवर्तनों को प्रतिबद्ध और धक्का दें:

git commit -m "Remove .DS_Store from everywhere"

git push origin master

और अब .DS_Store को अपनी .gitignore फ़ाइल में जोड़ें और फिर दोबारा कमिट करें और कोड के 2 अंतिम टुकड़ों के साथ पुश करें (git प्रतिबद्ध ..., git push ...)


3
डबल तारांकन क्यों? इसका क्या मतलब है?
मिलन जी

1
@MilanG यह एक कीवर्ड है जिसका मूल अर्थ है 'इस निर्देशिका और सभी उपनिर्देशिकाओं में खोज'।
lachie_h

1
सुनिश्चित नहीं है कि डबल तारांकन के लिए क्या सही व्याख्या है। यह एक वाइल्डकार्ड है। सकता है *या **आप क्या हासिल करना चाहते हैं पर निर्भर करता। यह शेल को निर्देशिकाओं को नेविगेट करने का तरीका बताने का एक तरीका है। यह
स्टैकओवरफ़्लो

** छिपे हुए (./) निर्देशिकाओं से कभी मेल नहीं खाएगा: faclessuser.github.io/wcmatch/glob
जोनाथन

यह वास्तव में काम करता है ... के रूप में चिह्नित किया जाना चाहिए
ichimaru

85

आपकी .gitignore फ़ाइल को इस तरह दिखना चाहिए:

# Ignore Mac DS_Store files
.DS_Store

जब तक आप एक स्लैश को शामिल नहीं करते हैं, तब तक इसे सभी निर्देशिकाओं में फ़ाइल नाम के साथ मिलान किया जाता है। ( यहां से )


यह अभी भी रेपो में
फंसा हुआ है

@FreddySidauruk तब आपको दौड़ना होगाgit rm --cached path/to/file/here
Sgnl

23

चरण 1, सभी *.DS_storeफ़ाइलों को हटा दें । एक दौड़ सकता है

git rm -f *.DS_Store

लेकिन ध्यान रखें कि rm -fअगर आपके पास टाइपो है तो यह थोड़ा खतरनाक हो सकता है! चरण दो: जोड़ें

*.DS_Store
.DS_Store

.गीताग्नोर को। यह मेरे लिए काम किया!


13

*.DS_Storeअपनी .gitignore फ़ाइल में जोड़ें । जो मेरे लिए पूरी तरह से काम करता है


11

आप --cachedस्थानीय .DS_store फ़ाइलों को बनाए रखने के लिए auco के उत्तर में ध्वज को भी जोड़ सकते हैं , जैसा कि एडवर्ड नेवेल ने अपने मूल उत्तर में उल्लेख किया है। संशोधित आदेश इस तरह दिखता है: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..चेकर और धन्यवाद!


5

चरण: 1) इस आदेश का उपयोग करके मौजूदा फ़ाइलों को निकालें

खोजो। -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

चरण: 2) .DS_Store को अपनी .gitignore फ़ाइल में जोड़ें

चरण: 3) अपने बदलावों को कमिट करें। .ignignore git add .गितिग्नोर git कमिट -m "हटा दिया है।। HDS"


3
  1. $ git rm ./*.DS_Store - सभी .DS_Store को git से निकालें
  2. $ echo \.DS_Store >> .gitignore - भविष्य में .DS_Store पर ध्यान न दें

प्रतिबद्ध और धक्का

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