गिट को एक फ़ाइल के बारे में "भूल जाओ" कैसे ट्रैक किया गया था लेकिन अब .gitignore में है?


Answers

नीचे दिए गए आदेशों की श्रृंखला गिट इंडेक्स (काम करने वाली निर्देशिका या स्थानीय रेपो से नहीं) के सभी आइटम हटा देगी, और फिर गिट इमेजर्स का सम्मान करते हुए गिट इंडेक्स को अपडेट करेगी। पुनश्च। सूचकांक = कैश

प्रथम:

git rm -r --cached . 
git add .

फिर:

git commit -am "Remove ignored files"
Question

एक फ़ाइल है जिसे git द्वारा ट्रैक किया जा रहा था, लेकिन अब फ़ाइल .gitignore सूची पर है।

हालांकि, यह फ़ाइल संपादित होने के बाद git status में git status रहती है। git को इसके बारे में पूरी तरह से भूलने के लिए कैसे मजबूर करते हैं?




मेरे लिए क्या काम नहीं किया

(लिनक्स के तहत), मैं यहां पोस्ट्स का उपयोग करना चाहता था ls-files --ignored --exclude-standard | xargs git rm -r --cached ls-files --ignored --exclude-standard | xargs git rm -r --cached संपर्क दृष्टिकोण। हालांकि, (कुछ) फ़ाइलों को हटाने के लिए उनके नामों में एक एम्बेडेड न्यूलाइन / एलएफ / \n था। समाधानों में से कोई भी नहीं:

git ls-files --ignored --exclude-standard | xargs -d"\n" git rm --cached
git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

इस स्थिति से निपटें (फाइलों के बारे में त्रुटियां नहीं मिलीं)।

तो मैं पेशकश करता हूँ

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached

यह ls-files में -z तर्क का उपयोग करता है, और -0 तर्क फ़ाइल नामों में "गंदा" वर्णों के लिए सुरक्षित / सही ढंग से पूरा करने के लिए xargs को तर्क देता है।

मैनुअल पेज git-ls-files (1) में , यह बताता है:

जब -z विकल्प का उपयोग नहीं किया जाता है, तो पथनाम में टैब, एलएफ, और बैकस्लैश वर्ण क्रमशः \ t, \ n, और \\ के रूप में प्रदर्शित होते हैं।

तो मुझे लगता है कि अगर फ़ाइल नामों में इनमें से कोई भी पात्र है तो मेरे समाधान की आवश्यकता है।

संपादित करें: मुझे यह जोड़ने के लिए कहा गया है --- --- किसी भी git rm कमांड की तरह --- यह निष्कासन को स्थायी बनाने के लिए एक प्रतिबद्धता के बाद किया जाना चाहिए, उदाहरण के लिए git commit -am "Remove ignored files"




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




इसका उपयोग करें जब:

1. आप कई फाइलों को अनैकैक करना चाहते हैं, या

2. आपने अपनी गिटिनोर फ़ाइल अपडेट की है

स्रोत लिंक: http://www.codeblocq.com/2016/01/Untrack-files-already-added-to-git-repository-based-on-gitignore/

आइए मान लें कि आपने अपने गिट रिपोजिटरी में कुछ फाइलें पहले ही जोड़ दी हैं / प्रतिबद्ध हैं और फिर आप उन्हें अपने .gitignore में जोड़ दें; ये फ़ाइलें अभी भी आपके भंडार सूचकांक में मौजूद होंगी। यह आलेख हम देखेंगे कि उन्हें कैसे छुटकारा पाना है।

चरण 1: अपने सभी परिवर्तनों को प्रतिबद्ध करें

आगे बढ़ने से पहले, सुनिश्चित करें कि आपके सभी परिवर्तन प्रतिबद्ध हैं, जिसमें आपकी .gitignore फ़ाइल शामिल है।

चरण 2: भंडार से सब कुछ हटा दें

अपने रेपो को साफ़ करने के लिए, इसका उपयोग करें:

git rm -r --cached .
  • rm हटा आदेश है
  • -आर रिकर्सिव हटाने की अनुमति देगा
  • -कैच केवल इंडेक्स से फ़ाइलों को हटा देगा। आपकी फाइलें अभी भी वहां होंगी।

rm कमांड rm कर सकता है। यदि आप पहले से क्या करने की कोशिश करना चाहते हैं, तो चीज़ों का परीक्षण करने के लिए -n या --dry-run ध्वज जोड़ें।

चरण 3: सब कुछ जोड़ें

git add .

चरण 4: प्रतिबद्धता

git commit -m ".gitignore fix"

आपका भंडार साफ है :)

वहां पर प्रभावी परिवर्तनों को देखने के लिए अपने रिमोट में बदलावों को भी दबाएं।




  1. अपनी .gitignore फ़ाइल को अपडेट करें - उदाहरण के लिए, एक फ़ोल्डर जोड़ें जिसे आप ट्रैक नहीं करना चाहते हैं .gitignore

  2. git rm -r --cached . - वांछित और अवांछित सहित सभी ट्रैक की गई फ़ाइलों को हटा दें। जब तक आप स्थानीय रूप से सहेजे गए हैं तब तक आपका कोड सुरक्षित रहेगा।

  3. git add . - .gitignore में उन सभी को छोड़कर, सभी फ़ाइलों को वापस जोड़ा जाएगा।

सही दिशा में हमें इंगित करने के लिए हैट टिप @ अकिरायामामोतो।




BFG विशेष रूप से गिट रेपो से बड़ी फ़ाइलों या पासवर्ड जैसे अवांछित डेटा को हटाने के लिए डिज़ाइन किया गया है, इसलिए इसमें एक साधारण ध्वज है जो किसी भी बड़े ऐतिहासिक (इन-इन-द-वर्तमान-प्रतिबद्ध) फ़ाइलों को हटा देगा: '- स्ट्रिप-ब्लब्स- से भी बड़ा'

$ java -jar bfg.jar --strip-blobs-bigger-than 100M

यदि आप नाम से फाइल निर्दिष्ट करना चाहते हैं, तो आप यह भी कर सकते हैं:

$ java -jar bfg.jar --delete-files *.mp4

बीएफजी गिट फिल्टर-शाखा से 10-1000x तेज है, और आम तौर पर उपयोग करने में बहुत आसान है - अधिक जानकारी के लिए पूर्ण उपयोग निर्देशों और examples जांच करें।

स्रोत: https://confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html




git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

यह अनदेखा फ़ाइलों की सूची लेता है और उन्हें इंडेक्स से हटा देता है, फिर परिवर्तन करता है।




यदि आप git rm को ट्रैक की गई फ़ाइल को git rm नहीं कर सकते हैं क्योंकि अन्य लोगों को इसकी आवश्यकता हो सकती है (चेतावनी, भले ही आप git rm --cached , जब किसी और को यह परिवर्तन मिलता है, तो उनकी फाइलें उनके फाइल सिस्टम में हटा दी जाएंगी) कृपया https://gist.github.com/1423106 लोगों ने समस्या के आसपास काम करने के तरीकों के लिए https://gist.github.com/1423106




Links