मैं gitignore फ़ाइल में उन (सभी एक्सटेंशन-कम फ़ाइलों) में डॉट्स के बिना फ़ाइलों को कैसे जोड़ूं?


111

जैसे शीर्षक कहता है, क्या gitignore फाइल में "उन में डॉट्स के बिना फाइलें" जोड़ना संभव है?

मुझे लगता है कि यह उन सभी परेशान विस्तार रहित फ़ाइलों का ख्याल रखेगा।


2
: वहाँ कुछ extensionless फ़ाइलों को अनदेखा करने के लिए नहीं करना चाहते हैं README, LICENSEया COPYING, INSTALL, Makefile, आदि उन्हें यद्यपि आप हमेशा कर सकते हैं के लिए मजबूर-जोड़ने और फिर वे पता लगाया जाता है
जेकब Narębski

@ JakubNar Jakbski अच्छी बात है। अधिक दृश्यता के लिए मैंने इसे अपने उत्तर में शामिल किया है।
VonC

जवाबों:


121

आप इसके समान संयोजन की कोशिश कर सकते हैं:

*
!/**/
!*.*

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

जैसा कि मैड फिजिसिस्ट द्वारा नीचे उल्लेख किया गया है , नियम यह है:

किसी फ़ाइल को फिर से शामिल करना संभव नहीं है यदि उस फ़ाइल की मूल निर्देशिका को बाहर रखा गया है। (*)
(*: जब तक कुछ शर्तें जीआईटी में पूरी नहीं हो जाती हैं, तब तक, नीचे देखें)

यही कारण है कि !/**/यदि हम श्वेत-सूची फ़ाइलों को चाहते हैं, तो महत्वपूर्ण है (पैरेंट फ़ोल्डरों को पुन: सूचीबद्ध करना)।

मैंने उल्लेख किया कि समान मामलों में समान नियम:


जैसा कि जेकब Narębski टिप्पणियाँ , पर ध्यान नहीं देना नहीं चाहते हो सकता है सभी extensionless फ़ाइलें।

मेरी सलाह:

  • एक्सटेंशन वाली पहली फ़ाइल जोड़ें जो मायने रखती है
  • फिर अपने .gitignoreदिखाए गए अनुसार संपादित करें : पहले से ही तैयार की गई फ़ाइलों को अनदेखा नहीं किया जाएगा (भले ही उनके पास कोई एक्सटेंशन न हो)। बाकी सभी को नजरअंदाज किया जाएगा।

किसी भी भविष्य की एक्सटेंशन रहित फ़ाइलों के लिए जिसे आप संस्करण बनाना चाहते हैं:

git add -f -- myFile

ध्यान दें कि git 2.9.x / 2.10 (2016 के मध्य में?) के साथ, फ़ाइल को फिर से शामिल करना संभव हो सकता है यदि पथ में किसी वाइल्डकार्ड को फिर से शामिल न किए जाने पर उस फ़ाइल की मूल निर्देशिका को बाहर कर दिया जाए

Nguyuyn Thái Ngọc Duy ( pclouds) इस सुविधा को जोड़ने का प्रयास कर रहा है:

हालाँकि, एक नियम के फिर से शामिल किए जाने के बाद:

फिर से शामिल नियमों में निर्देशिका हिस्सा शाब्दिक होना चाहिए (अर्थात कोई वाइल्डकार्ड नहीं)

यह वैसे भी यहाँ काम नहीं किया होगा।


1
जवाब पूरी तरह से सही है। लेकिन शायद एक बेहतर और .gitignoreहोगा । मुझे पता है कि अगर तारांकन को सामने रखा जाता है, तो इससे कोई फर्क नहीं पड़ता, लेकिन यह अधिक स्पष्ट और ध्वनि वाला है कि गोले वाइल्डकार्ड को कैसे संभालते हैं ...**!**.*
विल्म वान ओन्सेम

7
नोट: अन्य बहिष्करण नियमों के साथ काम करने के लिए, यह आपके .gitignore फ़ाइल में नियमों का पहला सेट होना चाहिए
Erik

