मैं Git रिपॉजिटरी से .DS_Store फाइलें कैसे निकाल सकता हूं?


1257

मैं उन कष्टप्रद मैक ओएस एक्स .DS_Storeफ़ाइलों को एक गिट रिपॉजिटरी से कैसे निकाल सकता हूं ?



यह सोचो कि मैक ओएस एक्स के कई संस्करणों में ही नहीं, मैक ओएस एक्स भी है।
जिम आहो

Https://github.com/xiaozhuai/odourless की जाँच करें , मैंने रोकने के लिए एक उपकरण बनाया है ।DS_Store।
जियाओझुई

जवाबों:


2426

मौजूदा फ़ाइलों को रिपॉजिटरी से निकालें:

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

लाइन जोड़ें

.DS_Store

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

echo .DS_Store >> .gitignore

फिर

git add .gitignore
git commit -m '.DS_Store banished!'

13
यह वास्तव में तुच्छ है, लेकिन इसका उपयोग हर .DS_Store फ़ाइल के लिए एक बार -execलॉन्च होगा git-rm, जबकि xargsसभी रास्तों को एक कमांड लाइन पर रखा जाएगा। ज्यादातर मैं पसंद करता हूं xargsक्योंकि मुझे बहुत सारे विशेष पात्रों से बचने की चिंता नहीं है।
बेन्जाडो

8
इसे .it / जानकारी / बहिष्कृत का उपयोग करना चाहिए, न ही .ignignore का। दोनों के बीच अंतर की व्याख्या के लिए stackoverflow.com/questions/1753070/… देखें ।
एंड्रयू ग्रिम

106
@ और: मैं सहमत नहीं हूँ। यह कभी भी .DS_Store फ़ाइल के लिए जाँच करने के लिए उपयोगी नहीं होगा, इसलिए यह एक रिपॉजिटरी-वाइड, सभी-उपयोगकर्ता सेटिंग के रूप में अधिक समझ में आता है, बजाय इसके कि प्रत्येक मैक उपयोगकर्ता को अपनी मशीन पर सेट करने के लिए याद रखना चाहिए।
बेंज़ादो

51
जोड़ने के .DS_Storeलिए .gitignoreपुनरावर्ती काम करता है ? यही है, क्या यह भी अनदेखा करेगा some/level/of/folders/.DS_Store?
चार्ली श्लिसेर

70
@CharlieS हां, यदि पैटर्न में स्लैश नहीं है, तो यह सभी निर्देशिकाओं में फ़ाइल नाम के साथ मेल खाता है।
बेंजो

239

बेंज़ादो और वेबमैट के उत्तरों को संयोजित करना, अपडेट करना git rm, उन फ़ाइलों पर विफल होना, जो रेपो में नहीं हैं, और इसे किसी भी उपयोगकर्ता के लिए पेस्ट-सक्षम बनाते हैं:

# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore

2
मैंने पाया कि जब मेरी होम डायरेक्टरी (AKA एक "dotfiles" रेपो) में git रेपो का उपयोग कर रही है, तो ~/.gitignoreमेरी वैश्विक बहिष्कृत फ़ाइल के रूप में दर्द हो रहा है। ऐसी फाइलें हैं जिन्हें मैं अपनी होम निर्देशिका से बाहर करना चाहता हूं जिन्हें मैं वैश्विक रूप से अनदेखा नहीं करना चाहता। मैं ~/.gitexcludesएक ही निर्देश के माध्यम से उपयोग करता हूं :core.excludesfile
AL द X

155

इस समस्या से निपटने के लिए सबसे अच्छा उपाय यह है कि ग्लोबली इन फाइलों को आपके सिस्टम के सभी गिट रिपोज से अनदेखा कर दें। यह एक वैश्विक gitignore फ़ाइल बनाकर किया जा सकता है जैसे:

vi ~/.gitignore_global

फ़ाइलों को अनदेखा करने के लिए नियम जोड़ना:

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

अब, इस फ़ाइल को अपने वैश्विक git config में जोड़ें:

