अद्यतन: git prune
समस्या को "हल" करेगा, इसमें उन ढीली वस्तुओं
( git gc
कॉल git prune
, लेकिन केवल दो सप्ताह से अधिक पुरानी वस्तुओं के लिए डिफ़ॉल्ट रूप से) को हटा देगा ।
हालांकि, जैसा कि ओपी माइकल डोनोह्यू ने टिप्पणियों में उल्लेख किया है:
मुझे दो सप्ताह के लिए ढीली वस्तुओं को रखने का सुरक्षा पहलू पसंद है, क्या मुझे वापस जाना चाहिए और कुछ पुराने संशोधनों को देखना चाहिए, इसलिए मुझे यह समाधान पसंद नहीं है।
मुझे git के आकार या प्रदर्शन से कोई परेशानी नहीं है, यह सिर्फ 'git gui' है जो मुझे डेटाबेस को संपीड़ित करने के लिए कहने पर जोर देता है, यहां तक कि जब डेटाबेस को संपीड़ित करने का कोई प्रभाव नहीं होगा।
मूल उत्तर:
" git gc
" सभी ढीली वस्तुओं को नहीं हटाने की समस्या पहले बताई गई है (2008 के अंत से पहले, " " git gc
"ढीली वस्तुओं को हटाने के लिए नहीं लगता है "
git gc
केवल दो सप्ताह से अधिक पुरानी ढीली वस्तुओं को हटा देता है, यदि आप वास्तव में उन्हें अब निकालना चाहते हैं, तो git prune चलाएं।
लेकिन सुनिश्चित करें कि जब आप इसे चलाते हैं तो कोई अन्य गिट प्रक्रिया सक्रिय नहीं हो सकती है, या यह संभवतः किसी चीज़ पर कदम रख सकता है।
" git gc
" उन वस्तुओं को अनपैक कर देगा जो अप्राप्य हो गए हैं और वर्तमान में पैक में हैं।
परिणामस्वरूप, गिट रिपॉजिटरी द्वारा उपयोग किए जाने वाले डिस्क स्थान की मात्रा वास्तव में " " ऑपरेशन के बाद नाटकीय रूप से ऊपरgit gc
जा सकती है, जो किसी ऐसे व्यक्ति के लिए आश्चर्यजनक हो सकती है जो अपने फाइल सिस्टम पर पूरी तरह से चल रहा है, एक ट्रैकिंग रिपॉजिटरी से कई शाखाओं को हटा देता है। , और फिर एक " git gc
" बहुत अप्रिय आश्चर्य हो सकता है।
[
उदाहरण: ]
पुरानी शाखाओं को एक टैग के माध्यम से आरक्षित किया जाता है जैसे कि next-20081204
।
यदि आप linux-next
प्रतिदिन रिपॉजिटरी की अपनी स्थानीय प्रति अपडेट करते हैं, तो आप बड़ी संख्या में इन पुराने शाखा टैगों को जमा करेंगे।
यदि आप उनमें से एक पूरी श्रृंखला को हटाते हैं, और चलाते हैं git-gc
, तो ऑपरेशन में काफी समय लगेगा, और उपयोग किए जाने वाले ब्लॉक और इनोड की संख्या में काफी वृद्धि होगी।
वे एक " git prune
" के बाद गायब हो जाएंगे , लेकिन जब मैं इस हाउसकीपिंग ऑपरेशन को करता हूं, तो मैं अक्सर --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
"git gc" के विकल्प की कामना करता हूं ।
तो आपके मामले में, क्या " git prune
" मददगार होगा?
(संभवतः gc.pruneexpire
विन्यास चर में "अब" का उपयोग करने के लिए, उपरोक्त व्यवहार के लिए आवश्यक है)।
आपके पास भी (उसी धागे से):
repack -a -d -l
लोअरकेस 'a' पर ध्यान दें।
git-gc
अपरकेस 'ए' के साथ रिपैक को कॉल करता है जो कि अनुपलब्ध वस्तुओं को अनपैक करने का कारण बनता है। लिटिल 'ए', उन लोगों के लिए है जो जानते हैं कि वे क्या कर रहे हैं, और चाहते हैं कि अगम्य वस्तुओं को छोड़ दें।