एक विशिष्ट फ़ोल्डर के तहत एक विशिष्ट फ़ाइल प्रकार को छोड़कर सभी फ़ाइलों को सही ढंग से अनदेखा करें


89

मैंने इसी तरह के सवाल ( 1 , 2 और 3 ) देखे हैं , लेकिन मुझे उनसे उचित समाधान नहीं मिला है।

मुझे किसी विशिष्ट फ़ाइल प्रकार को छोड़कर किसी विशेष फ़ोल्डर के तहत सभी फ़ाइलों को अनदेखा करने की आवश्यकता है। रूट रूट के लिए फ़ोल्डर एक उपनिर्देशिका है। मुझे फ़ोल्डर का नाम दें Resources। चूंकि मैं चीजों को जटिल नहीं करना चाहता, इसलिए मुझे Resourcesजहां भी यह नाम दिया गया है, सभी फ़ोल्डरों के तहत फाइलों को अनदेखा करें ।

यह सबसे आम समाधान है (सभी डुप्लिकेट प्रश्नों में)

# Ignore everything
*

# Don't ignore directories, so we can recurse into them
!*/

# Don't ignore .gitignore
!.gitignore

# Now exclude our type
!*.foo

इस समाधान के साथ समस्या यह है कि यह नई जोड़ी गई फ़ाइलों को ट्रैक करना बंद कर* देता है (चूंकि सभी फ़ाइलों को अनदेखा करता है)। मैं हर फ़ाइल प्रकार को छोड़कर नहीं रखना चाहता। मैं सामान्य व्यवहार चाहता हूं जहां यदि कोई नई फ़ाइल जोड़ी जाती है, तो git statusवह दिखाता है।

मैं अंत में एक समाधान मिल गया यहाँ । समाधान फ़ोल्डर .gitignoreमें एक और फ़ाइल जोड़ने के लिए है Resources। यह सही ढंग से काम करता है।

क्या मैं एक अनदेखा फ़ाइल के साथ समान प्राप्त कर सकता हूं? मुझे लगता है कि अलग-अलग निर्देशिकाओं में कई अनदेखा फाइलें थोड़ी क्लूनी हैं।

यही मैं हासिल करने की कोशिश कर रहा हूं:

# Ignore everything under Resources folder, not elsewhere
Resources

# Don't ignore directories, so we can recurse into them
!*Resources/

# Now exclude our type
!*.foo

लेकिन यह विपरीत आउटपुट देता है। यह *.fooप्रकार को अनदेखा करता है और अन्य फ़ाइलों को ट्रैक करता है।

जवाबों:


108

@SimonBuchan सही है।

1.8.2 git के बाद से, Resources/** !Resources/**/*.fooकाम करता है।


1
यह मेरे लिए काम करता है, मामूली ट्वीक, मुझे बस निर्देशिकाओं और उनके नीचे की सभी चीजों को हटाने की आवश्यकता है, इसलिए मैंने DirectoryName1/** DirectoryName1/**/*उनमें से प्रत्येक के लिए : किया । एफआईआर निर्देशिकाओं को हटाते हैं लेकिन आपको सभी फ़ाइल प्रकारों को हटाने के लिए दूसरे की आवश्यकता होती है।
स्काला उत्साही

27

सबसे अच्छा जवाब संसाधनों से युक्त संसाधन / .ignignore फ़ाइल को जोड़ना है:

# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo

यदि आप अनिच्छुक या असमर्थ हैं।

# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo

यदि आप निर्देशिकाओं को निर्दिष्ट से अधिक गहरा जोड़ते हैं, तो आपको उस पैटर्न को संपादित करना होगा।


2
यह दुख की बात है .. वास्तव में मेरे पास गहरे निर्देशिका होंगे, इसलिए मैं पहले एक के साथ रहना
चाहूंगा

एक ही समाधान पर अधिक जानकारी के लिए यहाँ देखें: stackoverflow.com/questions/7803689/... - भी ओपी @nawfal से ऊपर लिंक
यहाँ

7

यह बेवकूफी भरा लग सकता है, लेकिन जाँच करें कि क्या आपने पहले ही उस फ़ोल्डर / फ़ाइलों को नहीं जोड़ा है जिसे आप पहले सूचकांक में अनदेखा करने की कोशिश कर रहे हैं। यदि आपने किया है, तो इससे कोई फर्क नहीं पड़ता है कि आप अपनी .gitignore फ़ाइल में क्या डालते हैं, फ़ोल्डर / फ़ाइलों का अभी भी मंचन किया जाएगा।


5
यदि कोई इस विशिष्ट उपयोग के मामले में चलता है, तो आप git rm --cached <path to files>उन अनदेखा फ़ाइलों को गिट से बाहर निकालने के लिए उपयोग कर सकते हैं, जबकि अभी भी उन्हें फाइलसिस्टम में छोड़ रहे हैं।
slothluvchunk

5

या तो मैं इसे गलत तरीके से कर रहा हूं, या स्वीकृत उत्तर वर्तमान git के साथ काम नहीं करता है।

मैंने वास्तव में उचित समाधान ढूंढ लिया है और इसे लगभग उसी प्रश्न के तहत यहां पोस्ट किया है । अधिक जानकारी के लिए वहां जाएं।

समाधान:

# Ignore everything inside Resources/ directory
/Resources/**
# Except for subdirectories(won't be committed anyway if there is no committed file inside)
!/Resources/**/
# And except for *.foo files
!*.foo

2
हां, यह मेरे लिए काम करता है। जोड़ने के लिए !/Resources/**/महत्वपूर्ण था git उपनिर्देशिका की अनदेखी नहीं है।
जॉन्सटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.