गिट परियोजना पर किसी भी 'बिन' निर्देशिका की अनदेखी करना


1236

मैं इस तरह एक निर्देशिका संरचना है:

.git/
.gitignore
main/
  ...
tools/
  ...
...

मुख्य और उपकरण के अंदर, और किसी भी अन्य निर्देशिका में, किसी भी स्तर पर, एक 'बिन' निर्देशिका हो सकती है, जिसे मैं अनदेखा करना चाहता हूं (और मैं इसके तहत भी सब कुछ अनदेखा करना चाहता हूं)। मैंने इनमें से प्रत्येक पैटर्न को .gitignore में आज़माया है, लेकिन उनमें से कोई भी काम नहीं करता है:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

क्या कोई मेरी मदद कर सकता है? पहला पैटर्न (मुझे लगता है कि मुझे काम करना चाहिए) ठीक काम करता है अगर मैं ऐसा करता हूं:

/main/**/bin/**/*

लेकिन मैं हर शीर्ष-स्तरीय निर्देशिका के लिए एक प्रविष्टि नहीं करना चाहता हूं और मैं हर बार जब मैं एक नया जोड़ देता हूं, तो इसे संशोधित करना नहीं चाहता।

यह नवीनतम msysgit का उपयोग करके विंडोज पर है।

संपादित करें: एक और बात, ऐसी फाइलें और निर्देशिकाएं हैं जिनके नाम में 'बिन' का विकल्प है, मैं नहीं चाहता कि उन लोगों को नजरअंदाज किया जाए :)


14
संभवत: कोई व्यक्ति सहायक के रूप में मिलेगा: यदि आपके पास कुछ रिपॉजिटरी हैं और प्रत्येक के पास एक ही .itignore फ़ाइल है, तो आप इसे "सामान्य" स्थान पर रख सकते हैं और लॉन्च कर सकते हैं> git config --global core.excludesfile ~ / .gitignore_global अंतिम पैरामीटर पथ है। आम स्थान पर। PS, मैं नया हूँ और निश्चित नहीं हूँ कि यह 'सर्वोत्तम अभ्यास' की सिफारिश है। तो कृपया मुझे बताएं कि क्या आप ऐसा नहीं करना चाहते हैं। धन्यवाद।
बुद्ध

**वाक्य रचना अब लगता है (मार्च 2013 git 1.8.2) आधिकारिक तौर पर दस्तावेज: देखने के लिए नीचे दिए गए मेरा उत्तर
VonC

2
यदि कोई वास्तविक मैनुअल पेज के सबसे अद्यतित संस्करण को पढ़ना चाहता है, तो gitignore (5) मैनुअल पेज देखें

मित्रवत विकल्प यदि आप एक लाइन की जानकारी के लिए निबंध पढ़ने के थक गए हैं, तो atlassian.com/git/tutorials/saving-changes/…
suazithustra

जवाबों:


1833

संस्करण 1.8.2 से पहले, **में कोई विशेष अर्थ नहीं था .gitignore। 1.8.2 git का **अर्थ शून्य या अधिक उप-निर्देशिकाओं ( रिलीज़ नोट्स देखें ) का समर्थन करता है।

एक निर्देशिका ट्री में मौजूदा स्तर के नीचे कहीं भी बिन नामक सभी निर्देशिकाओं को अनदेखा करने का तरीका .gitignoreपैटर्न के साथ एक फ़ाइल के साथ है:

bin/

में manपेज, वहाँ एक निर्देशिका कहा जाता अनदेखी का एक उदाहरण fooएक अनुरूप पद्धति का उपयोग कर।

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

git rm -r --cached bin

72
1.8.2 git से शुरू होकर, git फाइलों **में स्वीकार करेगा .gitignore(स्रोत: 1.8.2 चैंज )
कार्लोस कैंपडरो

15
है binकी एक ही bin/?
निसबा

29
@ निस्बा, वे अलग हैं, binबिन नाम की फाइलों को नजरअंदाज करेंगे, जबकि bin/बिन नाम की निर्देशिकाओं के लिए है
रानी खीर

