gitignore फ़ोल्डर की उपेक्षा नहीं करता है


135

मेरी परियोजना की जड़ में मेरे पास एक fooफ़ोल्डर है। fooफ़ोल्डर के अंदर मेरे पास एक barफ़ोल्डर है। मैं अपने barफ़ोल्डर के अंदर सभी फ़ाइलों के लिए सभी परिवर्तनों को अनदेखा करना चाहूंगा । मेरे पास यह है gitignore:

/foo/bar

फ़ोल्डर की जाँच की जाती है: यह मौजूद है और इसमें अनदेखी की जाने वाली फाइलें हैं। gitignoreहै commitटेड। हालाँकि, मेरे पास एक फ़ाइल है जहाँ मैं एक बदलाव करता हूँ और मेरे barफ़ोल्डर के अंदर है । जब मैं टाइप करता हूँ

git status

मेरे अंदर git bashमैं उस फ़ाइल को देखता हूं जिसे अनदेखा किया जाना चाहिए था। क्या कारण हो सकता है और मैं अपने बार फ़ोल्डर के अंदर सभी फ़ाइलों को सफलतापूर्वक कैसे अनदेखा कर सकता हूं?

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


भविष्य में, आपको कुछ अनदेखा करने के लिए अपने इग्नोर को संशोधित करने की आवश्यकता नहीं है। git add -f ignored-fileयहां तक ​​कि अगर यह आपके इग्नोर में है तो एक फाइल जोड़ देगा।
क्रिस

क्या git status foo/bar/file-that-should-be-ignoredदेता है?
क्रिस

यदि कोई परिवर्तन हुआ तो फ़ाइल को अनदेखा कर देना चाहिए। मैं स्पष्ट रूप से कुछ याद आ रही है, लेकिन मेरी जानकारी के अनुसार Git स्थिति की सूची प्रदान की है कि मामले में खाली होना चाहिए कि / foo / बार .gitignore में मौजूद है
लाजोस अर्पाद

4
ऐसा लगता है कि फ़ाइल वास्तव में Git द्वारा ट्रैक की जा रही है। यह कुछ बिंदु पर रिपॉजिटरी में जोड़ा गया होगा। आप इसके इतिहास को देख सकते हैं git log foo/bar/file-that-should-be-ignored। यदि यह उस रिपॉजिटरी का हिस्सा नहीं होना चाहिए जिसे आपको इसे हटा देना चाहिए git rm --cached foo/bar/file-that-should-be-ignoredऔर फिर नीचे रेक द्वारा सुझाए गए अनुसार कमिट करना चाहिए (हालांकि मैं इसे सिर्फ फाइल पर करूंगा, पूरे फोल्डर में नहीं)। यह (ए) फ़ाइल को गिट से हटा देगा, (बी) फ़ाइल को अपनी स्थानीय प्रतिलिपि में रखें, और (सी) फ़ाइल को तब हटा दें, जब अन्य fetchया pullनई प्रतिबद्ध हों।
क्रिस

जवाबों:


341

मैं अनुमान लगा रहा हूँ कि इस फ़ोल्डर को पहले git में चेक किया गया है?

भागो git rm -r --cached <folder>और फिर से जांच करो।


3
यह फ़ोल्डर को (रेपो के वर्तमान संस्करण) से पूरी तरह से हटा देगा। ओपी चाहता है कि फ़ोल्डर वहां हो, लेकिन नए बदलावों को ट्रैक नहीं किया जाना चाहिए
गारेथ

दुर्भाग्य से मुझे स्वीकार को हटाना होगा। इस समाधान को धक्का दिए जाने पर फ़ाइलों के दूरस्थ संस्करणों को हटा दिया गया। मैं एक फ़ोल्डर की सभी फ़ाइलों को अनदेखा करने के लिए gitignore सेट करना चाहता हूं, न कि इसे रिमोट से निकालना। क्या यह संभव है? मैंने समाधान वापस कर दिया है।
लाजोस अर्पाद

12
git update-index --assume-unchanged <folder>शायद?
ध्यान देना

3
@ लाजो क्या आपको इस भ्रम "टिप्पणी" को जोड़ने के बजाय सिर्फ उसकी बग को ठीक नहीं करना चाहिए था?
cregox

2
@ कैवास, जैसा कि यह साइट ज्ञान साझा करने के बारे में है, इसका उत्तर है: नहीं। यह एक जवाब स्वीकार करने के लिए भ्रामक है जिसमें एक बग होता है। वह -r वैकल्पिक नहीं है।
लाजोस अर्पाद

