Git में कुछ फ़ाइलों को अनदेखा कैसे करें


731

मैं एक फ़ाइल के साथ एक भंडार है Hello.java,। जब मैं इसे संकलित करता हूं, तो एक अतिरिक्त Hello.classफ़ाइल उत्पन्न होती है।

मैंने Hello.classएक .gitignoreफ़ाइल के लिए एक प्रविष्टि बनाई । हालाँकि, फ़ाइल अभी भी नज़र रखी जा रही है।

मैं Git को कैसे अनदेखा कर सकता हूं Hello.class?


8
आपका क्या मतलब है "यह काम नहीं करता है"? क्या आपने शायद अपने भंडार में हैलो.क्लास को पहले ही जोड़ लिया है? gitignores का पहले से ट्रैक की गई सामग्री पर कोई प्रभाव नहीं है। उदाहरण के लिए देखें stackoverflow.com/questions/1139762/gitignore-file-not-ignoring
Cascabel

जवाबों:


809

समस्या यह है कि .gitignoreकेवल उन फ़ाइलों को अनदेखा करता है जिन्हें पहले (द्वारा git add) ट्रैक नहीं किया गया था । git reset name_of_fileफ़ाइल को अनस्टेज करने के लिए चलाएँ और इसे रखें। यदि आप दी गई फ़ाइल को रिपॉजिटरी (पुश करने के बाद) से भी निकालना चाहते हैं, तो उपयोग करें git rm --cached name_of_file


190
कमांड git rm --cached name_of_fileआपके git रेपो से फाइल को हटा देगी। भले ही आप इसे अपनी .gitignore फ़ाइल में जोड़ दें। यह नजरअंदाज नहीं कर रहा है कि हटा रहा है।
ऑरवेलहिंडेनबर्ग

4
जिससे प्रतीत होता है कि ओपी इस मामले में क्या चाहता था।
ओन्ड्रेज स्लिंटक

40
मुझे खुशी है कि आपके समाधान ने @ Kohan95 के लिए काम किया! यद्यपि चयनित उत्तर के आधार पर इस प्रश्न का नाम बदला जाना चाहिए। मेरी टिप्पणी देवों के लिए सिर्फ एक चेतावनी है जो यह नहीं जानते कि कमान क्या करती है।
OrwellHindenberg

91
git reset name_of_fileट्रैकिंग हटाता है और फ़ाइल को हटाता नहीं है।
सेस टिम्मरमैन

7
ट्राईड git rm - cached <name_of_file> इसने रेपो में फाइल को डिलीट कर दिया, लेकिन चूंकि यह .ignignore फाइल में था, इसलिए लोकल कॉपी को डिलीट नहीं किया गया था। एक और नोट के रूप में, एक डायरेक्टरी को जोड़ने के लिए, आपको इसे आगे पीछे वाले स्लैश '/' के साथ रखना होगा। मैं रूबीम की कॉन्फिग डायरेक्टरी को एक रूबी प्रोजेक्ट में हटा रहा था जिसे किसी ने चेक किया था, जो ".idea" था। फ़ाइल में मैंने ".idea /" और उसके बाद "git rm --cached -r .idea" निर्देशिका को हटाने और इसके तहत सब कुछ हटाने के लिए (क्योंकि गिट केवल संस्करण फ़ाइलें, निर्देशिका नहीं।)
डग नोएल

222

नई फ़ाइलों को अनदेखा कैसे करें

वैश्विक स्तर पर

अपनी फ़ाइल (ओं) में पथ जोड़ें जो आप अपनी .gitignoreफ़ाइल को अनदेखा करना चाहते हैं (और उन्हें प्रतिबद्ध करें)। ये फ़ाइल प्रविष्टियाँ रिपॉजिटरी की जाँच करने वाले अन्य लोगों के लिए भी लागू होंगी।

स्थानीय स्तर पर

