गिट ट्रैकिंग से एक फ़ोल्डर निकालें


403

मुझे एक फ़ोल्डर (नाम अपलोड) को ट्रैकिंग से बाहर करने की आवश्यकता है। मैंने दौड़ने की कोशिश की

git rm -r --cached wordpress/wp-content/uploads

और उसके बाद मैंने .gitignore के लिए रास्ता जोड़ा

/wordpress/wp-content/uploads

लेकिन जब मैं भागा तो git statusवे हटते हुए दिखाई दिए। यदि मैं परिवर्तनों को करने का प्रयास करता हूं, तो फ़ाइलों को हटा दिया जाएगा, न केवल ट्रैकिंग से हटा दिया जाएगा।

मैं क्या गलत कर रहा हूं?

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

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

लेकिन यह केवल फ़ाइलों को अनट्रैक करने के लिए लगता है। लेकिन मुझे ट्रैकिंग से एक संपूर्ण फ़ोल्डर (सबफ़ोल्डर्स सहित) निकालने की आवश्यकता है।


हटाए गए का अर्थ यह नहीं है कि git आपकी फ़ाइलों को हटाने जा रहा है। हालाँकि, यदि आप उपयोग करेंगे, तो reset --hardयह होगा।
केल्टर

2
जैसा कि @keltar उल्लेख करता है, कमिट करने से आपकी फ़ाइलें नष्ट नहीं होंगी। यह Git से उनका विलोपन करेगा , लेकिन आपकी कार्यशील प्रतिलिपि में अभी भी उन्हें शामिल किया जाएगा। लेकिन अगर आप pullऐसा करते हैं तो कहीं और उन फाइलों को नए सिस्टम से हटा दिया जाएगा
क्रिस

जवाबों:


866

"ट्रैकिंग से फ़ोल्डर हटाएं फ़ोल्डर" के लिए Googling करते समय मैं इस सवाल पर आया था। ओपी का प्रश्न मुझे उत्तर की ओर ले जाता है। मैं इसे यहाँ आने वाली पीढ़ियों के लिए संक्षेप में बता रहा हूँ।

सवाल

मैं अपने स्थानीय मशीन (यानी, विकास के माहौल) को हटाने के बिना अपने गिट रिपॉजिटरी से एक फ़ोल्डर कैसे निकालूं?

उत्तर

चरण 1. फ़ोल्डर पथ को अपने रेपो की रूट .gitignoreफ़ाइल में जोड़ें।

path_to_your_folder/

चरण 2. अपने स्थानीय गिट ट्रैकिंग से फ़ोल्डर निकालें, लेकिन इसे अपनी डिस्क पर रखें।

git rm -r --cached path_to_your_folder/

चरण 3. अपने परिवर्तन को अपने गिट रेपो में पुश करें।

फ़ोल्डर को गिट के दृष्टिकोण से "हटा दिया गया" माना जाएगा (अर्थात वे पिछले इतिहास में हैं, लेकिन नवीनतम प्रतिबद्ध में नहीं हैं, और इस रेपो से खींचने वाले लोगों को अपने पेड़ों से हटा दी गई फाइलें मिलेंगी), लेकिन अपनी कार्यशील निर्देशिका पर बने रहें क्योंकि आपने उपयोग किया है --cached


2
त्वरित प्रश्न, क्या फ़ोल्डर पथ को पूर्ण पथ होना चाहिए? या बस बेस के रूप में गिट रिपॉजिटरी अभिनय के साथ रास्ता?
HMSCelestia

मेरा मानना ​​है कि यह पूर्ण मार्ग है, लेकिन निश्चित रूप से याद नहीं है।
टॉड बर्डसाल जूल

7
"और इस रेपो से खींचने वाले लोगों को अपने पेड़ों से हटा दी गई फाइलें मिलेंगी" क्या मैं इसे रोक सकता हूं?
सिंह गयापरिणी

इसने मेरी फ़ाइलों को एक शाखा पर नज़र रखने से सही ढंग से हटा दिया, लेकिन मर्ज के बाद उन्हें हटा दिया!
हेरोल्ड

