क्या एकाधिक `।


239

जब तक एक रेपो में कई स्वतंत्र परियोजनाएं शामिल नहीं होती हैं, ऐसा लगता है .gitignoreकि रेपो की जड़ में सिर्फ एक फाइल रखना आसान होगा , जो कि विभिन्न लोगों की तुलना में है। क्या इस या कुछ विश्लेषणों का ऑनलाइन एक मानक सर्वोत्तम अभ्यास है जब एक दृष्टिकोण दूसरे से बेहतर है?

जवाबों:


254

मैं कम से कम दो स्थितियों के बारे में सोच सकता हूं जहां आप .gitignoreविभिन्न (उप) निर्देशिकाओं में कई फाइलें रखना चाहेंगे ।

  • अलग-अलग निर्देशिकाओं को अनदेखा करने के लिए विभिन्न प्रकार की फ़ाइल होती है। उदाहरण के लिए, .gitignoreआपकी परियोजना के शीर्ष निर्देशिका में उत्पन्न कार्यक्रमों को अनदेखा करता है, जबकि Documentation/.gitignoreउत्पन्न प्रलेखन को अनदेखा करता है।

  • दिया फ़ाइलों पर ध्यान न दें केवल दिया (उप) निर्देशिका में (आप उपयोग कर सकते /sub/fooमें .gitignoreहै, हालांकि)।

कृपया याद रखें कि .gitignoreफ़ाइल में पैटर्न (सब) निर्देशिका के लिए फ़ाइल को पुन: लागू करें और इसकी सभी उपनिर्देशिकाओं में है, जब तक कि पैटर्न में '/' शामिल नहीं है (इसलिए जैसे पैटर्न दिए गए निर्देशिका में nameनामित किसी फ़ाइल पर लागू होता है nameऔर इसकी सभी उपनिर्देशिकाएं, जबकि /nameफ़ाइल पर लागू होती हैं केवल दी गई निर्देशिका में इस नाम के साथ)।


1
आह, किसी कारण से मुझे लगा कि /Documentation/*.html इसे कवर करेगा, लेकिन मुझे लगता है कि * वाइल्ड कार्ड केवल एक स्तर पर निर्देशिकाओं का मिलान करेगा।
Conley Owens

9
@ConleyOwens: आधुनिक Git के साथ आप उपयोग कर सकते हैं Documentation/**/*.html(ध्यान दें कि कोई भी स्लैश एंकर पैटर्न /fooका उपयोग करता है ; इसका उपयोग डायरेक्ट्री में सीधे एंकर फाइल करने के लिए किया जाता है)
Jakub Narębski

97

एक स्पर्शरेखा नोट के रूप में, एक मामला जहां कई .gitignoreफ़ाइलों को रखने की क्षमता बहुत उपयोगी है, यदि आप अपनी कार्यशील प्रतिलिपि में एक अतिरिक्त निर्देशिका चाहते हैं जिसे आप कभी भी प्रतिबद्ध नहीं करना चाहते हैं। बस .gitignoreउस निर्देशिका में 1-बाइट (केवल एक तारांकन सहित) डालें और यह कभी भी दिखाई नहीं देगा git statusआदि।


4
आप उसके लिए ".गित / जानकारी / बहिष्कृत" फ़ाइल का उपयोग भी कर सकते हैं
19'16

10
निश्चित रूप से, यदि आप रिपॉजिटरी रूट से कहीं दूर किसी स्थान पर एक फ़ाइल खोलने की कल्पना नहीं करते हैं, तो इसमें एक संपूर्ण पथ लिखें, और फिर निर्देशिका को हटाते समय प्रविष्टि को साफ करने के लिए याद रखें। इसकी तुलना करें printf \* > .gitignore(जब आप निर्देशिका को हटाते हैं तो सफाई स्वचालित है)। मुझे यकीन है कि ऐसी परिस्थितियां हैं जहां .git/info/excludeअधिक उपयुक्त विकल्प है, लेकिन कई नहीं हैं।
अरस्तू पगलतज़िस

हां, जब आप उदाहरण के लिए फ़ोल्डर के बजाय किसी फ़ाइल को बाहर करना चाहते हैं: p
Ayell

4
मैंने कहा "यदि आप अपनी कार्यशील प्रति में एक अतिरिक्त निर्देशिका चाहते हैं जो आप मेरे उत्तर में कभी नहीं करना चाहते हैं"।
अरस्तू पगलतज़िस

1
चूंकि यह रूट .itignore में कम अव्यवस्था पैदा करता है, मुझे यह दृष्टिकोण बहुत पसंद है।
डेविड ए। ग्रे

59

आपके पास कई .gitignore, हर एक की अपनी निर्देशिका हो सकती है।
जांच करने के लिए जो gitignore नियम एक फ़ाइल, उपयोग अनदेखी के लिए जिम्मेदार है git check-ignore: git check-ignore -v -- afile

और आपके पास .gitignoreप्रति शाखा एक फ़ाइल का अलग संस्करण हो सकता है : मैंने पहले ही देखा है कि एक शाखा सुनिश्चित करने के लिए उस तरह का कॉन्फ़िगरेशन एक फ़ाइल को अनदेखा करता है जबकि दूसरी शाखा नहीं है: उदाहरण के लिए इस प्रश्न को देखें ।

यदि आपके रेपो में कई स्वतंत्र परियोजनाएं शामिल हैं, तो उन्हें सबमॉड्यूल के रूप में संदर्भित करना सबसे अच्छा होगा ।
यह वास्तविक सर्वोत्तम प्रथाएं होंगी, जिनमें से प्रत्येक परियोजना को .gitignoreवैश्विक मूल परियोजना में एक विशिष्ट संशोधन द्वारा संदर्भित किए जाने के दौरान स्वतंत्र रूप से (उनकी संबंधित फाइलों के साथ) क्लोन किया जा सकता है । अधिक के लिए सबमॉड्यूल्स की वास्तविक प्रकृति
देखें ।


ध्यान दें कि, git 1.8.2 (मार्च 2013) के बाद से आप देख सकते हैं git check-ignore -v -- yourfileकि कौन सी gitignore रन (किस .gitignoreफ़ाइल से) ' yourfile' पर लागू होती है , और बेहतर समझें कि उक्त फ़ाइल को अनदेखा क्यों किया गया है।
देखें " कौन सा gitignoreनियम मेरी फ़ाइल को अनदेखा कर रहा है? "


17

प्रो सिंगल

  • ढूंढने में आसान।

  • रेपो में कई स्तरों पर यदि मेरे पास एक से अधिक gitignore है, तो बहिष्करण नियमों का शिकार करना काफी मुश्किल हो सकता है।

  • कई फाइलों के साथ, आप आमतौर पर नकल के एक बिट के साथ हवा करते हैं।

प्रो कई

  • फ़ाइल पेड़ के उस हिस्से में "ज्ञान" को स्कोप करें जहां इसकी आवश्यकता है।

  • चूंकि जीआईटी केवल फाइलों को ट्रैक करता है, इसलिए एक "खाली" डायरेक्टरी करने के लिए एक खाली .gitignore एकमात्र तरीका है।

    (और Git 1.8 से पहले, एक पैटर्न को बाहर करने का एकमात्र तरीका जैसे पैटर्न के साथ my/**.exampleबनाना था । यह कारण अब लागू नहीं होता है, जैसा कि आप कर सकते हैं ।)my/.gitignore**.foo/my/**/*.example


मैं एक एकल फ़ाइल को पसंद करता हूं, जहां मैं सभी बहिष्करण पा सकता हूं। मैंने प्रति-निर्देशिका। Svn को कभी याद नहीं किया है, और मैं प्रति-निर्देशिका .गितिग्नोर को भी मिस नहीं करूंगा।

उस ने कहा, कई gitignores काफी आम हैं। यदि आप उनका उपयोग करते हैं, तो कम से कम उनके उपयोग के अनुरूप होना चाहिए ताकि उन्हें काम करने के लिए उचित बनाया जा सके। उदाहरण के लिए, आप उन्हें रूट से केवल एक स्तर पर निर्देशिका में रख सकते हैं।


"खाली" .ignignore "खाली" निर्देशिका करने का एकमात्र तरीका है। " वास्तव में मुझे पता है कि एक एकल README फ़ाइल (या emptyउस मामले के लिए नामित फ़ाइल ) को अपलोड करना अधिक आम है।
मार्क.2377

6
.gitkeep यह भी एक अच्छा तरीका है ... बस एक और सम्मेलन। मुझे एक रीडमी फ़ाइल का उपयोग करने का विचार पसंद है, क्योंकि तब आप यह बता सकते हैं कि निर्देशिका का उपयोग किस लिए किया जाता है, उस फ़ाइल को पढ़ने के लिए।
गेविन पिकिन

8

कई स्थितियों जहाँ आप अपना Git रेपो के लिए, लेकिन यह में फ़ाइलों के बिना एक निर्देशिका प्रतिबद्ध करने के लिए चाहते हैं, उदाहरण के लिए logs, cache,uploads निर्देशिका आदि

इसलिए मैं हमेशा .gitignoreउन निर्देशिकाओं में निम्नलिखित सामग्री के साथ एक फ़ाइल जोड़ना चाहता हूं :

*
!.gitignore

इस .gitignoreफ़ाइल के साथ , Git उन निर्देशिकाओं में किसी भी फ़ाइल को ट्रैक नहीं करेगा, फिर भी मुझे .gitignoreफ़ाइल को जोड़ने की अनुमति देगा और इसलिए निर्देशिका को ही रेपो में बदल देगा।

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