अपनी फ़ाइल (ओं) में पथ जोड़ें जो आप अपनी .git/info/excludeफ़ाइल को अनदेखा करना चाहते हैं । ये फ़ाइल प्रविष्टियाँ केवल आपकी स्थानीय कार्यशील प्रति पर लागू होंगी।

बदली हुई फ़ाइलों को अनदेखा कैसे करें (अस्थायी रूप से)

संशोधित फ़ाइलों को संशोधित के रूप में सूचीबद्ध करने के लिए अनदेखा करने के लिए, आप निम्न git कमांड का उपयोग कर सकते हैं:

git update-index --assume-unchanged <file>

उस अज्ञानता को हटाने के लिए निम्नलिखित आदेश का उपयोग करें:

git update-index --no-assume-unchanged <file>

एक मौजूदा एपीआई कुंजी को गिथब में धकेलने से रोकने वाली फ़ाइल को रोकने के लिए बिल्कुल सही!
जिम इन टेक्सास

1
@Xman आपने क्यों कहा कि यह अस्थायी है? मैंने आपके द्वारा बताए गए कदमों को localनजरअंदाज कर दिया, और अपने सिस्टम को फिर से शुरू किया, यह अभी भी सीधे साफ काम करता है।
विवेक वर्धन

1
उपयोगी update-indexचाल के लिए धन्यवाद , एक .gitignoreफ़ाइल को बदलने से बचने के लिए बिल्कुल सही , जिसे फिर गिट द्वारा ट्रैक किया जाता है!
थॉमस पी।

@mcbjam कोई विशेष git अनदेखा कमांड नहीं है। काम की प्रतिलिपि के भीतर उचित स्थान पर स्थित .gitignore फ़ाइल को संपादित करें। फिर आपको इसे .gitignore को जोड़ना चाहिए और इसे करना चाहिए। हर कोई जो रेपो को क्लोन करेगा, उन फाइलों को अनदेखा किया जाएगा।
Xman क्लासिकल

@Vivek वर्धन गिट अपडेट-इंडेक्स -आसमान-अपरिवर्तित सूचकांक पर एक अस्थायी मुखौटा की तरह है। जब तक आप इसे बंद नहीं करेंगे तब तक यह प्रभावी रहेगा। संभवतः मेरी बात को और अधिक स्पष्ट करने के लिए, सूचकांक को शुरू में (जो कि रीड-ट्री के ठीक बाद में है) "में" ट्री-ईश की सभी फाइलें शामिल हैं जो अभी पढ़ी गई थीं। इसलिए "गेट को एक अंधी आंख में बदल दें"। एक इंडेक्स प्रविष्टि वास्तव में इसे हटाने के बराबर नहीं है।
Xman क्लासिकल

150

निम्न पंक्ति जोड़ें।

/Hello.class

यह Hello.class को git से बाहर कर देगा। यदि आपने पहले ही इसे कर लिया है, तो निम्नलिखित कमांड चलाएँ:

git rm Hello.class

यदि आप सभी श्रेणी की फ़ाइलों को git से बाहर करना चाहते हैं, तो निम्न पंक्ति को .gitignore में जोड़ें:

*.class

32
जोड़ने के Hello.classलिए .gitignoreकिसी Hello.classभी उपनिर्देशिका में किसी भी फ़ाइल को अनदेखा कर सकते हैं । यदि आप फ़ाइल को फ़ाइल Hello.classके समान निर्देशिका में केवल अनदेखा करना चाहते हैं .gitignore, तो /Hello.classइसके बजाय एक पंक्ति का उपयोग करें।
ndim

आप .gitignoreफ़ाइल कहाँ रखते हैं ?
कॉडीबगस्टीन

6
@ यदि आप .gitignoreएक गिट परियोजना में कहीं भी डाल सकते हैं - अगर कोई रास्ता शुरू होता है /, तो यह .gitignoreफ़ाइल के स्थान के सापेक्ष होगा ; अन्यथा यह वर्तमान निर्देशिका और इसके वंशज निर्देशिका में फ़ाइलों के लिए पुनरावर्ती रूप से संदर्भित करेगा।
आर्मंड