1
मेरे लिए अभी भी बनी हुई है। इसके अलावा - क्या मुझे उन फ़ाइलों को अचयनित करना चाहिए, जब फ़ोल्डर में हैं? मैंने दोनों तरह से कोशिश की। यदि अचयनित हो, तो यह पुश करने की अनुमति नहीं देता है, लेकिन फिर मैंने एक चर को दूसरी फ़ाइल में बदल दिया जिसे ट्रैक किया जाना चाहिए। अभी भी मदद नहीं करता है
Darius.V

44

यह मेरे लिए काम करता है:

git rm -r --cached --ignore-unmatch folder_name

--ignore-unmatch यहाँ महत्वपूर्ण है, कि विकल्प के बिना git इंडेक्स में पहली फ़ाइल में त्रुटि के साथ बाहर निकल जाएगा।


unknown option 'ignore unmatched'
inigo

यह एक महत्वपूर्ण ध्वज है यदि निर्देशिका खाली है, तो धन्यवाद!
एमएनएन

बहुत उपयोगी है अगर आप एक निर्देशिका से कुछ फ़ाइल एक्सटेंशन भी निकालना चाहते हैं:git rm -r --cached --ignore-unmatch .idea/*.xml
takanuva15

14

निर्देशिका को भूलने के लिए पुन /*/*: पथ में जोड़ें :

git update-index --assume-unchanged wordpress/wp-content/uploads/*/*

उपयोग करना git rm --cachedसहयोग के लिए अच्छा नहीं है। यहां अधिक जानकारी: Git में फ़ाइल में परिवर्तनों को ट्रैक करना और अनदेखा करना कैसे रोकें?


1
यह एक बहुत ही सुंदर समाधान है! पुनरावर्ती पथ चाल ने मेरा दिन बचाया। धन्यवाद!
अजीज अल्टो

8

मुझे पता है कि यह एक पुराना धागा है लेकिन मैं थोड़ा जोड़ना चाहता था क्योंकि चिह्नित समाधान मेरे लिए समस्या हल नहीं करता था (हालांकि मैंने कई बार कोशिश की थी)।

जिस तरह से मैं वास्तव में git फॉर्म को रोक सकता था उस फ़ोल्डर को ट्रैक करना निम्नलिखित था:

  1. स्थानीय फ़ोल्डर का बैकअप बनाएं और सुरक्षित स्थान पर रखें।
  2. अपने स्थानीय रेपो से फ़ोल्डर को हटाएं
  3. सुनिश्चित करें कि कैश साफ़ हो गया है git rm -r --cached your_folder/
  4. your_folder/.Gitignore में जोड़ें
  5. प्रतिबद्ध बदलाव
  6. बैकअप को अपने रेपो में जोड़ें

अब आपको यह देखना चाहिए कि फ़ोल्डर अब ट्रैक नहीं किया गया है।

मुझसे यह न पूछें कि कैश क्लियर करने से मेरे लिए काम क्यों नहीं किया गया, मैं गिट सुपर जादूगर नहीं हूं, लेकिन यह है कि मैंने इस मुद्दे को कैसे हल किया।


धन्यवाद!!! Git मुझे ग्रहण .metadata फ़ोल्डर की अनदेखी न करते हुए पागल कर रहा था। एक्लिप्स .metadata फ़ोल्डर के साथ अपने चरणों का पालन किया, और अंत में यह काम किया।
मास्टरएन 8

5

गिट प्रलेखन से:

एक और उपयोगी चीज जो आप करना चाहते हैं वह यह है कि फाइल को अपने काम के पेड़ में रखें लेकिन इसे अपने स्टेजिंग एरिया से हटा दें। दूसरे शब्दों में, आप फ़ाइल को अपनी हार्ड ड्राइव पर रखना चाह सकते हैं लेकिन Git को ट्रैक नहीं करना चाहिए। यह विशेष रूप से उपयोगी है यदि आप अपनी .gitignore फ़ाइल में कुछ जोड़ना भूल गए और गलती से इसका मंचन कर दिया, जैसे एक बड़ी लॉग फ़ाइल या .a संकलित फ़ाइलों का एक गुच्छा। ऐसा करने के लिए, --cached विकल्प का उपयोग करें:

$ git rm --cached readme.txt

तो शायद "-r" शामिल नहीं है?


1
ओपी ने पहले से ही कोशिश की --cached-rविकल्प "पुनरावर्ती" है, जो इस मामले में शामिल किया जाना चाहिए के लिए है।
क्रिस

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