Git उप फ़ोल्डर की उपेक्षा


438

मेरे पास .Net समाधान में बहुत सारी परियोजनाएं हैं। मैं सभी "बिन / डीबग" और "बिन / रिलीज़" फ़ोल्डर (और उनकी सामग्री) को बाहर करना चाहूंगा, लेकिन फिर भी "बिन" फ़ोल्डर को स्वयं और किसी भी डीएल के निहित को शामिल करना चाहिए।

"बिन /" के साथ .ignignore "डिबग" और "रिलीज़" फ़ोल्डर की उपेक्षा करता है, लेकिन किसी भी dll के "बिन" फ़ोल्डर में निहित है।

"बिन / डीबग" या "बिन / रिलीज़"। initignore फ़ाइल निर्देशिकाओं को बाहर नहीं करती है, जब तक कि मैं "समाधान / परियोजना / बिन / डीबग" के रूप में पूरी तरह से अनदेखा पैटर्न को योग्य नहीं करता हूं - जो मैं जैसा चाहता हूं वैसा नहीं करना चाहता। मेरे समाधान में प्रत्येक परियोजना के लिए इस पूर्ण पैटर्न को शामिल करने की आवश्यकता होगी, साथ ही किसी भी नई परियोजनाओं के लिए इसे जोड़ना होगा।

कोई सुझाव?


DLL क्यों जोड़ें? यदि आप थर्ड पार्टी DLL को संदर्भित कर रहे हैं, तो यह एक सामान्य फ़ोल्डर जोड़ने के लिए समझ में आ सकता है कि आपकी सभी परियोजनाएं तब संदर्भ देती हैं।
धान

6
धान का अधिकार - यदि वे तृतीय-पक्ष DLL हैं, तो उन्हें संभवतः आपके कोड से दूर रखा जाना चाहिए। मेरे लिए, हालांकि, ऐसा लगता है कि आप अपने स्वयं के निर्माण उत्पादों में जांच कर रहे हैं, जो आम तौर पर जिस तरह से आप जाना नहीं चाहते हैं। आप जानकारी को ट्रैक करने के लिए गिट का उपयोग करते हैं , जो पूरी तरह से कोड में निहित है और कॉन्फ़िगरेशन का निर्माण करता है। उत्पाद हैं, अच्छी तरह से, उत्पादों। उन्हें ट्रैक करना परेशानी के लिए पूछ रहा है - उदाहरण के लिए, क्या होगा यदि आप कोड को बदलते हैं लेकिन नए उत्पादों में निर्माण और जांच करना भूल जाते हैं?
कैस्केबेल

मुझे सबफ़ोल्डर्स को छोड़ने में समस्या थी। यहां लिखे गए सटीक नमूनों सहित सब कुछ करने की कोशिश की, लेकिन कोई सफलता नहीं मिली। अंत में मैंने फ़ोल्डर पैटर्न के बीच एक अतिरिक्त रिक्त लाइन जोड़ी, और यह काम कर रहा है। शायद एक एन्कोडिंग समस्या। मेरे पास विंडोज़ हैं और इसे UTF8 में एन्कोड किया गया है।
रोडबंप

जवाबों:


552

क्या आपने वाइल्डकार्ड की कोशिश की है?

Solution/*/bin/Debug
Solution/*/bin/Release

गीट के संस्करण 1.8.2 के साथ, आप **किसी भी स्तर की उपनिर्देशिका से मेल खाने के लिए वाइल्डकार्ड का भी उपयोग कर सकते हैं :

**/bin/Debug/
**/bin/Release/

8
यह काम करता है, सिवाय अगर किसी अन्य परियोजना के साथ उप-फ़ोल्डर है जैसे सॉल्यूशन / मॉड्यूल / प्रोजेक्ट तो अब के लिए मैंने / * / * / बिन / डीबग और / * / * / * / बिन / डीबग (उप के लिए) जोड़ दिया है फ़ोल्डर)। ऐसा लगता है कि आपको अपनी निर्देशिका संरचना में प्रत्येक स्तर के लिए वाइल्डकार्ड उप फ़ोल्डर जोड़ना होगा।
मार्सेल