8
चूँकि मैं इस पर गिर गया: फ़ोल्डर का नाम git-command IS केस संवेदनशील :) "बिन! = बिन" - शायद मैं इस संकेत से किसी को कुछ मिनटों में छोड़
दूं

1
Windows10 में आप एक .itignore फ़ाइल नहीं बना सकते हैं, आपको एक gitignore.txt बनाना होगा और फिर इस फ़ाइल को बनाने के लिए कमांड प्रॉम्प्ट में ren gitignore.txt .gitignore चलाएं
shabby

463

.gitignoreअपने सपनों का प्रतीत हो रहा है:

bin/

शीर्ष स्तर पर।


बहुत बहुत धन्यवाद आप मदद के लिए बस अनदेखा फ़ाइलों उदाहरण चेकआउट करने के लिए मत भूलना: git चेकआउट बिन *
क्रिस सिम

1
इसे gitignore_global
μολ.ν.λα

@GAlexander, कोई विश्व स्तर पर बिन / निर्देशिका की उपेक्षा क्यों करना चाहेगा? उनके पास अक्सर सामग्री होती है। और वैश्विक अनदेखी रिपॉजिटरी के अन्य उपयोगकर्ताओं को प्रभावित नहीं करेगी।
माइकल क्रेलिन -

234

मुझे लगता है कि यह शुरुआती लोगों के लिए उल्लेख के लायक है:

यदि आपके पास पहले से कोई फ़ाइल है, और आप इसे अनदेखा करना चाहते हैं, तो यदि आप एक नियम जोड़ते हैं तो Git फ़ाइल को अनदेखा नहीं करेगा । उन मामलों में, आपको अपने टर्मिनल में निम्नलिखित कमांड चलाकर, पहले फ़ाइल को अनट्रैक करना चाहिए:

git rm --cached

इसलिए यदि आप संपादन के बाद अपने स्थानीय भंडार (जो पहले से मौजूद हैं) में कुछ निर्देशिकाओं को अनदेखा करना चाहते हैं। तो आप इसे अपने रूट डायर पर चलाना चाहते हैं।

git rm --cached -r .
git add .

यह मूल रूप से आपके स्थानीय रेपो और अनस्टेज की अनदेखी फाइलों को 'रिफ्रेश' करेगा।

देख:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/


अगर मैं आमतौर git add -Aपर अपने कमिट पर करता हूं, तो क्या मैं इसके बजाय इसका उपयोग कर सकता हूं? और क्या मैं पहली पंक्ति में भी -A के साथ डॉट को बदल सकता हूँ?
अजाक्स333221

69

**ठीक से पहले काम नहीं किया, लेकिन जब से Git 1.8.2 (मार्च, 8 वीं 2013) , यह स्पष्ट रूप से उल्लेख किया है और समर्थित किया जा रहा है:

इन .gitignoreऔर .gitattributesफाइल्स में पैटर्न 0 और उससे अधिक स्तर के सबडायरेक्ट से मेल खाने वाले पैटर्न के रूप में हो सकते हैं**/

उदाहरण के लिए " foo/**/bar" " " " bar" " foo" स्वयं या " foo" के उपनिर्देशिका में ।

आपके मामले में, इसका मतलब है कि यह लाइन अब समर्थित हो सकती है:

/main/**/bin/

46
[Bb]in/

ऊपरी और निचले दोनों मामलों में मेल खाता है


2
[B]in/केवल ऊपरी मामला होगा
Gank

केवल Binफ़ोल्डर को कैसे अनदेखा करें और कैसे करें bin? [B]in/दोनों के लिए प्रतिबद्ध होगा Binऔर bin
गैंक

4
यह करना चाहिए, @Gank: Bin/ !bin/
Marco G

34

मैंने इसे यहाँ उल्लेख नहीं देखा, लेकिन यह मामला संवेदनशील प्रतीत होता है। एक बार जब मैं / बिन में बदल गया तो फाइलों को उम्मीद के मुताबिक नजरअंदाज कर दिया गया।


