2009-07-09 14 views
97

जब मैं 'गिट गुई' चलाता हूं तो मुझे एक पॉपअप मिलता है जो'गिट गुई' चलाने पर "लूज ऑब्जेक्ट" पॉपअप को कैसे छोड़ें

 
This repository currently has approximately 1500 loose objects. 

कहता है, फिर यह डेटाबेस को संपीड़ित करने का सुझाव देता है। मैंने पहले यह किया है, और यह ढीली वस्तुओं को लगभग 250 तक कम कर देता है, लेकिन यह पॉपअप को दबा नहीं देता है। फिर से संपीड़न ढीली वस्तुओं की संख्या में बदलाव नहीं करता है।

हमारे वर्तमान वर्कफ़्लो को 'रीबेज' का महत्वपूर्ण उपयोग करने की आवश्यकता है क्योंकि हम पेर्सफोर्स से संक्रमण कर रहे हैं, और पर्सफोर्स अभी भी कैननिकल एससीएम है। एक बार गिट कैनोलिक एससीएम है, हम नियमित विलय करेंगे, और ढीली वस्तुओं की समस्या बहुत कम होनी चाहिए।

औसत समय में, मैं वास्तव में यह 'सहायक' पॉपअप दूर जाना चाहता हूं।

+0

यह संवाद "फीचर" का एक बड़ा उदाहरण है कि कई लोग चाहते हैं कि यह अस्तित्व में न हो । यह केवल कष्टप्रद नहीं है, यह महत्वपूर्ण कामों को मिटा सकता है जो हार्ड रीसेट के बाद अलग हो गए। – adelriosantiago

उत्तर

132

चूंकि किसी के पास अभी तक कोई जवाब नहीं था, इसलिए मैंने यह कोड देखने के लिए कोड को देखा कि उस संवाद को कैसे दिखाया गया है। मुझे hint_gc प्रक्रिया मिली जो इसे और वह जगह कहां कहलाती है। उसी समय मैंने देखा कि 2011 के अंत में a configuration option for disabling the dialog जोड़ा गया था। यह परिवर्तन (गिट-गुई 0.16.0 का हिस्सा) 2011-12-14 पर गिट की मुख्य रेखा में विलय कर दिया गया था।

तो अगर आप Git v1.7.9 या नए प्रयोग करते हैं, तो आपको निम्न कमांड के साथ चेतावनी संवाद निष्क्रिय कर सकते हैं:

git config --global gui.gcwarning false 

आप एक पुराने संस्करण का उपयोग कर रहे हैं, तो आप /lib/git-core/git-gui को संपादित करने और निकाल सकते हैं after 1000 hint_gc लाइन, या संपादित /usr/share/git-gui/lib/database.tcl और hint_gc प्रक्रिया के शरीर को हटा दें। (ये फ़ाइल पथ सिगविन पर हैं - अन्य वातावरण पर फ़ाइलें एक अलग स्थानों पर हो सकती हैं। विंडोज के लिए यह c:\Program Files\Git\mingw64\libexec\git-core\git-gui.tcl है)

+1

क्या हम '1000 hint_gc' के बाद' बढ़ा सकते हैं, इसलिए चेतावनी '10000' ढीली वस्तुओं के बाद होती है? – sashoalm

+0

@ सशोल्म मैं सहमत हूं। इसके कारण एक कारण है। – HankCa

27

जब "ढीला वस्तु" पॉपअप मैं जानता हूँ कि यह Git का कचरा कलेक्टर को चलाने के लिए समय आ गया है:

git gc 

उसके बाद पॉपअप चली जाती है।

अद्यतन: (T.E.D. के सुझाव के कारण)

मैं git/share/git-gui/lib/database.tcl
से नीचे दिनचर्या निकाला आप अपनी जरूरतों को पूरा करने के लिए इसे संशोधित कर सकते हैं।