109

1) एक .gitignoreफ़ाइल बनाएँ । ऐसा करने के लिए, आप बस एक .txtफ़ाइल बनाते हैं और एक्सटेंशन को निम्नानुसार बदलते हैं:

यहां छवि विवरण दर्ज करें

फिर आपको नाम बदलना होगा, एक सेमी विंडो में निम्नलिखित पंक्ति लिखनी होगी:

 rename git.txt .gitignore

git.txtआपके द्वारा अभी-अभी बनाई गई फ़ाइल का नाम कहां है।

फिर आप फ़ाइल को खोल सकते हैं और उन सभी फ़ाइलों को लिख सकते हैं जिन्हें आप रिपॉजिटरी में जोड़ना नहीं चाहते हैं। उदाहरण के लिए, मेरा ऐसा दिखता है:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

एक बार जब आपके पास यह हो जाता है, तो आपको इसे अपने गिट रिपॉजिटरी में जोड़ना होगा। आपको उस फ़ाइल को सहेजना होगा जहां आपकी रिपॉजिटरी है।

फिर Git Bash में आपको निम्नलिखित पंक्ति लिखनी होगी:

git config --global core.excludesfile ~/.gitignore_global

यदि भंडार पहले से मौजूद है तो आपको निम्नलिखित कार्य करने होंगे:

  1. git rm -r --cached .
  2. git add .
  3. git commit -m ".gitignore is now working"

यदि चरण 2 काम नहीं करता है, तो आपको उन फ़ाइलों के पूरे मार्ग को लिखना चाहिए जिन्हें आप जोड़ना चाहते हैं।


आप प्रॉम्प्ट में "copy con .gitignore" कमांड का उपयोग कर सकते हैं और फिर विंडोज एक्सप्लोरर के बिना सीधे फाइल बनाने के लिए CTRL + Z दबाएं।
हिंगिंगर

61

अनदेखा करने के लिये:

git update-index --assume-unchanged <path/to/file>

अनदेखा करना पूर्ववत करें:

git update-index --no-assume-unchanged <path/to/file>

6
मैं इस समस्या के समाधान के रूप में चार्ट में सबसे ऊपर रहना चाहूंगा .... इसके बहुत ही सरल और सुरुचिपूर्ण
user1457958

"इसकी बहुत ही सरल और सुरुचिपूर्ण" - वास्तव में नहीं : '' मान लें कि किसी अनदेखे तंत्र के लिए अपरिवर्तित का दुरुपयोग नहीं किया जाना चाहिए। यह है "मुझे पता है कि मेरे फाइलसिस्टम ऑपरेशन धीमी हैं। मैं Git से वादा करूंगा कि मैं इन रास्तों को नहीं बदलूंगा ..." विशेष रूप से, यह एक वादा नहीं है ... कि Git हमेशा इन रास्तों को अनमॉडिफाइड मान लेगा - अगर Git एक पथ निर्धारित कर सकता है ... अतिरिक्त lstat(2)लागत के बिना ही बदल गया है , यह रिपोर्ट करने का अधिकार सुरक्षित रखता है कि पथ को संशोधित किया गया है (... git commit -aयह उस स्थिति के लिए स्वतंत्र है)। '
क्रिस

47

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

  1. अनदेखी के लिए: git update-index --assume-unchanged <file>
  2. अनदेखा फ़ाइलों को वापस लाने के लिए: git update-index --no-assume-unchanged <file>

4
क्या यह सभी फाइलों पर लागू होता है ? यह स्पष्ट नहीं है कि उन आदेशों को अनदेखा / अनदेखा करने के लिए सिर्फ एक फ़ाइल पर कैसे लागू किया जा सकता है।
javadba

