2011-11-28 4 views
7

git gc और git repack (विभिन्न विकल्पों के साथ) इस्तेमाल करने के बाद मैं अभी भी 4825 ढीला करता फ़ोल्डर .git/objects में है। मैं को सभी को पैक फ़ाइल में बाकी के साथ या किसी अन्य पैक फ़ाइल में रखना चाहता हूं।Git: सभी repack के लिए कैसे ढीला करता

मैं बहुत प्रतिबद्धता लिख ​​रहा हूं (संशोधन + संशोधन) इसलिए बहुत से पहुंचने योग्य काम करने के लिए यह बिल्कुल सामान्य है। My.gitconfig में इन पैरामीटर को लंबे समय तक रीफ्लॉग और पहुंचने योग्य काम रखने के लिए शामिल किया गया है।

[gc] 
    reflogExpire = 300 days 
    reflogExpireUnreachable = 200 days 
    pruneExpire = 90 days 

आप सोच रहे होंगे अगर यह अर्थ नहीं होगा लेकिन मैं पहले से ही की जरूरत है और कुछ करता कई महीने पहले बनाया बरामद किया। ऐसा होता है कि हम उच्च प्राथमिकता वाली शाखाओं के एक नए सेट पर कई महीनों तक विकसित होते हैं और बाद में पुरानी निचली प्राथमिकताओं की शाखाओं पर जारी रहते हैं।

इस प्रश्न का मुख्य कारण यह है कि git gui मेरे डेटाबेस निराशाओं को संपीड़ित करने की शिकायत करता रहता है मैंने कई बार ऐसा किया है। यदि हम उन ढीले कामों को पैक करने में सक्षम नहीं हैं तो यह "शिकायत" git gui में एक बग हो सकता है।

+0

वाह, मुझे नहीं पता था कि लोग वास्तव में उन कई ढीले कामों के साथ काम कर सकते हैं – prusswan

+0

डुप्ली/संबंधित? http://stackoverflow.com/questions/3765234/listing-and-deleting-git-commits-that-are-under-no-branch-dangling – cregox

उत्तर

1

git bundle को ध्यान में रखते हुए केवल पैकेजिंग ऑब्जेक्ट्स (fetch-pack पर कॉल करने) के साथ काम करने के लिए उपयोग किया जाता है, क्या आपने to bundle को आजमाया, और फिर अपने रेपो को क्लोन किया?

git bundle create aBundle --all # hopefully package everything, 
           # the result being *one* file. 
git clone aBundle newRepo  # recreate a full repo 
# check if the cloned repo contains only packaged object 

इस काम करता है, तो आप पर जा सकते हैं, अपने मुख्य रेपो के रूप में नए क्लोन रेपो का उपयोग कर।

+0

मुझे डर है कि इससे मदद नहीं मिलती है। मैंने ऐसा बंडल बनाया और यह 60 एमबी है। हालांकि .git/ऑब्जेक्ट/पैक में मेरा फ़ाइल पैक 64 एमबी है और सभी ढीले ऑब्जेक्ट्स एक साथ वस्तुओं को 32 एमबी लेते हैं। मैंने बंडल में एक खतरनाक प्रतिबद्धता (मेरे भंडार का) संदर्भ देने की कोशिश की लेकिन यह काम नहीं किया (कोई जानता है कि कैसे?)। –

+1

@PaulPladijs: लेकिन उस बंडल के क्लोन में कोई अनपॅक ऑब्जेक्ट होता है? मैं मानता हूं कि एक गिट बंडल केवल संदर्भित प्रतिबद्धता पर विचार करने की संभावना है। – VonC

1

गिट-गुई से चेतावनी सिर्फ एक संकेत है कि आप कुछ रखरखाव करना चाहते हैं। अधिकतर लोगों की अधिक संख्या वाले लोगों के लिए बस उन्हें धीमा कर रहा है। आपके मामले में, आपको चेतावनी को अक्षम करना चाहिए। प्रश्न में कार्य hint_gc है और इसे गिट-गुई स्क्रिप्ट फ़ाइल के अंत के पास से बुलाया जाता है। बस इसे नीचे टिप्पणी करें।

if {[is_enabled multicommit]} { 
     #after 1000 hint_gc 
} 

मल्टीकॉमिट व्यवसाय एक ध्वज है जो यह निर्धारित करता है कि हम प्रतिबद्धता या सामान्य उद्देश्य ऐप के रूप में चल रहे हैं या नहीं।

यदि आप आमतौर पर गिट-गुई का उपयोग कहीं और करना चाहते हैं, तो आप इसके बजाय एक शीतकालीन विशिष्ट ध्वज जोड़ सकते हैं। की तरह कुछ:

if {[is_enabled multicommit] && ![is_config_true gui.skip_gc_warning]} { 
     after 1000 hint_gc 
} 

आप git config --bool gui.skip_gc_warning true का उपयोग निष्क्रिय करने के लिए है कि एक प्रति-भंडार के आधार पर देना चाहिए।

+0

यह एक अच्छा विचार है! मैंने कोशिश की लेकिन आपको इसे काम करने के लिए 'skip_gc_warning' में अंडरस्कोर '_' को हटाना होगा। मैं अभी भी एक मरम्मत समाधान की प्रतीक्षा कर रहा हूं (यदि यह संभव है तो मैं उत्सुक हूं)। अन्यथा यह सबसे अच्छा जवाब हो सकता है। –

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