git config --global core.excludesfile ~/.gitignore_global

संपादित करें:

हटाए गए प्रतीक, क्योंकि उन्हें आवेदन संपत्ति के रूप में प्रतिबद्ध होने की आवश्यकता हो सकती है।


आप अपने रिपॉजिटरी के .gitignore में भी उपरोक्त नियम जोड़ सकते हैं। यदि आपकी परियोजना में कई योगदानकर्ता हैं तो यह रेपो स्तर पर इन फाइलों को दूर रखेगा। हालाँकि, ऐसे मामलों में .itignignore को प्रत्येक OS की विशिष्ट फ़ाइलों आदि से निपटना चाहिए, यदि विभिन्न डेवलपर्स अलग-अलग OS का उपयोग कर रहे हैं। लाइनेक्स, ओएसएक्स आदि के नियमों की तरह
Nerve

मेरा सुझाव है कि प्रत्येक डेवलपर अपने ओएस में अपने .global_ignore के साथ विशिष्ट फ़ाइलों से संबंधित है, इस तरह से परियोजना .itignign प्रोजेक्ट विशिष्ट है।
mcfedr

चलाना चाहिए: git add .gitignore_global, क्रम में एक और प्रोग्रामर के पास वह फ़ाइल भी उसके स्थानीय परिवेश में है?
स्टेन्डडेव

58

कुछ स्थितियों में आप विश्व स्तर पर कुछ फ़ाइलों को अनदेखा करना चाह सकते हैं। मेरे लिए .DS_Store उनमें से एक है। ऐसे:

git config --global core.excludesfile /Users/mat/.gitignore

(या अपनी पसंद की कोई फाइल)

फिर एक रेपो की तरह फ़ाइल को संपादित करें .itignore। ध्यान दें कि मुझे लगता है कि आपको एक पूर्ण पथ का उपयोग करना होगा।


26

यदि आप फ़ाइलों को हटाने में असमर्थ हैं क्योंकि उनके पास चरणबद्ध उपयोग में परिवर्तन हैं:

git rm --cached -f *.DS_Store

19

टर्मिनल खोलें और "cd <ProjectPath>" टाइप करें

  1. मौजूदा फ़ाइलें निकालें: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. इसे जोड़ो .DS_Store

  4. टाइप करें "ctrl + x"

  5. "Y" टाइप करें

  6. फ़ाइल सहेजने के लिए दर्ज करें

  7. git add .gitignore

  8. git commit -m '.DS_Store removed.'


nano .gitignoreयदि मौजूद नहीं है तो फाइल बनाता है, इस कमांड को प्रोजेक्ट रूट फोल्डर
सैफ

17

शीर्ष मतदान का उत्तर बहुत बढ़िया है, लेकिन मेरे जैसे बदमाशों को बाहर निकालने में मदद करना, यहाँ है कि .ignignore फ़ाइल कैसे बनाई जाए, इसे संपादित करें, इसे सहेजें, उन फ़ाइलों को हटा दें जिन्हें आपने पहले ही गिट में जोड़ दिया होगा, फिर फ़ाइल को Github पर पुश करें।

.Gitignore फ़ाइल बनाएँ

.Gitignore फ़ाइल बनाने के लिए, आप केवल touchवह फ़ाइल रख सकते हैं जो निर्दिष्ट नाम के साथ एक रिक्त फ़ाइल बनाती है। हम .gitignore नाम की फ़ाइल बनाना चाहते हैं ताकि हम कमांड का उपयोग कर सकें:

touch .gitignore

फाइलों पर ध्यान न दें

अब आपको उस लाइन को जोड़ना होगा जो आपके .itignore को DS Store फ़ाइलों को अनदेखा करने के लिए गिट को बताती है। ऐसा करने के लिए आप नैनो संपादक का उपयोग कर सकते हैं।

nano .gitignore

नैनो अच्छा है क्योंकि इसमें इससे बाहर निकलने के निर्देश शामिल हैं। ( Ctrl- Oबचाने के लिए, Ctrl- Xबाहर निकलने के लिए)

