2010-02-11 20 views
10

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

चीजों के चेहरे पर, यह रेगेक्स और नकारात्मक लुकहेड का उपयोग करना आसान लग रहा था; हालांकि, हालांकि, मैं टोर्टोइजएचजी में रेगेक्स बडी और अन्य टूल्स में अपने रेगेक्स को सत्यापित करने में सक्षम हूं, यह अपेक्षा के अनुसार काम नहीं करता है।

फ़ाइलें:

  • कबाड़ \ junk.txt
  • कबाड़ \ पाठ
  • रखवाले \ परीक्षण \ परीक्षण
  • रखवाले \ परीक्षण \ test2 \ hi.txt
  • keepersblah.txt

रखवाले के तहत केवल दो फाइलों को अनदेखा नहीं किया जाना चाहिए।

^(?!keepers/).+$ 

अफसोस, इस का कारण बनता है पर ध्यान नहीं दिया जा करने के लिए सभी फ़ाइलों:

यहाँ regex मैं आशा व्यक्त की काम करेगा है। अगर मैं इसे बदलता हूं:

^(?!keepers).+$ 

यह आपकी अपेक्षा करता है जैसा काम करता है। यह किसी भी फाइल/फ़ोल्डर को अनदेखा करता है जो रखवालों से शुरू नहीं होता है। लेकिन मैं रखवालों के साथ शुरू होने वाली फाइलों को अनदेखा करना चाहता हूं।

Bizarrely, अगर मैं इसे इस बदलें:

^(?!keepers/).+\..+$ 

यह ठीक से फ़ोल्डर से मेल खाते हैं, लेकिन यह फ़ाइलों को रखवाले में फ़ोल्डर अनदेखा कर देते हैं नहीं होगा अगर वे एक विस्तार नहीं है।

किसी भी सलाह की सराहना की जाएगी।

को हटाने मृत ImageShack लिंक

उत्तर

7

अपनी पहली अभिव्यक्ति के साथ समस्या यह है कि regex भी "रखवाले" खुद के खिलाफ परीक्षण किया जाता है। उस मामले में एक अतिरिक्त शर्त के साथ जोड़ा जा सकता है:

^(?!keepers(?:/|$)) 

या (कम कॉम्पैक्ट है, लेकिन सरल समझने के लिए):

^(?!keepers/|keepers$) 
+0

मैं भी '^ (?! रखवाले \ ख)', लेकिन वह करने की कोशिश की "keepers.txt" के खिलाफ असफल रहा – eswald

+0

शानदार! बहुत बहुत धन्यवाद, दोनों ने पूरी तरह से काम किया। मैं एक घंटे के लिए अपने सिर को टक्कर लगी हूं :) –

+2

एक आगे विचार में गैर-कैप्चरिंग समूहों की कोई आवश्यकता नहीं है, क्योंकि यह वैसे भी कब्जा नहीं किया गया है: '^ (?! रखवाले (/ | $))। *' – Tomalak

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