2009-04-02 13 views
8

मैंफ़िल्टर-शाखा - सबड्रोडायरी-फ़िल्टर के बाद मैं अपने रेपो से अनचाहे ऑब्जेक्ट्स को कैसे हटा सकता हूं

git filter-branch --subdirectory-filter dir/name -- --all 

का उपयोग कर रेपो बनाने के लिए उपयोग कर रहा हूं जिसमें केवल उस dir/name से संबंधित इतिहास है। फ़िल्टर करने से पहले, मैंने मूल रेपो (जो बहुत बड़ा है) को एक टीएमपी डीआईआर में क्लोन कर दिया। फ़िल्टर-शाखा के बाद, रेपो एक अपवाद के साथ, मैं इसे कैसे चाहता हूं, ऐसा लगता है: ऐसा लगता है कि मूल रीपो से सभी ऑब्जेक्ट्स अभी भी मौजूद हैं, भले ही वे "गिट लॉग" में नहीं दिखाए जाते हैं।

मैं उन सभी अवांछित वस्तुओं को पूरी तरह से कैसे हटा सकता हूं?

मैंने चीजों की कोशिश की है:

git reflog expire --expire=now --all 
git gc --aggressive --prune=now 

यह मुझे स्पष्ट है कि मुझे नहीं पता कि वे अभी भी क्यों हैं या उन्हें हटाने का क्या अर्थ है, लेकिन मुझे यकीन है कि। मेरे खिलाफ काम करने वाली संभावित रूप से संबंधित जानकारी का एक बिट यह है कि मैंने थोड़ी देर पहले अपने स्रोत रेपो पर एक गिट repack -a किया था और ऐसा लगता है कि उस पैकफाइल को नए रेपो पर कॉपी करना है। ऐसा लगता है कि मुझे अभी भी ऐसा करने में सक्षम होना चाहिए जो मैं चाहता हूं।

उत्तर

11

फिल्टर शाखा भी .git/refs/मूल में बैकअप refs, जो आप भी

+2

gc'ing से पहले दूर करने के लिए अगर यह इतना आसान मैं थोड़े उखड़ जाते लिए जा रहा हूँ है होगा रहता है। क्या मैं सचमुच सिर्फ आरएम। जीआईटी/रेफ/मूल हूं? – jettero

+0

ठीक है, आरएम-आईएनजी वास्तव में काम करता है (यहां तक ​​कि अगर कोई बेहतर तरीका है) और यह पूरी तरह से मेरे प्रश्न का उत्तर देता है, धन्यवाद। – jettero

+2

'आरएम 'केवल तभी काम करता है जब जीसी नहीं किया गया था, क्योंकि जीसी' रेफरी 'को' पैक-रेफरी 'तक ले जाता है। गिट-फ़िल्टर-शाखा द्वारा समर्थित मूल रेफरी को हटाने का सही तरीका 'प्रत्येक के लिए गिट-प्रत्येक-रेफ --format = "% (refname)" refs/original/| xargs -n 1 गिट अपडेट-रेफ-डी', जैसा कि [गिट-फ़िल्टर-शाखा प्रलेखन] में बताया गया है (http://git-scm.com/docs/git-filter-branch)। @jettero – user

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

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