जवाबों:
कभी यह कोशिश की, लेकिन git help ignore
पता चलता है कि अगर आप एक डाल .gitignore
के साथ *.js
में /public/static
, यह तुम क्या चाहते हो जाएगा।
नोट: नीचे दिए गए जॉय के उत्तर की भी जांच करना सुनिश्चित करें: यदि आप किसी विशिष्ट उपनिर्देशिका में फ़ाइलों को अनदेखा करना चाहते हैं, तो एक स्थानीय .itignore सही समाधान है (स्थानीयता अच्छी है)। हालाँकि अगर आपको अपने पूरे रेपो में आवेदन करने के लिए समान पैटर्न की आवश्यकता है, तो ** समाधान बेहतर है।
ऐसा प्रतीत होता है कि **
सिंटैक्स प्रलेखन के अनुसार git
संस्करण के रूप में समर्थित है ।1.8.2.1
**
पूर्ण पथनाम के विरुद्ध मिलान किए गए पैटर्न में दो लगातार तारांकन (" ") का विशेष अर्थ हो सकता है:
एक प्रमुख "
**
" के बाद एक स्लैश का मतलब सभी निर्देशिकाओं में मेल खाता है। उदाहरण के लिए, "**/foo
" फ़ाइल या निर्देशिका से मेल खाता है "foo
" कहीं भी, पैटर्न के समान "foo
"। "**/foo/bar
" फ़ाइल या निर्देशिका से मेल खाता है "bar
" कहीं भी है जो सीधे निर्देशिका के अंतर्गत है "foo
"।एक अनुगामी "
/**
" अंदर सब कुछ मेल खाता है। उदाहरण के लिए, "abc/**
" निर्देशिका के अंदर सभी फ़ाइलों से मेल खाता हैabc
",".gitignore
फ़ाइल के स्थान के सापेक्ष , असीम गहराई के साथ।एक स्लैश के बाद दो लगातार तारांकन फिर एक स्लैश शून्य या अधिक निर्देशिकाओं से मेल खाता है। उदाहरण के लिए, "
a/**/b
" मैच "a/b
", "a/x/b
", "a/x/y/b
" और इसी तरह।अन्य लगातार तारांकन अमान्य माने जाते हैं।
xxx/**
और xxx/
?
xxx/**
अंदर सभी फ़ाइलों और निर्देशिकाओं को लक्षित करता है, xxx
जबकि निर्देशिका को सीधे xxx/
लक्षित करता xxx
है। यह वास्तव में केवल तभी मायने रखता है जब पैटर्न को नकारना !
"किसी फ़ाइल को फिर से शामिल करना संभव नहीं है यदि उस मूल निर्देशिका को बाहर रखा गया है।", इसलिए उस मामले में उपयोग करना xxx/*
या xxx/**
आवश्यक होगा।
**.js
?
अद्यतन: @ जॉय के उत्तर पर एक नज़र डालें : Git अब **
पैटर्न में वाक्य रचना का समर्थन करता है । दोनों दृष्टिकोण ठीक काम करना चाहिए।
Gitignore (5) आदमी पेज कहता है:
पथ के रूप में एक ही निर्देशिका में .gitignore फ़ाइल से या किसी भी मूल निर्देशिका में प्रतिमान, उच्च स्तर की फ़ाइलों में पैटर्न के साथ (कार्य ट्री के ऊपर तक) निचले स्तर की फ़ाइलों में निर्देशिका द्वारा उन पर ओवरराइड किया जा रहा है फ़ाइल युक्त।
इसका मतलब यह है कि .gitignore
आपके रेपो के किसी भी निर्देशिका में एक फ़ाइल में पैटर्न उस निर्देशिका और सभी उपनिर्देशिकाओं को प्रभावित करेगा ।
पैटर्न आपने प्रदान किया
/public/static/**/*.js
काफी सही नहीं है, सबसे पहले क्योंकि (जैसा कि आपने सही ढंग से नोट किया है) **
सिंटैक्स का उपयोग गिट द्वारा नहीं किया जाता है। इसके अलावा, अग्रणी /
एंकर जो पथनाम की शुरुआत में पैटर्न करते हैं। (तो, /public/static/*.js
मेल खाएगा, /public/static/foo.js
लेकिन नहीं /public/static/foo/bar.js
।) प्रमुख संपादित करें: बस प्रमुख स्लैश को हटाने से भी काम नहीं चलेगा - क्योंकि पैटर्न में अभी भी स्लैश है, इसे गिट द्वारा एक सादे, गैर-पुनरावर्ती शेल ग्लोब के रूप में माना जाता है (धन्यवाद @Joey Hoer इसे इंगित करने के लिए)।/
को हटाने से या तो काम नहीं करेगा, जैसे मिलान पथ public/static/foo.js
और foo/public/static/bar.js
।
जैसा कि @ptyx ने सुझाव दिया, आपको जो करने की ज़रूरत है वह फ़ाइल बनाने के लिए है <repo>/public/static/.gitignore
और बस इस पैटर्न को शामिल करें:
*.js
कोई अग्रणी नहीं है /
, इसलिए यह पथ के किसी भी भाग से मेल खाएगा, और यह पैटर्न केवल /public/static
निर्देशिका और इसके उपनिर्देशिकाओं में फ़ाइलों पर लागू होगा ।
/
को हटाने से या तो काम नहीं करेगा, जैसे मिलान पथ public/static/foo.js
और foo/public/static/bar.js
।" गलत है। प्रलेखन को उद्धृत करने के लिए "यदि पैटर्न में स्लैश / नहीं है, तो गिट इसे शेल ग्लोब पैटर्न के रूप में मानता है और .nameignore फ़ाइल के स्थान पर काम के पेड़ के स्थान के सापेक्ष pathname के खिलाफ मैच के लिए जाँच करता है। एक .itignore फ़ाइल से नहीं) ”। foo/public/static/bar.js
मिलान नहीं किया जाएगा क्योंकि पैटर्न में ए शामिल है /
।
अनियंत्रित फ़ाइलों को अनदेखा करने के लिए बस .it / जानकारी / बहिष्कृत पर जाएँ। बहिष्कृत एक्सटेंशन या फ़ाइलों की सूची वाली एक फ़ाइल है।
मेरा मानना है कि सबसे सरल समाधान का उपयोग करना होगा find
। मुझे .gitignore
उप-निर्देशिकाओं में कई तरह के घूमने पसंद नहीं हैं और मैं एक अद्वितीय, शीर्ष-स्तर का प्रबंधन करना पसंद करता हूं .gitignore
। ऐसा करने के लिए आप बस मिली हुई फाइलों को अपने साथ जोड़ सकते हैं .gitignore
। मान लीजिए कि /public/static/
आपका प्रोजेक्ट / घर है तो मैं कुछ इस तरह उपयोग करूंगा:
find . -type f -name *.js | cut -c 3- >> .gitignore
मैंने पाया कि ./
शुरुआत में काटने के लिए अक्सर यह समझना आवश्यक है कि कौन सी फाइलों से बचना है। इसलिए ए cut -c 3-
।