'गिट गिनी' चलाते समय "ढीली वस्तु" पॉपअप को कैसे छोड़ें


123

जब मैं 'गिट गाई' चलाता हूं तो मुझे एक पॉपअप मिलता है जो कहता है

वर्तमान में इस भंडार में लगभग 1500 ढीली वस्तुएं हैं।

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

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

इस समय के दौरान, मैं वास्तव में इस 'सहायक' पॉपअप को बनाना चाहूंगा।


1
यह संवाद एक "विशेषता" का एक शानदार उदाहरण है जो बहुत से लोगों की इच्छा होगी कि यह मौजूद नहीं था। यह न केवल कष्टप्रद है, यह महत्वपूर्ण कमियों को मिटा सकता है जो एक हार्ड रीसेट के बाद अलग हो गए।
adelriosantiago

जवाबों:


169

चूंकि किसी के पास कोई जवाब नहीं था, इसलिए मैंने कोड में देखा कि उस कोड को कैसे हटाया जाए जो उस डायलॉग को दिखाता है। मुझे वह hint_gcप्रक्रिया मिली जो वह करती है और वह स्थान जहां उसे कहा जाता है। उसी समय मैंने देखा कि 2011 के अंत में संवाद को अक्षम करने के लिए एक कॉन्फ़िगरेशन विकल्प जोड़ा गया था । (Git-जीयूआई 0.16.0 का हिस्सा) यह परिवर्तन पर Git के मुख्य लाइन के लिए विलय कर दिया गया 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)


3
क्या हम बढ़ सकते हैं after 1000 hint_gcइसलिए 10000ढीली वस्तुओं के बाद चेतावनी होती है ?
शशोअल्म

@ शशोअल्म मैं सहमत हूँ। इसका एक कारण है।
21

आश्चर्य है कि वास्तव में अच्छे कारण क्या हैं, यह संवाद एक ऐसा दर्द है, अच्छे कारणों के बिना स्पष्ट रूप से समझाया गया है, मैं निश्चित रूप से उपरोक्त आदेश में सिर्फ अजीब है।
जोश मैक

2
@ साशोअल्म: शायद आपका यही मतलब है, लेकिन डायल के after 1000दिखाए जाने तक प्रतीक्षा करने के लिए मिलीसेकंड की संख्या को संदर्भित करता है "1000" । इसे "10000" तक बढ़ाकर, संवाद अभी भी दिखाई देगा, लेकिन इसके बजाय ऐसा करने में 10 सेकंड लगेंगे।
fuglede 6:18

1
हालाँकि, जैसा कि @ NickDandoulakis के उत्तर में उल्लेख किया गया है, database.tclमें सीमा की परिभाषा समाहित है और संवाद को लगातार कम करने के लिए इसे बढ़ाया जा सकता है।
fuglede

50

अद्यतन: 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अपरकेस 'ए' के ​​साथ रिपैक को कॉल करता है जो कि अनुपलब्ध वस्तुओं को अनपैक करने का कारण बनता है। लिटिल 'ए', उन लोगों के लिए है जो जानते हैं कि वे क्या कर रहे हैं, और चाहते हैं कि अगम्य वस्तुओं को छोड़ दें।


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

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

धन्यवाद - मैं भी ढीली वस्तुओं कि git gc नहीं हटा रहा था - git prune जवाब था।
शेड

मैंने किसी रिपॉजिटरी के बाहर एक git prune किया और इसने कुछ वस्तुओं को साफ किया। फिर मैंने समस्या रिपॉजिटरी में जाकर एक git prune किया और सभी समस्याएं दूर हो गईं।
निकोलस ऑर्लोव्स्की

"git prune" समस्या को हल करता है OP (और I) का था: "मैंने पहले भी ऐसा किया है, और यह ढीली वस्तुओं को लगभग 250 तक कम कर देता है, लेकिन यह पॉपअप को दबाता नहीं है।"
ईके

32

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

git gc

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

अद्यतन: (टेड के सुझाव के कारण)

मैंने नीचे दी गई दिनचर्या को 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
        }
    }
}

1
संवाद में ओके पर क्लिक नहीं करता है? अगर जीसी को उन सभी ढीली वस्तुओं से छुटकारा नहीं मिला, जो वह अभी भी संवाद प्राप्त करेंगे।
TED

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

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

3
टीएलसी को बदलना इसे ठीक करता है - मैंने विंडोज़ की सीमा को 10 * 250 पर ले लिया है। धन्यवाद!
माइकल डोनोहे

मेरे git gcलिए कमांड लाइन से दौड़ने से समस्या हल हो गई ... बस okगिट गुई में क्लिक करने से किसी तरह की चाल नहीं
चली

3

हम्म्म्म .... मुझे डॉक्स में इसके लिए कमांड-लाइन तर्क दिखाई नहीं देता है ।

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

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