इस Github gist के कुछ विचारों को कॉपी और पेस्ट करें जो अनदेखी करने के लिए कुछ सामान्य फ़ाइलों को सूचीबद्ध करते हैं। इस प्रश्न का उत्तर देने के लिए सबसे महत्वपूर्ण हैं:

# OS generated files #
######################
.DS_Store
.DS_Store?

# टिप्पणी कर रहे हैं, और यह बढ़ने पर आपकी फ़ाइल को व्यवस्थित करने में आपकी सहायता करेगा।

इस गितूब लेख में कुछ सामान्य विचार और दिशानिर्देश भी हैं।

पहले से ही जोड़ दी गई फ़ाइलों को निकालें

अंत में, आपको वास्तव में उन डीएस स्टोर फ़ाइलों को अपनी निर्देशिका से हटाने की आवश्यकता है।

शीर्ष मतदान उत्तर से इस महान आदेश का उपयोग करें। यह आपकी निर्देशिका में सभी फ़ोल्डरों के माध्यम से जाएगा, और उन फ़ाइलों को गिट से हटा देगा।

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

गितुब तक पुश .ignignore

अंतिम चरण, आपको वास्तव में अपनी .gitignore फ़ाइल बनाने की आवश्यकता है।

git status

git add .gitignore

git commit -m '.DS_Store banished!'


3
आपके चरणों में स्पर्श आदेश आवश्यक नहीं है ... नैनो आपके लिए फ़ाइल बनाएगी।
कोरी गोल्डबर्ग

1
मुझे 2 साल बाद अपना जवाब मिला और मैंने इसका इस्तेमाल किया। अच्छा काम मेरे सामने। :)
जोशुआ डांस

पूरी तरह से काम किया !! धन्यवाद
iUser

15

मुझे काम करने के लिए इसे पाने के लिए git-rm को git rm में बदलना पड़ा:

find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print

10

उन्हें git-rmहटाकर उपयोग करें , और फिर उन्हें जोड़ने .gitignoreसे रोकने के लिए .DS_Store जोड़ें । आप इन सबको एक साथ बनाने से रोकने के लिए ब्लूहैस्टवर्क का भी उपयोग कर सकते हैं


9

यदि आप DS_Store फ़ाइलों को प्रत्येक फ़ोल्डर और सबफ़ोल्डर में हटाना चाहते हैं:


पहले से ही प्रतिबद्ध DS_Store के मामले में:

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

उन्हें अनदेखा करें:

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

8

निम्नलिखित ने मेरे लिए सबसे अच्छा काम किया। बेमिसाल फाइलें, और स्थानीय संशोधनों के साथ फाइलें संभाला। संदर्भ के लिए, यह एक मैक 10.7 सिस्टम पर चल रहा था जो 1.7.4.4 पर चल रहा था।

खोजें और निकालें:

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

मैं एक वैश्विक core.excludesfile सेट करके सभी रिपॉजिटरी में .DS_Store को विश्व स्तर पर अनदेखा करता हूं।

सबसे पहले, फ़ाइल बनाएं (यदि कोई पहले से मौजूद नहीं है):

touch ~/.gitignore

फिर निम्न पंक्ति जोड़ें और सहेजें:

.DS_Store

अब विश्व स्तर पर फ़ाइल का सम्मान करने के लिए git कॉन्फ़िगर करें:

git config --global core.excludesfile ~/.gitignore

8

मौजूदा फ़ाइलों को हटाने के लिए इस कमांड का उपयोग करें:

find . -name '*.DS_Store' -type f -delete

फिर जोड़ने .DS_Storeके लिए.gitignore


6

मैंने पाया कि स्निप्ल्र से निम्न पंक्ति सभी को मिटा देने पर सबसे अच्छा करती है .DS_Store, जिसमें एक स्थानीय संशोधन भी शामिल है।

find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print

--cachedविकल्प, अपने स्थानीय रखता है .DS_Storeक्योंकि यह वैसे भी पुन: पेश किया जा रहा है।

