मैं अपने .it फ़ोल्डर को कैसे साफ़ कर सकता हूँ? मेरी परियोजना निर्देशिका को साफ किया, लेकिन .it अभी भी बड़े पैमाने पर है


85

.Git / वस्तुओं मेरी रेल में परियोजना निर्देशिका अभी भी बड़े पैमाने पर है, गलती से उत्पन्न कचरे के मेगाबाइट के सैकड़ों को हटाने के बाद।

मैंने कोशिश की है git add -A, साथ ही अन्य कमांड्स सूचकांक को अपडेट करने के लिए और कुछ भी नहीं फाइलें हटाने के लिए। मैं इकट्ठा, शायद गलत तरीके से, कि निर्देशिका में दो चरित्र नाम वाली फाइलें ब्लॉब हैं। मैंने पिछले कमिट्स पर वापस जाने की कोशिश की है, लेकिन कोई किस्मत नहीं।

मैं इस निर्देशिका को साफ करने के लिए क्या कर सकता हूं?

जवाबों:


137
  • यदि आप फ़ाइलों को जोड़ते हैं और फिर उन्हें हटा देते हैं, तो बूँदें अभी भी मौजूद हैं लेकिन झूल रही हैं। git fsckअगम्य बूँदें सूचीबद्ध करेगा, और git pruneउन्हें हटा देगा।

  • यदि आपने फ़ाइलें जोड़ी हैं, तो उन्हें कमिट किया है, और फिर से वापस लुढ़का हुआ है git reset --hard HEAD^, वे थोड़े गहरे अटके हुए हैं। git fsckकोई झूलने वाले कमिट्स या ब्लब्स को सूचीबद्ध नहीं करेगा, क्योंकि आपकी शाखा का रिफॉल्ज उन पर है। यहां यह सुनिश्चित करने का एक तरीका है कि केवल वही वस्तुएं जो आपके इतिहास में उचित हैं, वे बनी रहें:

    git reflog expire --expire=now --all
    git repack -ad  # Remove dangling objects from packfiles
    git prune       # Remove dangling loose objects
    
  • एक अन्य तरीका यह भी है कि रिपॉजिटरी को क्लोन किया जाए, क्योंकि यह केवल उन वस्तुओं को ले जाएगा, जो पहुंच में हैं। हालाँकि, यदि झूलने वाली वस्तुएँ पैक हो गईं (और यदि आपने कई ऑपरेशन किए हैं, तो गिट अच्छी तरह से स्वचालित रूप से पैक हो सकता है), तो एक स्थानीय क्लोन पूरे पैकफाइल को ले जाएगा:

    git clone foo bar                 # bad
    git clone --no-hardlinks foo bar  # also bad
    

    आपको एक नए पैक की गणना करने के लिए गिट को बाध्य करने के लिए एक प्रोटोकॉल निर्दिष्ट करना होगा:

    git clone file://foo bar  # good
    

हां, मैंने समस्या को नोटिस करने से पहले किया। मैंने सब कुछ करने की कोशिश की है लेकिन अंतिम आदेश। जब मैं इसे अपने प्रोजेक्ट डायरेक्टरी "चेतावनी:" के भीतर से चलाता हूं, तो आप एक खाली रिपॉजिटरी पर क्लोन करते दिखाई देते हैं। मैं प्रलेखन पढ़ रहा हूँ, लेकिन यह भारी सामान है। मैं सही स्रोत से क्लोन को कैसे इंगित कर सकता हूं?
light24bulbs

1
@user file://fooURL वर्तमान निर्देशिका के सापेक्ष है, और एक file:///home/me/foo(तीन स्लैश) निरपेक्ष है।
जोश ली

धन्यवाद! वह आकार आधे में काटा गया है, लेकिन मेरा पैक अभी भी बाकी भंडार के आकार से दस गुना है। मैंने
प्रूनिंग

1
@user यदि बहुत सी कमियों में त्रुटिपूर्ण बड़ी फाइलें हैं, तो आप उन्हें लेने के लिए गिट-फिल्टर-ब्रांच का उपयोग करना चाह सकते हैं ।
जोश ली

2
क्षमा करें, कोई प्रभाव नहीं है। मेरे देव लीड का कहना है कि आकार अब स्वीकार्य लेकिन प्रतिकूल सीमा के भीतर है। यदि आपके पास चम्मच रखने का समय है जो मुझे उत्कृष्ट होगा, लेकिन आपने मुझे अपने पैरों पर वापस ले लिया है। धन्यवाद jleedev
light24bulbs

33

क्या आपने git gcकमांड की कोशिश की है ?


3
git gc --aggressive --pruneमेरे लिये कार्य करता है। git gcनहीं करता। शायद डिफ़ॉल्ट सेटिंग पर्याप्त नहीं है।
चांदनी

13

स्पार्कलशेयर ने कई बार एक विशाल चित्र चेकइन खींचने में विफल रहने के बाद मेरे git में 13GB tmp_pack_ फाइलें बनाईं। केवल एक चीज जिसने मदद की ...

rm -f .git/objects/*/tmp_*

'git gc' ने उन फाइलों को नहीं हटाया।


यह एक बहुत क्रूर बल समाधान है, लेकिन मुझे लगता है कि यह काम नहीं करेगा कोई कारण नहीं है। अच्छा!
light24bulbs

1
हताश परिस्थितियों में हताश उपायों की आवश्यकता होती है, यह एक आकर्षण की तरह काम करता है! टी.के.एस।
मदिना

rm linux कमांड के लिए है? क्या Windows उपयोगकर्ता के बारे में तो @cat?
गमुरुह

7

यदि आपके पास अभी भी छंटाई और पुनरावर्तन ( gc --aggressive --prune=tomorrow...) के बाद एक बड़ा रेपो है, तो आप बस एक अजीब की तलाश में जा सकते हैं:

git rev-list --objects --all |
    while read sha1 fname
    do 
        echo -e "$(git cat-file -s $sha1)\t$\t$fname"
    done | sort -n

यह आपको आरोही आकार में वस्तुओं की क्रमबद्ध सूची देगा। आप अपने रेपो से अपराधी को निकालने के लिए गिट-फिल्टर-शाखा का उपयोग कर सकते हैं।

मार्गदर्शन के लिए http://progit.org/book/ch9-7.html में "ऑब्जेक्ट्स हटाना" देखें


@DavidJames संकेत के लिए धन्यवाद। मैंने इसे और भी पठनीय बनाया, IMO
sehe

बस इस मामले में किसी और के दौरे: कोष्ठक में आर्ग में एक टाइपो है: होना चाहिए --aggressive। संपादित करने की कोशिश की, लेकिन यह पता चला है कि आप इस तरह के एक छोटे टाइपो को संपादित नहीं कर सकते।
हेलोबेनलन

@hellobenallan नोट के लिए धन्यवाद, तय
9

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