नकारात्मक पैटर्न कैसे काम करते हैं?


91

मैं एक .itignore फ़ाइल का उपयोग करने की कोशिश कर रहा हूँ, जिसमें नकारात्मक पैटर्न (साथ शुरू होने वाली रेखाएँ) हैं, लेकिन यह मेरी अपेक्षा के अनुरूप काम नहीं कर रहा है।

एक न्यूनतम उदाहरण के रूप में, मेरे पास फॉलोविंग निर्देशिका संरचना है:

C:/gittest
 -- .gitignore
 -- aaa/
   -- bbb/
     -- file.txt
   -- ccc/
     -- otherfile.txt

और मेरी gitignore फ़ाइल में, मेरे पास यह है:

aaa/
!aaa/ccc/

मेरी समझ ( इस doc पृष्ठ पर आधारित ) यह है कि फ़ाइल आ / ccc / otherfile.txt को अनदेखा नहीं किया जाना चाहिए, लेकिन वास्तव में git आआ के तहत सब कुछ अनदेखा कर रही है।

क्या मैं इस वाक्य को गलत समझ रहा हूं: "एक वैकल्पिक उपसर्ग! जो पैटर्न को नकारता है; पिछले पैटर्न द्वारा बाहर की गई किसी भी मिलान फ़ाइल को फिर से शामिल किया जाएगा।"

BTW, यह Windows पर msysgit 1.7.0.2 के साथ है।

जवाबों:


157

मुझे लगता है कि आप वास्तव में क्या करना चाहते हैं:

aaa/*
!aaa/ccc

आप इसे बता रहे हैं "इसमें मत देखो aaa" इसलिए यह कभी भी पथ की जांच नहीं करता है aaa/ccc। यदि आप वाइल्डकार्ड का उपयोग करते हैं, यह अभी भी की सामग्री को पढ़ता है aaa, तो प्रत्येक प्रविष्टि वाइल्डकार्ड से मेल खाती है और इसे नजरअंदाज कर दिया जाता है, सिवाय इसके aaa/cccकि इसमें प्रवेश नहीं किया जाता है।


2
@ डायनोकॉस्टल: तब आप शायद कुछ अलग कर रहे हैं। यदि आप मदद चाहते हैं तो एक और सवाल (पूरी जानकारी के साथ) पोस्ट करें।
कैस्केबेल

यह मेरे लिए भी काम नहीं किया: / apps / *! / Apps / myApps / FluidTest / bin /
Jarrod Smith

5
@ जारोड यह काम करता है; तुम बस कुछ अलग कर रहे हो। उत्तर में दिए गए कारणों के लिए, आपको इस विधि का पुन: उपयोग करना होगा। ! क्षुधा / myApps, क्षुधा / myApps / * और इतने पर।
कैस्केबेल

आह क्षमा करें मैं अब समझ गया। लेकिन एसओ मुझे फिर से बढ़ने नहीं देगा।
जारोद स्मिथ

आश्चर्य है कि यह आआआ / ** / * के लिए काम क्यों नहीं करता है! आआआ / सीसीसी / ईई (सब कुछ को अनदेखा करें, कुछ निश्चित
Phư

21

यदि आप हर चीज को बाहर करना चाहते हैं aaa, लेकिन इसमें शामिल हैं aaa/cccऔर इसके नीचे की सभी चीजें, आपको उपयोग करना चाहिए:

aaa/*
!aaa/ccc
!aaa/ccc/*

पहली पंक्ति गिट को कभी भी नीचे की अनदेखी करने के लिए कहती है aaa, दूसरा इसे उस फ़ोल्डर को अनदेखा नहीं करने के लिए कहता है aaa/cccजो वास्तव में तीसरी पंक्ति को "सक्षम" करता है जो बताता है कि यह सब कुछ नीचे अनदेखा नहीं करता है aaa/ccc


1
तीसरी पंक्ति ने मेरे लिए कोई अंतर नहीं किया।
जेम्स होपकिन

3
किसी aaa/cccभी स्तर पर किसी भी उपनिर्देशिका में सब कुछ शामिल करने में सक्षम होने के लिए , मेरे !aaa/ccc/**बजाय जो काम किया गया था!aaa/ccc/*
बोक्लोडोआ

3

अगर किसी को अभी भी पहले से git statusचल रहे नए अन-अनदेखे आइटम नहीं दिख रहे git update-indexहैं, तो परिवर्तन को देखने में मदद कर सकते हैं (कम से कम संस्करण 1.9.x के gitbash में)।

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