2009-10-02 12 views
42

मुझे एक .hgdontignore फ़ाइल की आवश्यकता है :-) कुछ फ़ाइलों को शामिल करने और निर्देशिका में अन्य सभी को बाहर करने के लिए। असल में मैं केवल एक .jar फ़ाइलों को किसी विशेष निर्देशिका में शामिल करना चाहता हूं और कुछ भी नहीं। मैं यह कैसे कर सकता हूँ? मैं नियमित अभिव्यक्ति वाक्यविन्यास में कुशल नहीं हूं। या मैं इसे ग्लोब सिंटैक्स के साथ कर सकता हूं? (मैं इसे पठनीयता के लिए पसंद करता हूं)hgignore: सभी फ़ाइलों को अनदेखा करने में मदद करें लेकिन कुछ

बस एक उदाहरण स्थान के रूप में, मान लीजिए कि मैं foo/bar/*.jar को छोड़कर foo/bar/ के तहत सभी फ़ाइलों को बाहर करना चाहता हूं।

उत्तर

36

ऐसा करने के लिए, तो आप इस नियमित अभिव्यक्ति का उपयोग करना होगा: तो

foo/bar/.+?\.(?!jar).+ 

स्पष्टीकरण

आप यह क्या अनदेखी करने के लिए कह रहे हैं, यह अभिव्यक्ति बातों के लिए खोज कर रहा है आप डॉन टी चाहते हैं।

  1. आप किसी भी फ़ाइल जिसका नाम (सापेक्ष निर्देशिका सहित) के लिए लग रही है। (Foo/बार /)
  2. इसके बाद आप किसी भी अक्षर हैं जो एक अवधि (। +? \ पूर्व में होना के लिए देखो == मैच भी शामिल है एक या अधिक जब तक आप अवधि के चरित्र तक नहीं पहुंच जाते)
  3. आप तब सुनिश्चित करते हैं कि इसमें "जार" समाप्त नहीं हो रहा है (?! जार) (इसे
  4. पर नकारात्मक नज़र डाला गया है अंततः आप इसे समाप्त कर लेते हैं है (। +)

नियमित एक्सप्रेस आयनों को गड़बड़ करना आसान होता है, इसलिए मैं दृढ़ता से सुझाव देता हूं कि आपको उन्हें बनाने में सहायता के लिए Regex Buddy जैसे टूल प्राप्त करें। यह एक रेगेक्स को सादे अंग्रेजी में तोड़ देगा जो वास्तव में मदद करता है।

संपादित

अरे Jason S, तुम मुझे पकड़ लिया, यह उन फ़ाइलों को याद करता है।

यह सही किया regex हर उदाहरण आप सूचीबद्ध के लिए काम करेंगे:

foo/bar/(?!.*\.jar$).+ 

यह पाता है:

  • foo/बार/baz.txt
  • foo/बार/baz
  • foo/बार/जार
  • foo/bar/baz.jar.txt
  • foo/bar/ba z.jar।
  • foo/bar/baz।
  • foo/bar/baz.txt।

लेकिन नहीं मिल रहा है

  • foo/बार/baz।जार

नई स्पष्टीकरण

यह कहते में फ़ाइलों को देखने के लिए "foo/बार /", तो अगर वहाँ शून्य या अधिक ".jar" और फिर कोई और अधिक पात्रों द्वारा पीछा चरित्र से मेल नहीं खाते ($ लाइन का अंत है), फिर, यदि यह मामला नहीं है, तो निम्न वर्णों से मेल खाता है।

+0

whee! धन्यवाद, अब मैं जाऊंगा और कोशिश करूँगा। –

+1

हम्म, अच्छा विचार है, लेकिन यह कहा गया है कि यह काम नहीं करेगा, क्योंकि यह बिना किसी एक्सटेंशन के फाइलों से मेल नहीं खाएगा। लेकिन मुझे लगता है कि मैं इसे अपनी जरूरतों में बदल सकता हूं। 'Foo/bar/'भाग आसान है इसलिए चलिए इस पल के बारे में भूल जाएं। यदि आप इसे ठीक कर सकते हैं तो यह "baz.txt", "baz", "jar", "baz.jar.txt", "baz.jar।", "Baz।", और "baz.txt" फ़ाइलों से मेल खाता है। " लेकिन नहीं "baz.jar" तो मैं स्वीकार करूंगा। :-) –

+0

अरे जेसन, मैं देखता हूं कि आपका क्या मतलब है। मैंने अभी अपना जवाब एक काम करने वाले रेगेक्स के साथ अपडेट किया है। मैंने आपके द्वारा सूचीबद्ध प्रत्येक स्ट्रिंग के खिलाफ इसका परीक्षण किया। –

41

माइकल से जवाब एक ठीक है, लेकिन एक और विकल्प सिर्फ बाहर करने के लिए है:

foo/bar/** 

और फिर मैन्युअल .jar फ़ाइलें जोड़ें। आप हमेशा अनदेखी नियम द्वारा बहिष्कृत फ़ाइलों को जोड़ सकते हैं और यह अनदेखा ओवरराइड करता है। आपको भविष्य में बनाए गए किसी भी जार को जोड़ना याद रखना होगा।

+0

आप उन्हें मैन्युअल रूप से कैसे जोड़ते हैं? उन्हें "एचजी एड" के साथ जोड़ना विफल रहता है, क्योंकि अनदेखा फ़ाइल का उपयोग किया जाएगा। उन्हें "एचजी एड-आई" के साथ जोड़ना विफल रहता है, क्योंकि अभी भी अनदेखा फ़ाइल लागू होती है। तो उन्हें अनदेखा फ़ाइल को ओवरराइड करने के लिए कैसे जोड़ा जा सकता है? – Mecki

+3

मेकी, उन्हें 'एचजी एड' के साथ जोड़कर ठीक काम करता है - यह अनदेखा ओवरराइड करता है - बशर्ते कि आप अपनी ऐड लाइन में वाइल्डकार्ड का उपयोग न करें। तो अपने .hgignore में foo/bar/** डालें और फिर 'hg add foo/bar/path/specific.file' जोड़ें और आप जाने के लिए अच्छे हैं। यदि आपके पास जोड़ने के लिए अपवादों का एक टन है तो आप पाइप 'एचजी स्थिति -u -n foo/bar/lot - *। Jar' to 'xargs hg add' कर सकते हैं और थोक में अपने स्पष्ट ओवरराइड कर सकते हैं। –

+1

और यदि कोई foo/bar/path/specific.file को संशोधित करेगा, तो इसे अभी भी अनदेखा कर दिया जाएगा? यह एक समाधान साथी – holms

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