और जैसा कि ऊपर उल्लेख किया गया है, .DS_Storeअपने प्रोजेक्ट के रूट पर .gitignore फ़ाइल जोड़ें । तब यह आपकी दृष्टि में नहीं होगा (रेपो के)।


5

मैं पार्टी में थोड़ा लेट हूं, लेकिन मेरे पास एक अच्छा जवाब है। .DS_Store फ़ाइलों को निकालने के लिए, टर्मिनल विंडो से निम्न कमांड का उपयोग करें, लेकिन 'खोजने' वाली फ़ाइलों को हटाने में बहुत सावधानी बरतें। -नाम विकल्प के साथ एक विशिष्ट नाम का उपयोग करना इसका उपयोग करने के लिए सुरक्षित तरीकों में से एक है:

cd directory/above/affected/workareas
find . -name .DS_Store -delete

यदि आप बस उन्हें पहले और बाद में सूचीबद्ध करना चाहते हैं तो आप "-प्लेट" को छोड़ सकते हैं। वे आपको आश्वस्त करेंगे कि वे चले गए हैं।

~ / .Gitignore_global सलाह के संबंध में: यहां सावधान रहें। आप उस अच्छी फ़ाइल को .gignignore में प्रत्येक वर्करी के शीर्ष स्तर के भीतर रखना चाहते हैं और इसे कमिट करते हैं, ताकि जो कोई भी आपके रेपो का क्लोन बनाए, उसे इसके उपयोग का लाभ मिले।


4

यह काम करेगा:

find . -name "*.DS_Store" -type f -exec git-rm {} \;

यह उन सभी फाइलों को हटा देता है .DS_Store, जिनके नाम सहित समाप्त हो जाते हैं ._.DS_Store


3
तारांकन वहां नहीं होना चाहिए।
अरस्तू पगाल्ट्ज़िस

3
तारांकन इसलिए होना चाहिए क्योंकि मुझे मिला .DS_Store और ._। DS_Store फाइलें मेरे मैक सिस्टम पर।
मंतमहेश

3
@MutantMahesh। उस स्थिति में, आपको आवश्यकता है "*.DS_Store", ताकि तारांकन findद्वारा शेल को विस्तारित करने के बजाय पास किया जाए।
TRIG

4

किसी कारण से उपरोक्त में से कोई भी मेरे मैक पर काम नहीं किया।

मेरा समाधान टर्मिनल रन से है:

rm .DS_Store

फिर निम्नलिखित कमांड चलाएँ:

git pull origin master

3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force

3

अपनी रिपॉजिटरी को इनिशियलाइज़ करते समय, इसमें मौजूद git कमांड को छोड़ दें

-u

और यह एक मुद्दा नहीं होना चाहिए।


1
क्या होगा यदि किसी और ने रेपो बनाया है, और ओपी केवल इसके साथ सिंक कर रहा है?
jww

3

इसने मेरे लिए काम किया, ऊपर से दो उत्तरों का कॉम्बो:

  • $ git rm - कैशेड -f * .DS_Store
  • $ git कमिट -m "फिल्टर-ब्रांच -इंडेक्स-फ़िल्टर 'git rm - कैशेड --ignore-unmatch .DS_Store"
  • $ git पुश ओरिजनल मास्टर --फोर्स

3

नजरअंदाज की गई फाइलें निकालें:

(.DS_Store)

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

2

इस समस्या को हल करने के लिए कुछ उपाय हैं। बनाने से बचने के लिए .DS_Store फाइलें, फ़ोल्डर्स को देखने के लिए OS X फाइंडर का उपयोग न करें। फ़ोल्डर्स को देखने का एक वैकल्पिक तरीका UNIX कमांड लाइन का उपयोग करना है। .DS_Store फ़ाइलों को निकालने के लिए DS_Store टर्मिनेटर नामक एक तृतीय-पक्ष उत्पाद का उपयोग किया जा सकता है। पूरे सिस्टम से .DS_Store फ़ाइलों को हटाने के लिए एक UNIX शेल कमांड का उपयोग किया जा सकता है। एप्लिकेशन से टर्मिनल लॉन्च करें: उपयोगिताएँ UNIX शेल प्रॉम्प्ट पर निम्नलिखित UNIX कमांड दर्ज करें: sudo find / -name ".DS_Store" -depth -exec rm {} \; जब पासवर्ड के लिए कहा जाए तो Mac OS X एडमिनिस्ट्रेटर पासवर्ड डालें।