@ कपिल आखिर !! कुछ जो वास्तव में एक ट्रिलियन गिट कमांड विविधताओं के बीच काम करता है! कुछ बेवकूफ बिल्ड.xml फ़ाइलों को अनदेखा करने के लिए हर उत्तर की कोशिश की जो हर बिल्ड के बाद दिखाई देती है ... धन्यवाद!
किलोजॉय

1
कृपया न करें : 'मान लें कि किसी अनदेखे तंत्र के लिए अपरिवर्तित नहीं होना चाहिए। यह है "मुझे पता है कि मेरे फाइलसिस्टम ऑपरेशन धीमी हैं। मैं Git से वादा करूंगा कि मैं इन रास्तों को नहीं बदलूंगा ..." विशेष रूप से, यह एक वादा नहीं है ... कि Git हमेशा इन रास्तों को अनमॉडिफाइड मान लेगा - अगर Git एक पथ निर्धारित कर सकता है ... अतिरिक्त lstat(2)लागत के बिना ही बदल गया है , यह रिपोर्ट करने का अधिकार सुरक्षित रखता है कि पथ को संशोधित किया गया है (... git commit -aयह उस स्थिति के लिए स्वतंत्र है)। '
क्रिस

22

.gitignoreनिर्देशिका में एक बनाएँ जहाँ .it है। आप इसमें एक नई लाइन द्वारा अलग की गई फाइलों को सूचीबद्ध कर सकते हैं। आप वाइल्डकार्ड का उपयोग भी कर सकते हैं:

*.o
.*.swp

3
फ़ाइलों में टूल-विशिष्ट पैटर्न (यानी आपकी अस्थायी विम फ़ाइलों) को डालने से बचने के लिए यह एक अच्छा अभ्यास है .gitignore(जब तक कि उपकरण परियोजना द्वारा अनिवार्य नहीं है)। आप अपने पसंदीदा उपकरण के लिए प्रति-उपयोगकर्ता फ़ाइल (सेट core.excludesFile) को बाहर कर सकते हैं; वे आपके सभी भंडार में काम करेंगे। उदा git config --global core.excludesFile "$HOME/.git-user-excludes", फिर उन्हें उस फ़ाइल में रखें।
क्रिस जॉन्सन

@ क्रिस: टिप के लिए धन्यवाद। लेकिन मैंने इसे सिर्फ इसलिए लिखा क्योंकि मेरे दिमाग में कुछ भी अच्छा नहीं आया :)
टर्मिनस

1
@ChrisJohnsen 'उपकरण विशिष्ट?' विम के लिए ?? मुझे लगता है कि यह विम स्वैप फ़ाइलों को बाहर करने के लिए सुरक्षित है ..
javadba

16

आधिकारिक GitHub साइट से:

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

git rm --cached FILENAME

या

git rm --cached .

12

आपको कुछ ऐसा लिखना चाहिए

*.class

आपकी .gitignoreफ़ाइल में।


4
@AgentZebra जीट को समाप्त करने वाली सभी फ़ाइलों को अनदेखा करने के *.classलिए आपको अपनी प्रविष्टि को जोड़ना चाहिए । .gitignore.class
किंगक्रंच

7

वह फ़ाइलें जोड़ें जिन्हें आप अनदेखा करना चाहते हैं .gitignore:

*।कक्षा

* .projects

* .prefs

* .project



5

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

git rm --cached FILENAME

यदि आप प्रोजेक्ट को नए सिरे से शुरू कर रहे हैं और आप कुछ फ़ाइलों को Git अनदेखा करना चाहते हैं, तो Git अनदेखा फ़ाइल बनाने के लिए नीचे दिए गए चरणों का पालन करें:

  1. अपने Git रिपॉजिटरी में नेविगेट करें।
  2. "टच .gitignore" दर्ज करें जो एक .gitignoreफ़ाइल बनाएगा ।

3

