2010-03-29 15 views
31

मान लें मेरी Git भंडार निम्नलिखित संरचना है:एक गिट भंडार का हिस्सा निकालें?

/.git 
/Project 
/Project/SubProject-0 
/Project/SubProject-1 
/Project/SubProject-2 

और भंडार काफी कुछ करता है। अब सबप्रोजेक्ट्स (सबप्रोजेक्ट -0) में से एक बहुत बड़ा बढ़ता है, और मैं सबप्रोजेक्ट -0 को बाहर ले जाना चाहता हूं और इसे एक स्टैंडअलोन प्रोजेक्ट के रूप में सेट करना चाहता हूं। क्या माता-पिता गिट भंडार से SubProject-0 से जुड़े सभी प्रतिबद्धता इतिहास को निकालना संभव है और इसे एक नए स्थान पर ले जाना संभव है?

+2

ध्यान दें कि यह http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository (जैसा कि जिम डेलाहंट अपने उत्तर में कहता है) का डुप्लिकेट है। –

उत्तर

36

http://git-scm.com/docs/git-filter-branch

देखें मैं तुम्हें भंडार का एक क्लोन की तरह

git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all 

कुछ चाहिए लगता है।

+0

धन्यवाद! एक जादू की तरह काम करता है! – Rio

+2

@Rio आप केवल 'प्रोजेक्ट/सबप्रोजेक्ट -0' को छूने वाले कार्यों को समाप्त करने के लिए '--prune-खाली' विकल्प का उपयोग करना चाह सकते हैं। –

+0

वाह पूरी तरह से काम करता है! धन्यवाद – alvatar

1

मुझे कुछ ऐसा करने की ज़रूरत है, लेकिन मैं अनिवार्य रूप से एक सबप्रोजेक्ट को रेपो से दूसरे में ले जाना चाहता था। इसके बजाय मैंने fetch का उपयोग करना था, क्योंकि यह किसी भी स्रोत से वस्तुओं को ला सकता है।

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

उदा।

भंडार मूल सामग्री है कि पर:

cd /path/to/other/repository 
    git fetch /path/to/source/repo temp:temp 

जहां अस्थायी: अस्थायी साधन

git checkout -b temp master 
    git rm -r Unneeded_stuff 
    git commit -m 'pruning' 

तो फिर तुम एक पूरी तरह से अलग एक (असंबद्ध) में एक रिपोजिटरी से उस शाखा प्राप्त कर सके "स्रोत पर अस्थायी लाएं और इसे यहां अस्थायी रूप से सहेजें"। वहां से आप परिणाम को अपने मास्टर में विलय कर सकते हैं।

git merge temp 

फिर आप पहले मामले में यह कुछ आप कभी भी मूल रेपो साथ मर्ज करना चाहते नहीं है के बाद से, अस्थायी शाखाओं को हटा सकते हैं, और दूसरे मामले में आप इसे विलय कर दिया है।

मुझे यकीन है कि इन चरणों को थोड़ा संकुचित किया जा सकता है, लेकिन यह सेट अच्छा और स्पष्ट लगता है।

+0

आपको पुरानी पोस्ट के बारे में बग करने के लिए खेद है, लेकिन यह ओपी की तुलना में एक उपयोगी, लेकिन अलग सवाल का जवाब दे रहा है। क्या आप इस उत्तर के लिए एक नया क्यू/एक जोड़ी बना सकते हैं? यह खोजने के लिए यह बहुत आसान बना देगा। – tacaswell

+0

और अस्थायी भंडार बनाने के लिए फ़िल्टर विधि का उपयोग करना बेहतर होगा, जिसमें केवल वे फ़ाइलें शामिल हैं जिन्हें आप स्थानांतरित करना चाहते हैं और फिर अस्थायी भंडार के विलय चरण को बंद करने के रूप में ऐसा करने के लिए अभी भी मूल रेपो का पूरा इतिहास है (आखिरी प्रतिबद्धता के रूप में एक हटाए गए कदम के साथ)। – tacaswell