यह कमांड संपूर्ण मशीन के माध्यम से फाइल सिस्टम के रूट (/) से शुरू होने वाली .DS_Store की सभी घटनाओं को खोजने और निकालने के लिए है। एक निर्धारित कार्य के रूप में चलाने के लिए इस कमांड को कॉन्फ़िगर करने के लिए नीचे दिए चरणों का पालन करें: एप्लिकेशन से टर्मिनल लॉन्च करें: उपयोगिताएँ UNIX शेल प्रॉम्प्ट पर निम्न UNIX कमांड दर्ज करें:

sudo crontab -e जब पासवर्ड के लिए कहा जाए तो Mac OS X व्यवस्थापक पासवर्ड दर्ज करें। Vi संपादक में एक बार अपने कीबोर्ड पर I अक्षर को एक बार दबाएं और निम्नलिखित दर्ज करें:

15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;

इसे क्रॉस्टैब प्रविष्टि कहा जाता है, जिसमें निम्न प्रारूप है:

मिनट का समय DayOfMonth महीना DayOfWeek उपयोगकर्ता कमांड।

क्रॉस्टैब एंट्री का मतलब है कि कमांड को सिस्टम द्वारा स्वचालित रूप से 1:15 AM पर रूट नाम के अकाउंट द्वारा निष्पादित किया जाएगा।

आदेश सभी तरह से खोजने के लिए शुरू होता है। यदि सिस्टम नहीं चल रहा है तो यह कमांड निष्पादित नहीं होगा।

प्रविष्टि को सहेजने के लिए एक बार Esc कुंजी दबाएं, फिर एक साथ Shift + z + z दबाएं।

नोट: चरण 4 में जानकारी केवल vi संपादक के लिए है।


2

इसे अपनी फ़ाइल में जोड़ें

#Ignore folder mac
.DS_Store

इसे सहेजें और कमिट करें

git add -A
git commit -m "ignore .DS_Store"

और अब आप अपने सभी कामों के लिए इसे अनदेखा कर दें


2

.gitignoreकमांड का उपयोग करके एक फ़ाइल बनाएँtouch .gitignore

और इसमें निम्नलिखित पंक्तियाँ जोड़ें

.DS_Store

.gitignoreफ़ाइल को सहेजें और फिर इसे अपने गिट रेपो में धकेल दें।


2

इस फ़ाइल से हमेशा के लिए छुटकारा पाने के लिए और फिर कभी इसके बारे में चिंता करने का सबसे अच्छा तरीका है

एक वैश्विक .gitignore फ़ाइल बनाएँ:

इको .DS_Store >> ~ / .gitignore_global

और आपको बता दें कि आप इस फाइल को अपने सभी रिपॉजिटरी के लिए इस्तेमाल करना चाहते हैं:

git config --global core.excludesfile ~ / .gitignore_global और यह बात है! .DS_Store आपे से बाहर है।


1

.DS_STOREस्थानीय स्तर पर हटाने की आवश्यकता नहीं है

बस इसे .gitignoreफ़ाइल में जोड़ें

.Itignore फ़ाइल एक पाठ फ़ाइल है जो Git को बताती है कि कौन सी परियोजना में फ़ाइलों या फ़ोल्डरों को अनदेखा करना है।

आदेश

  • nano .gitignore
  • .DS_Storeफिर लिखें पर क्लिक करेंCTRL+X > y > Hit Return
  • git status अपने परिवर्तनों को अंतिम रूप देने के लिए
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.