आप संपूर्ण फ़िलिपीसेस को बाहर करने के लिए (.gitignore के बजाय) .itattributes का उपयोग कर सकते हैं। फ़ाइल बहुत स्व-व्याख्यात्मक है, लेकिन मैं संदर्भ के लिए यहां सामग्री चिपका रहा हूं। अंतिम पंक्ति पर ध्यान दें (* .class बाइनरी):

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.mo binary
*.pdf binary
*.phar binary
*.class binary

2

निम्न पंक्ति को .गित / जानकारी / बहिष्कृत में जोड़ें:
Hello.class


क्या आप फ़ोल्डर के अंदर फ़ाइलों को बदलने वाले हैं .git?
पीटर मोर्टेनसेन

हो सकता है, उन फ़ाइलों को अंडरस्टैंडिंग से छूने के लिए एक अच्छा विचार नहीं है।
9

2

मेरे पास फ़ाइल "डंप .rdb" के साथ एक समान मुद्दा था।
मैंने इस फ़ाइल को .gitignore फ़ाइल में विभिन्न तरीकों से जोड़ने का प्रयास किया, लेकिन केवल एक ही तरीके से काम किया।

.Ignignore फ़ाइल के अंत में अपना फ़ाइल नाम जोड़ें

नोट: फ़ाइल को कहीं और जोड़ना काम नहीं किया।

उदाहरण के लिए, देखें: https://gitlab.com/gitlab-org/gitlab-ce/raw/b3ad3f202478dd88a3cfe4461703bc3df1019f90/.gitignore


2

यह वेबपृष्ठ उपयोगी और समय की बचत करने वाला हो सकता है जब इसके साथ काम किया जा रहा हो .gitignore

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


1

मैंने यह कोशिश की -

  1. उन फ़ाइलों को सूचीबद्ध करें जिन्हें हम अनदेखा करना चाहते हैं

git status .idea/xyz.xml .idea/pqr.iml Output .DS_Store

  1. चरण # 1 की सामग्री की प्रतिलिपि बनाएँ और इसे .gitignore फ़ाइल में जोड़ें।

echo " .idea/xyz.xml .idea/pqr.iml Output .DS_Store" >> .gitignore

  1. मान्य

git status .gitignore

इसी तरह हम निर्देशिका और इसके सभी उप dir / फ़ाइलों को जोड़ सकते हैं, जिसका उपयोग करके हम git स्थिति में अनदेखा करना चाहते हैं directoryname/*और मैंने srcनिर्देशिका से इस कमांड को निष्पादित किया है ।


1
  1. .Gitignore फ़ाइल पर जाएं और उन फ़ाइलों के लिए प्रविष्टि जोड़ें जिन्हें आप अनदेखा करना चाहते हैं
  2. Daud git rm -r --cached .
  3. अब दौड़ो git add .

0

मैंने कोशिश की है --assume-unchangedऔर यह भी .gitignoreलेकिन न तो अच्छी तरह से काम किया है। वे शाखाओं को स्विच करना और दूसरों से परिवर्तनों को मर्ज करना कठिन बनाते हैं। यह मेरा समाधान है:

जब मैं प्रतिबद्ध होता हूं , मैं फ़ाइलों को परिवर्तनों की सूची से मैन्युअल रूप से हटा देता हूं

इससे पहले कि मैं खींच , मैं भी छिपा सकते बदली हुई फ़ाइलें। और खींचने के बाद, मैं एक स्टैश पॉप करता हूं ।

  1. जीआईटी की मार
  2. पकड़ खींचो
  3. git stash पॉप

चरण 3 कभी-कभी एक मर्ज को ट्रिगर करेगा और परिणामस्वरूप संघर्ष हो सकता है जिसे आपको हल करने की आवश्यकता है, जो एक अच्छी बात है।

यह मुझे स्थानीय परिवर्तन रखने की अनुमति देता है जो टीम में दूसरों के साथ साझा नहीं किए जाते हैं।

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