1
@ मार्सेल: ठीक है, जीआईटी निश्चित रूप से किसी भी फाइल को अनदेखा नहीं करने वाला है जिसे आप इसे नहीं बताते हैं - यह वाइल्डकार्ड से मेल खाता है, और नहीं, कम नहीं।
कैस्केबेल

मुझे लगता है कि डबल स्टार निर्देशिका की सीमाओं को पार करेगा, अर्थात: / ** / बिन / डिबग
ट्रेंट

11
@ तारा: दुर्भाग्य से, ऐसा नहीं है।
११:३३ पर तुक्का मुस्तोंन

2
से संबंधित Visual Studio पर एक बग था **। अब तक ठीक कर लेना चाहिए। लिंक
बोगैक

106

आप परियोजना के सभी निर्देशिका को एक ही नाम से अनदेखा करने के लिए शीर्ष स्तर में .itignore का उपयोग कर सकते हैं। उदाहरण के लिए:

Debug/
Release/

इसे तुरंत अपडेट करना चाहिए ताकि यह दिखाई दे जब आप स्टेटस करते हैं। सुनिश्चित करें कि इन निर्देशिकाओं को पहले से ही गिट में जोड़ा नहीं गया है, क्योंकि यह अनदेखी को ओवरराइड करेगा।


ओपीएस $GIT_DIR/.git/info/excludeफ़ाइल में पैटर्न को जोड़कर भी ऐसा ही किया जा सकता है ।
टिम हेनिगन

1
अंतर यह है कि .gitignore फ़ाइल कोड का पालन करेगी, इसलिए यह हर जगह लागू होता है। जबकि बहिष्कृत फ़ाइल केवल आपकी रिपॉजिटरी के लिए स्थानीय होती है, जिसका अर्थ है कि यह केवल उस विशिष्ट रिपॉजिटरी के लिए लागू होती है। जब तक अन्य कमिटर्स के पास इन निर्देशिकाओं को करने का कोई कारण नहीं है, मैं .gitignore का उपयोग करने की सलाह दूंगा।
एंड्रियास

1
इसके साथ एक और समस्या यह है कि यदि आपके पास डिबग नामक आपके समाधान में एक परियोजना है, जिसे तब भी अनदेखा किया जाएगा। मुझे लगता है कि समाधान सभी उत्तरों और टिप्पणियों का एक संयोजन है - एक अलग फ़ोल्डर में आम या संदर्भित डीएलई को रखने के लिए समाधान का पुनर्गठन, फिर "बिन /" और / या वाइल्डकार्ड का उपयोग करना।
मार्सेल

16
+1 यह सुनिश्चित करने के लिए कि निर्देशिकाओं पर टिप्पणी करने के लिए पहले से ही गिट में जोड़ा नहीं गया है। यदि पहले से ही git में जोड़ा गया है, तो:git rm -rf DirectoryName/
levibostian

57

प्रश्न सभी उपनिर्देशिकाओं को अनदेखा करने के बारे में नहीं पूछ रहा है, लेकिन मुझे कहीं भी उत्तर नहीं मिला, इसलिए मैं इसे पोस्ट करूंगा */*:।


1
कोई भी मौका आप स्पष्ट कर सकते हैं? मैंने इस पर सभी प्रकार के बदलावों की कोशिश की है git addऔर उस निर्देशिका की सभी उपनिर्देशिकाओं में एक निर्देशिका और सभी फ़ाइलों को अनदेखा करने के लिए नहीं मिल सकता है । मैं कोशिश की है dirname/, dirname/*, dirname/**, dirname/*/*, यहां तक कि हताशा में dirname/*/*/*, dirname/*/*/*/*, dirname/*/*/*/*/*
क्रिस