आप कुछ एक्सटेंशन रहित फ़ाइलों को भी पुन: शामिल कर सकते हैं जैसे !Makefile। खबरदार कि मैंने इस समाधान के साथ Git 1.7.1 में समस्याओं का अनुभव किया, जबकि इसने 1.9.0 में ठीक काम किया। मेरे मामले में रूट डायरेक्टरी में एक फाइल जोड़ने का काम ठीक रहा, लेकिन उपनिर्देशिका के अंदर एक एक्सटेंशन के साथ एक फाइल जोड़ने को नजरअंदाज कर दिया गया। ऐसा लगता है क्योंकि 1.7.1 ने **अभी तक पैटर्न का समर्थन नहीं किया है, यहां देखें !
mxmlnkn 19

1
**Git में जोड़ा गया था 1.8.2। क्या !*/इसके बजाय उपयोग करने पर कोई नुकसान है !/**/?
mxmlnkn

@TamaMcGlinn एक रेगेक्स की तरह दिखता है: gitignore रीगेक्स का समर्थन नहीं करता है।
VonC

50
*
!*/
!*.*

* हर चीज को नजरअंदाज करने की बात कहता है।

!*/फिर एक निर्देशिका है कि कुछ भी unignores। यह महत्वपूर्ण है।

!*.* एक एक्सटेंशन के साथ सभी फ़ाइलों को असाइन करें।

बिना !*/नियम, एक के बिना निर्देशिका .नाम में सूचीबद्ध नहीं किया जाएगा और अपने इच्छित फ़ाइलों में से कोई भी रूट फ़ोल्डर के बाहर जोड़ा जाएगा।

संदर्भ के लिए, .ignignore प्रलेखन में इन दो खंडों को पढ़ें :

एक वैकल्पिक उपसर्ग ""! जो पैटर्न को नकारता है; पिछले पैटर्न द्वारा बाहर की गई कोई भी मिलान फ़ाइल फिर से शामिल हो जाएगी। किसी फ़ाइल को फिर से शामिल करना संभव नहीं है यदि उस फ़ाइल की मूल निर्देशिका को बाहर रखा गया है। Git प्रदर्शन कारणों के लिए बहिष्कृत निर्देशिकाओं को सूचीबद्ध नहीं करता है, इसलिए निहित फ़ाइलों पर किसी भी पैटर्न का कोई प्रभाव नहीं पड़ता है, चाहे वे परिभाषित किए गए हों। पहले के सामने एक बैकस्लैश ("\") रखो! " पैटर्न के लिए जो एक शाब्दिक के साथ शुरू होता है "!", उदाहरण के लिए, "! महत्वपूर्ण! .txt"।

यदि पैटर्न एक स्लैश के साथ समाप्त होता है, तो इसे निम्नलिखित विवरण के उद्देश्य से हटा दिया जाता है, लेकिन यह केवल एक निर्देशिका के साथ एक मैच ढूंढेगा। दूसरे शब्दों में, foo / एक निर्देशिका foo और उसके नीचे के रास्तों से मेल खाएगा, लेकिन एक नियमित फ़ाइल या एक प्रतीकात्मक लिंक फू से मेल नहीं खाएगा (यह उस तरीके के अनुरूप है जो Git में सामान्य रूप से pathspec काम करता है)।


1
अच्छी पकड़। +1। मैं उस नियम के साथ अपने उत्तर को अद्यतन करना भूल गया था जिसका उपयोग मैंने हाल ही में खानों के अन्य उत्तरों में किया था। मैंने उसी हिसाब से अपना जवाब अपडेट किया है।
वॉनसी

0

मेरे फ़ोल्डरों में *.c, *.h, *.txt, *.csvआदि एक्सटेंशन और बाइनरी फ़ाइलों के साथ बहुत सारी फाइलें हैं बिना किसी एक्सटेंशन के। इसलिए मैं अनदेखी करने के लिए सभी फ़ाइलों execpt जरूरत *.c,*.hऔर .gitignore, मेरे लिए यह काम करता है, से तो .gitignoreउदाहरण:

 */*         #ignore all files in each directory
 !*/*.c      #unignore .c files in each directory
 !*/*.h      #unignore .h header files in each directory
 !.gitignore #unignore .gitignore
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.