3
यह मूल प्रश्न का उत्तर नहीं है जिसके बारे में स्पष्ट रूप से बताया गया था bin, नहीं Bin
सीबी बेली

49
हालांकि इसका जवाब नहीं है, यह दूसरों के लिए एक ही मुद्दे पर खोज करने के लिए पूर्णता को जोड़ता है (स्वयं, अभी-अभी)।
Jay

25

[Bb]in समस्या को हल करेंगे, लेकिन ... यहां उन चीजों की अधिक व्यापक सूची को नजरअंदाज करना चाहिए (GitExtension द्वारा नमूना सूची):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

3
नोट: इस तरह की सामग्री आपके वैश्विक gitignore में होनी चाहिए (आमतौर पर आपके होम डायरेक्टरी में।) प्रोजेक्ट gitignore को केवल आपके प्रोजेक्ट के लिए विशिष्ट चीजों को अनदेखा करना चाहिए (यानी सी ऐप के लिए .o फाइलें)।
BraveNewCont

18

यदि आप .gitignoreकिसी भी Visual Studio (.NET) समाधान के लिए एक महान वैश्विक फ़ाइल की तलाश कर रहे हैं - मैं आपको यह प्रयोग करने की सलाह देता हूं: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK। यह .gitignore.NET प्रोजेक्ट्स के लिए सबसे व्यापक है ।


5
यह वास्तव में इस सवाल का जवाब नहीं है, लेकिन यह वास्तव में मैं क्या देख रहा था।
डेव

18

चरण 1: फ़ाइल में निम्न सामग्री जोड़ें।

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

चरण 2: सुनिश्चित करें कि प्रभावी हो

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

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

पीएम ने सांत्वना दी तब समस्या पूरी तरह से हल हो जाएगी।


8

वास्तव में जवाब में से कोई भी वास्तव में मेरे लिए काम नहीं करता था; मेरे लिए काम करने वाला एकमात्र (लिनक्स पर) था:

**/bin
(yes without the / in the end)

git version 2.18.0 

क्या binउप-निर्देशिकाओं में नामित सभी फ़ोल्डरों को भी अनदेखा किया गया?
दाखेश

5

एक नोटिस के रूप में;

यदि आप इस बारे में सोचते हैं कि .gitignoreयह एक तरह से काम नहीं करता है (इसलिए इसमें foo/*फ़ोल्डर जोड़ा गया है, लेकिन फिर git statusभी उस फ़ोल्डर की सामग्री को संशोधित या ऐसा कुछ दिखा रहा है), तो आप इस कमांड का उपयोग कर सकते हैं;

git checkout -- foo/*


3

२.१३.३ और उसके बाद, अपनी .itignore फ़ाइल में सिर्फ बिन लिखकर बिन और उसकी सभी उपनिर्देशिकाओं और फ़ाइलों को अनदेखा करना चाहिए

बिन


2

** .ignignore फ़ाइल में ** / बिन / जोड़कर मेरे लिए चाल चली गई (नोट: बिन फ़ोल्डर को इंडेक्स में नहीं जोड़ा गया)।


1

अगर पैटर्न .gitignoreएक स्लैश के साथ समाप्त होता है /, तो यह केवल एक निर्देशिका के साथ एक मैच ढूंढेगा।

दूसरे शब्दों में, इसके bin/नीचे एक निर्देशिका binऔर पथ का मिलान होगा, लेकिन एक नियमित फ़ाइल या प्रतीकात्मक लिंक से मेल नहीं खाएगा bin


यदि पैटर्न में कोई स्लैश नहीं है , जैसे binGit इसे शेल ग्लोब पैटर्न (लालची) के रूप में मानता है। तो सबसे अच्छा सरल का उपयोग होगा /bin

bin इस विशेष समस्या के लिए सबसे अच्छा समाधान नहीं होगा।


क्या आपका मतलब 'ए' से शुरू हुआ था /?
सिरेश

0

मेरे मामले में gitignore फ़ाइल की एन्कोडिंग समस्याग्रस्त थी, जांचें कि क्या यह UTF-8 है

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