मेरे पास कुछ बहुत बड़ी बाइनरी के साथ एक गिट रेपो है। अब मुझे उनकी आवश्यकता नहीं है, और मुझे पहले की ओर से फाइलों की जांच करने में सक्षम होने की परवाह नहीं है। तो, रेपो आकार को कम करने के लिए, मैं इतिहास से बाइनरी को पूरी तरह से हटाना चाहता हूं।रीट लिखित गिट रेपो इतिहास के साथ एक विकास टीम अपडेट करें, बड़ी फ़ाइलों को हटाएं
एक वेब खोज के बाद, मैं निष्कर्ष निकाला है कि मेरे सबसे अच्छे (केवल?) विकल्प का उपयोग करने git-filter-branch
है:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
इस अब तक एक अच्छा दृष्टिकोण की तरह लग रहा है?
जवाब मानना हाँ है, मुझे सामना करने में एक और समस्या है। git manual has this warning:
चेतावनी! पुनर्लेखित इतिहास में सभी वस्तुओं के लिए अलग-अलग ऑब्जेक्ट नाम होंगे और मूल शाखा के साथ अभिसरण नहीं होंगे। आप मूल शाखा के शीर्ष पर पुनर्लेखित शाखा को आसानी से धक्का और वितरित करने में सक्षम नहीं होंगे। यदि आप पूर्ण प्रभावों को नहीं जानते हैं, तो कृपया इस कमांड का उपयोग न करें, और किसी भी तरह से इसका उपयोग करने से बचें, अगर आपकी समस्या को ठीक करने के लिए एक साधारण एकल प्रतिबद्धता पर्याप्त होगी। (प्रकाशित इतिहास को फिर से लिखने के बारे में अधिक जानकारी के लिए Git-रिबेस (1) में "नदी के ऊपर rebase से उबरने" अनुभाग देखें।)
हम अपने सर्वर पर एक दूरस्थ रेपो की है। प्रत्येक डेवलपर इसे धक्का देता है और खींचता है। ऊपर चेतावनी के आधार पर (और git-filter-branch
काम करता है की मेरी समझ के आधार पर), मुझे नहीं लगता कि मैं अपनी स्थानीय प्रतिलिपि पर git-filter-branch
चलाने में सक्षम हूं और फिर परिवर्तनों को दबा सकता हूं।
तो, मैं अंतरिम रूप से निम्न चरणों के माध्यम से जाने की योजना बना रही है:
- मेरे सभी डेवलपर्स को बताएँ प्रतिबद्ध, धक्का, और एक बिट के लिए काम करना बंद कर।
- सर्वर में लॉग इन करें और केंद्रीय रिपो पर फ़िल्टर चलाएं।
- क्या हर कोई अपनी पुरानी प्रतियां हटा देता है और सर्वर से क्लोन फिर से हटा देता है।
क्या यह ध्वनि सही है? क्या यह सबसे अच्छा समाधान है?
अब यह मेरे लिए होता है कि * सबसे आसान * चलाने करने के लिए बात अपने डेवलपर्स के लिए प्रत्येक हो सकता है:
Github एक अच्छा मार्गदर्शक है:
यहाँ कुछ बेहतर कोड है समान 'गिट-फ़िल्टर-शाखा' कमांड। उन्हें फिर से क्लोन या मैन्युअल रूप से रीबेज किए बिना आपके द्वारा उत्पादित किए गए इतिहास के साथ समाप्त होना चाहिए। –
@BenJackson कोड फ़ाइलों को समान होगा, लेकिन प्रतिबद्ध वस्तुओं के पास रिबेस द्वारा जोड़े गए विभिन्न कमेटी मेटाडेटा होंगे। – Douglas
@ डगलस मुझे नहीं लगता कि 'गिट फ़िल्टर-शाखा' कमिटर डेटा बदल देता है जब तक कि आप इसे स्पष्ट रूप से नहीं पूछते। ('गिट प्रतिबद्ध --rebase' करता है, लेकिन जहां तक मैं देख सकता हूं 'गिट फ़िल्टर-शाखा' नहीं।) – cdhowie