प्रतिबद्ध होने के बाद


210

मेरे पास एक गिट रिपॉजिटरी है जो गीथूब पर होस्ट की गई है। कई फाइलों करने के बाद, मैं साकार कर रहा हूँ मैं भी बनाना होगा .gitignoreऔर बाहर निकालने .exe, .objफ़ाइलें।

हालाँकि, क्या यह स्वचालित रूप से इन प्रतिबद्ध फ़ाइलों को रिपॉजिटरी से हटा देगा? क्या कोई जबरदस्ती है?


6
भविष्य के गोगलर्स को यह बेहद उपयोगी लग सकता है। सक्सेस
ऑस्टिन डीन

जवाबों:


331

नहीं, आप किसी फ़ाइल को पहले से हटाए जाने के लिए रेपो में प्रतिबद्ध नहीं है, क्योंकि इसमें जोड़ा जाता है .gitignore

आपको git rm --cachedउन फ़ाइलों को हटाना होगा जिन्हें आप रेपो में नहीं चाहते हैं। (- क्योंकि आप शायद स्थानीय प्रतिलिपि रखना चाहते हैं, लेकिन रेपो से हटा सकते हैं।) इसलिए यदि आप अपने रेपो से सभी एक्स को हटाना चाहते हैं

git rm --cached /\*.exe

(ध्यान दें कि तारांकन * शेल से उद्धृत किया गया है - यह गिट को अनुमति देता है, और शेल को नहीं, फाइलों और उपनिर्देशिकाओं के मार्ग का विस्तार करें)


6
@ माधुर आहूजा वास्तव में अगर आप ऐसा करते हैं तो git rm /\*.exeयह आपके रेपो में सभी exe को हटा देगा
manojlds

4
के लिए क्या हैं?
कोस्टा

5
@ कोस्टा वे हैं, जो तारांकन से बचने के लिए, शेल को व्याख्या करने से रोकने के लिए, जैसा कि इसका इरादा है git
लाम्बर्ट

2
चेतावनी: फाइलें स्थानीय में रखी जाती हैं, यह सच है ... लेकिन git pullवसीयत चलाने वाले अन्य उपयोगकर्ता अपनी फाइलों को नष्ट होते देखेंगे।
ByScripts

42

हालाँकि, क्या यह स्वचालित रूप से इन प्रतिबद्ध फ़ाइलों को रिपॉजिटरी से हटा देगा?

नहीं। यहां तक ​​कि एक मौजूदा के साथ .gitignoreआप -f(बल) ध्वज के साथ "अनदेखा" फ़ाइलों को चरणबद्ध करने में सक्षम हैं । यदि वे फ़ाइलें पहले से ही शुरू हो चुकी हैं, तो वे अपने आप नहीं हटती हैं।

git rm --cached path/to/ignored.exe

क्या इसका मतलब है कि मैंने व्यक्तिगत रूप से प्रत्येक .exe
मधुर आहूजा

आप शायद इसे
बैचने में

30

यदि आपने पहले से परिवर्तन नहीं किया है:

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push

15

मुझे .idea और फ़ोल्डर्स को लक्षित करना पड़ा और सभी टिप्पणियों को पढ़ने के बाद मेरे लिए यह काम किया:

git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'

और फिर मास्टर को धक्का


.ideaमेरी समस्या थी मुझे लगता है कि यह तुम्हारा भी था:)
ओलिवियर पोंस

5

हालाँकि, क्या यह स्वचालित रूप से इन प्रतिबद्ध फ़ाइलों को रिपॉजिटरी से हटा देगा?

नहीं।

ऐसा करने के लिए 'सबसे अच्छा' नुस्खा git filter-branchयहां के बारे में लिखा गया है:

गिट-फिल्टर-शाखा के लिए मैन पेज में व्यापक उदाहरण हैं।

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

नोट टैग की उपस्थिति में, हमेशा --tag-name-filter catविकल्प का उपयोग करें git filter-branch। यह कभी भी दर्द नहीं करता है और आपको सिर-दर्द से बचाएगा जब आपको बाद में एहसास होगा कि आपको इसकी आवश्यकता है


मैंने इस कमांड को चलाया, जिसमें यह दिखाया गया कि 57r1f1f04a3ed01f50c3260714cfc82c973ac816 (3/3) चेतावनी: Ref 'Refs / heads / master /' अपरिवर्तित है और कुछ भी नहीं हुआ है
मधुर आहूजा

यह एक चेतावनी है, और सबसे अधिक संभावना है कि मास्टर शाखा ने (अभी तक) फ़ाइलों को हटाने के साथ कोई संशोधन नहीं किया है। आप आसानी से देख सकते हैं। यदि कोई समस्या है, तो कृपया प्रश्न को अपडेट करें। पुनश्च: उपयोग - --allसब पर (स्थानीय) शाखाओं के पुनर्लेखन के लिए एक बार
sehe

1

आपके द्वारा फ़ाइल हटाने के बाद भी और फिर भी, आपके पास इतिहास की वे फ़ाइलें होंगी। उन को हटाने के लिए, BFG रेपो-क्लीनर का उपयोग करने पर विचार करें । यह गिट-फिल्टर-शाखा का एक विकल्प है।

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