2012-09-25 19 views
6

मेरे प्रश्न के बाद Git subtree export and re-import woes मैं पूछना चाहता था कि मैं एक फ़ोल्डर को एक उपट्री में कैसे परिवर्तित करूंगा।मौजूदा फ़ोल्डर को एक गिट सबट्री

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

उत्तर

7

git subtree split बिल्कुल ठीक करता है। --prefix के माध्यम से एक फ़ोल्डर को देखते हुए यह आपके भीतर एक अलग पेड़ उत्पन्न करेगा कि आप एक और भंडार में धक्का दे सकते हैं और फिर फिट बैठकर उपयोग कर सकते हैं।

Git (1.8.1) के वर्तमान संस्करण सबट्री प्रलेखन शामिल नहीं है, लेकिन आप इसे यहाँ पा सकते हैं: https://github.com/apenwarr/git-subtree/blob/master/git-subtree.txt

प्रवाह आप इस्तेमाल कर सकते हैं है:

# In Repo A create your subtree split and push it 
> git subtree split --prefix sub --branch subBranch 
> git push C subBranch:master 

# After some changes that touched the sub directory 
> git subtree push --prefix sub C master 

पिछले आदेश Wil पेड़ को दोबारा विभाजित करें (पूर्व विभाजित चीजों का उपयोग करके सी की वृक्ष अखंडता को मापने के लिए) और इसे C/master पर दबाएं।

आप सामग्री के लिए इतिहास को निकालना चाहते हैं C को धक्का दे आप --squash विकल्प का उपयोग कर सकते हैं जब git split -ing और git push -ing। आपको सुसंगत होना चाहिए और इसे आगे बढ़ाना चाहिए, क्योंकि यदि आप स्क्वैश और गैर-स्क्वैश सामग्री उप-मिश्रण मिश्रण शुरू करना चाहते हैं तो प्रीवियो स्प्लिट्स को उचित रूप से विभाजित और पुन: उपयोग करने में सक्षम नहीं होंगे, और इस प्रकार आप इसे C पर धक्का नहीं दे पाएंगे।

आखिरकार, एक बार जब आप sub का पहला विभाजन बनाते हैं तो यह पूरी तरह से आवश्यक नहीं है कि आप इसे हटा दें और इसे एक नए उप-के रूप में पुनः आयात करें। यदि आप इसे git subtree रखते हैं तो अन्य विभाजनों से पहले बनाए गए कामों को पुन: उत्पन्न/पुन: उपयोग करेंगे। यदि आप फ़ोल्डर को हटाते हैं और फिर बनाए गए कामों से sub दोबारा जोड़ते हैं, तो यह अभी भी काम करना चाहिए, और यदि आप --squash का उपयोग कर रहे हैं तो यह C के साथ इतिहास के साथ आप जो चाहते हैं उससे मेल खाएंगे, लेकिन A इतिहास रखते हुए)।