proc hint_gc {} { 
    set object_limit 8 
    if {[is_Windows]} { 
     set object_limit 1 
    } 

    set objects_current [llength [glob \ 
     -directory [gitdir objects 42] \ 
     -nocomplain \ 
     -tails \ 
     -- \ 
     *]] 

    if {$objects_current >= $object_limit} { 
     set objects_current [expr {$objects_current * 256}] 
     set object_limit [expr {$object_limit * 256}] 
     if {[ask_popup \ 
      [mc "This repository currently has approximately %i loose objects. 

To maintain optimal performance it is strongly recommended that you compress the database when more than %i loose objects exist. 

Compress the database now?" $objects_current $object_limit]] eq yes} { 
      do_gc 
     } 
    } 
} 
+0

संवाद में ठीक क्लिक नहीं करता है बस यही? यदि जीसी सभी ढीली वस्तुओं से छुटकारा नहीं पाता है तो उसे अभी भी संवाद मिल जाएगा। –

+0

मैंने 'ओके' पर क्लिक किया है और मैंने कमांड लाइन से 'git gc' चलाया है - वे दोनों मुझे 250 तक नीचे ले जाते हैं, लेकिन फिर से ऐसा करने से कोई और प्रगति नहीं होती है। –

+3

मुझे पता है कि यह अजीब है लेकिन गुई से आधार की सफाई कभी-कभी ढीली वस्तुओं को छोड़ देती है। मैं गुई बंद करता हूं, गिट-जीसी चलाता हूं, और फिर सभी कचरे चले जाते हैं। –

3

Hmmmm .... मुझे लगता है कि docs में के लिए एक कमांड लाइन तर्क नहीं दिख रहा।

मैं तुम्हें हमेशा अपने स्रोत नीचे खींच सकता है, संवाद के लिए कोड बाहर ले, और पुनर्निर्माण लगता है।

+0

+1, शायद यही एकमात्र समाधान है। –

43

अद्यतन: git prune "हल" होगा मुद्दा है, में है कि यह (, git prune, लेकिन केवल दो सप्ताह से अधिक पुराने ढीली वस्तुओं के लिए git gc कॉल डिफ़ॉल्ट रूप से) उन ढीला वस्तुओं
निकाल देंगे।
हालांकि, OP Michael Donohue टिप्पणी में उल्लेख के रूप में:

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


मूल जवाब:

की "git gc" सभी ढीली वस्तुओं नहीं निकालना समस्या से पहले (देर से 2008, ""git gc" doesn't seem to remove loose objects any more" बताया गया है

git gc केवल ढीली को हटा दो सप्ताह से अधिक पुरानी वस्तुएं, यदि आप वास्तव में उन्हें अभी हटाना चाहते हैं, तो गिट प्रून चलाएं।
लेकिन बनाना सुनिश्चित करें कि जब आप इसे चलाते हैं तो कोई अन्य गिट प्रक्रिया सक्रिय नहीं हो सकती है, या संभवतः यह कुछ पर चरणबद्ध हो सकती है।

"git gc" अनपैक ऑब्जेक्ट्स जो पहुंचने योग्य नहीं हैं और वर्तमान में पैक में हैं।
नतीजतन, एक Git भंडार द्वारा इस्तेमाल किया डिस्क स्थान की मात्रा वास्तव में जा सकते हैं अप नाटकीय रूप से एक "git gc" ऑपरेशन है, जो जो अपने फाइल सिस्टम पर पूर्ण के पास चल रहा है किसी के लिए आश्चर्य की बात हो सकता है के बाद, की एक संख्या को हटा देता है एक ट्रैकिंग भंडार से शाखाएं, और फिर एक "git gc" बहुत अप्रिय आश्चर्य हो सकती है।

[ उदाहरण: ] पुरानी शाखाएं next-20081204 जैसे टैग के माध्यम से आरक्षित हैं।
आप हर दिन linux-next भंडार के अपने स्थानीय प्रतिलिपि को अपडेट करते हैं, तो आप इन पुराने शाखा टैग की एक बड़ी संख्या एकत्र होंगे।
आप तो उनमें से एक पूरी श्रृंखला को नष्ट, और git-gc चलाते हैं, आपरेशन काफी देर, और ब्लॉक और काफी बड़ा हो जाएगा इस्तेमाल किया inodes की संख्या का समय लगेगा।

वे एक "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 जीसी" करने के लिए कामना की है।

तो आपके मामले में, "git prune" सहायक होगा?

(संभवतः का उपयोग कर "अब" gc.pruneexpire config चर में, जरूरत से ऊपर व्यवहार होने की के साथ)।


तुम भी (एक ही धागे से) है:

repack -a -d -l 

सूचना लोअरकेस 'एक'।

git-gc अपरकेस 'ए' के ​​साथ दोबारा कॉल करता है जो पहुंचने योग्य वस्तुओं को अनपॅक करने का कारण बनता है। लिटिल 'ए', उन लोगों के लिए है जो जानते हैं कि वे क्या कर रहे हैं, और गिट को केवल पहुंचने योग्य वस्तुओं को छोड़ना चाहते हैं।

+1

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

+0

बहुत उपयोगी टिप्पणी। वह कष्टप्रद "ढीला वस्तु" संदेश वास्तव में परेशान हो रहा था। वैसे भी यह गिनती कहां से आती है? गिट-एफएसके का उत्पादन, शायद? –

+0

धन्यवाद - मेरे पास ढीली वस्तुएं भी थीं कि जीआईटी जीसी को हटा नहीं रहा था - गिट प्रून जवाब था। – shedd

संबंधित मुद्दे