3
*/*वर्तमान निर्देशिका में सभी उपनिर्देशिकाओं को अनदेखा करता है लेकिन फाइलों को नहीं। एक विशिष्ट उपनिर्देशिका की अनदेखी करने के लिए सामान्य gitignore उपयोग है। dirname, dirname/और dirname/*मेरे लिए सभी काम करते हैं। क्या उस निर्देशिका में कुछ भी पहले से ही प्रतिबद्ध है?
एमजॉल्ड

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

क्या होगा अगर मुझे किसी फ़ोल्डर के अंदर एक फ़ोल्डर को अनदेखा करने की आवश्यकता है, लेकिन पहले वाले को नहीं? जैसा कि फोरम / अज्ञानतावश / ... लेकिन वह फोल्डर को नजरअंदाज नहीं करता है जिसे फोरम कहा जाता है
जीन कार्लोस रासोकी

यह मेरे लिए एक निर्देशिका को अनदेखा करने के लिए काम नहीं करता है जिसका नाम डॉट से शुरू होता है। " / " और "। * / *" या तो काम नहीं करते।
टोनी

44

उपरोक्त सभी उत्तर मान्य हैं, लेकिन कुछ ऐसा है जो मुझे नहीं लगता है कि उल्लेख किया गया है कि एक बार जब आप उस निर्देशिका से एक फ़ाइल को रेपो में जोड़ते हैं, तो आप उस निर्देशिका / उपनिर्देशिका को अनदेखा नहीं कर सकते हैं जिसमें वह फ़ाइल शामिल है (गिट उस निर्देश को अनदेखा कर देगा) )।

पहले से ही जोड़ी गई फ़ाइलों को अनदेखा करने के लिए

$ git rm --cached

अन्यथा आपको रेपो के लक्ष्य निर्देशिका से सभी फ़ाइलों को पहले निकालना होगा - और फिर आप उस फ़ोल्डर को अनदेखा कर सकते हैं।


12
git rm - cached यदि आप उन्हें इतिहास के लिए अनट्रैक / अप्रासंगिक चाहते हैं, लेकिन फ़ाइलों को स्थानीय रूप से अक्षुण्ण रखना चाहते हैं।
एरिक रेपेन

29

अपनी .gitignore फ़ाइल में सही प्रविष्टियाँ डालने के अलावा, यदि आप पहले से ही रेपो में जोड़े गए कुछ चीज़ों को नज़रअंदाज़ करने की कोशिश कर रहे हैं, तो आपको करना होगा git rm -r /path/to/dirऔर इससे पहले कि आप अपने .gitignore फ़ाइल में dir जोड़ दें। अन्यथा केवल एक चीज जो आपको नजरअंदाज करेगी, वह है आपका अनदेखा निर्देश।


19

मेरी मशीन पर काम करने का एकमात्र तरीका मुझे यह करना था:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/

ध्यान दें कि आपके द्वारा शामिल किए जाने वाले प्रत्येक स्तर के लिए आपको सामग्री को कैसे स्पष्ट रूप से अनुमति देना है। इसलिए अगर मेरे पास 5 विषय के तहत उपनिर्देशिकाएं हैं, तो मुझे अभी भी उस वर्तनी की आवश्यकता है।

यह @ यारिन की टिप्पणी से यहां है: https://stackoverflow.com/a/5250314/1696153

ये उपयोगी विषय थे:

मैंने भी कोशिश की

*
*/*
**/**

तथा **/wp-content/themes/**

या /wp-content/themes/**/*

उस में से किसी ने भी मेरे लिए काम नहीं किया। निशान और त्रुटि के बहुत सारे!


13

सामग्री और उपनिर्देशिका को बाहर करने के लिए:

**/bin/*

केवल सभी उपनिर्देशिकाओं को बाहर करने के लिए लेकिन सामग्री लें, "/" जोड़ें:

**/bin/*/

9

सभी उपनिर्देशिकाओं को अनदेखा करने के लिए जिनका आप बस उपयोग कर सकते हैं:

**/

यह git के संस्करण 1.8.2 के रूप में काम करता है।


8

सभी सबफ़ोल्डर्स को अनदेखा करने का सामान्य तरीका, /binनिर्देशिका में मौजूद फ़ाइलों को ट्रैक करना जारी रखने के लिए आपकी परियोजना की .ignignore फ़ाइल में निम्न पंक्ति जोड़ना होगा:

bin/*/*

यदि आप केवल विशेष रूप से नामित सबफ़ोल्डर की उपेक्षा करना चाहते हैं, तो आप कर सकते हैं:

bin/Debug/*
bin/Release/*

nb। यदि binनिर्देशिका आपकी परियोजना (.ignignore फ़ाइल के साथ) की जड़ में नहीं है, तो उदाहरण के लिए। bin/*/*आपको जरूरत हो सकती हैpath/to/bin/*/*

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