46

मेरे लिए, स्वीकृत उत्तर समाधान का हिस्सा था, संपूर्ण समाधान नहीं। हो सकता है, दूसरे चरण जो मैं पोस्ट करने जा रहा हूं, वे स्पष्ट थे, लेकिन मैंने उन्हें पहले याद किया। यह सुनिश्चित करने के लिए कि मैंने अपनी .gitignoreफ़ाइल को अनदेखा करने के लिए अपने फ़ोल्डर को अनदेखा करने के लिए क्या कदम उठाए हैं :

  1. ऐसे कोई भी बदलाव करें जिन्हें आपको ठीक करने / बदलने की आवश्यकता है।
  2. यह आदेश चलाएँ: git rm -r --cached . (जो आपके git रिपॉजिटरी को रिफ्रेश करने के लिए git इंडेक्स से सब कुछ हटा देता है)
  3. फिर यह कमांड चलाएँ: git add . (रेपो में सब कुछ वापस जोड़ने के लिए)
  4. अंत में, इन परिवर्तनों का उपयोग करके प्रतिबद्ध करें git commit -m ".gitignore Fixed"

आप लेख का लिंक पा सकते हैं जहां से मुझे यहां समाधान मिला ।


1
यह मूल प्रश्न पर आधारित व्यवहार्य समाधान नहीं है। @ लैगोस-आर्पेड ने विशेष रूप से एक उपनिर्देशिका के बारे में पूछा और पूरी परियोजना के बारे में नहीं। आपका समाधान गिट रिपॉजिटरी के मूल स्तर से सबकुछ हटा देता है और इस समस्या से निपटने के लिए यह अनुशंसित दृष्टिकोण नहीं है।
justinhartman

यहां तक ​​कि अगर यह केवल एक उपनिर्देशिका है, तो यह समाधान मेरे लिए काम करता है क्योंकि मैं केवल एक फ़ाइल के साथ काम कर रहा था। क्या आप यह विस्तृत रूप से बता सकते हैं कि इसकी अनुशंसा क्यों नहीं की गई है?
सिकंदरबबवानी

1
आप जो काम कर रहे थे वह सारहीन है। यह प्रश्न का उत्तर नहीं है और संभावित रूप से खतरनाक है क्योंकि अन्य उत्तर ने इंगित किया है। यह रिमोट रेपो पर सामान को हटा देता है जो आपको जरूरी नहीं है।
रिचीएच

8

मुझे यह समस्या हो रही थी और मुझे एहसास हुआ कि git वास्तव में फ़ाइलों / फ़ोल्डरों को सही ढंग से अनदेखा कर रहा था, लेकिन मेरे कोड एडिटर (विजुअल स्टूडियो कोड) बस छोटी गाड़ी थी और UI साइडबार में ठीक से उन्हें "ग्रेइंग" नहीं कर रही थी। मैंने VSCode को फिर से शुरू किया और वे उम्मीद के मुताबिक बाहर हो गए।


यहाँ भी: VS कोड v1.30.2 (उपयोगकर्ता)
1919 xinthose

मेरे लिए भी वैसा ही। इस समाधान के लिए बहुत बहुत धन्यवाद! मैं सोच रहा था कि जब तक विजुअल स्टूडियो कोड v1.44.2 पर VS Code.I'm को फिर से शुरू करने की कोशिश नहीं की गई थी, तब तक मेरा .gitignore काम नहीं कर रहा था।
फ्रिट्ज़ लिम

6

स्वीकृत उत्तर के अतिरिक्त

git rm -r --cached /foo/bar/
git status

जब मैं ऐसा करता हूं, टर्मिनल rmउस निर्देशिका में फ़ाइलों के लिए एक गुच्छा दिखाता है । इसलिए एक और प्रतिबद्ध को रोकने के लिए जो अनावश्यक रूप से रिमोट को प्रभावित कर सकता है, मैंने किया:

git reset HEAD *
git status

उसके बाद, उसने कहा कि कुछ नहीं करना है और जब मैं फ़ाइलों को अंदर संशोधित करता /foo/bar/हूं और एक git statusi प्राप्त करता हूं nothing to commit


1
यह सिर्फ मुझे वहीं लौटाता है जहां मैंने शुरू किया था (समस्या)
शोनूबी कोर्डे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.