2012-03-20 7 views
9

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

A0-B0-C0-D0-E0-F0-G0-HEAD (repo A) 
A0-B0-C0-D0-E0-F0-G0-HEAD (remote/master bare repo pulled & pushed from repo A) 
A1-B1-C1-D1-E1-HEAD (repo B) 

आदर्श रूप में दिखाई देगा, मैं वास्तव में एक भी इतिहास समय रेखा के साथ रेपो एक में रेपो बी मर्ज करना चाहते हैं। तो यह लगता है कि मैं मूल रूप से रेपो ए रेखांकन में परियोजना शुरू की, इस आदर्श अंतिम परिणाम होगा

A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (new repo A) 
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (remote/master bare repo pulled & pushed from repo A) 

मैं submodules और सबट्री (प्रो Git माध्यम से एक बहुत अच्छी किताब है के साथ पढ़ने के लिए कुछ कर रहे हैं), लेकिन उनमें से दोनों उप-मॉड्यूल के साथ दो अलग शाखा बनाए रखने के लिए समाधान को पूरा करने लगते हैं, जो ऊपर की ओर से परिवर्तन खींचने में सक्षम होते हैं और थोड़ा कम सिरदर्द होता है। दोनों समाधानों को मास्टर और उप पेड़/मॉड्यूल शाखा के बीच चेक इन्स और सिंक को संभालने के लिए अतिरिक्त और विशेष गिट कमांड की आवश्यकता होती है। दोनों समाधानों के परिणामस्वरूप कई टाइमलाइनें होती हैं (subtree के साथ -squash का उपयोग करते समय आपको 3 अलग-अलग समय-सारिणी भी मिलती है)।

SO से निकटतम समाधान "graft" के बारे में बात करने लगता है, लेकिन क्या वाकई यह है? लक्ष्य एक एकीकृत एकीकृत भंडार है जहां मैं चेक-इन्स खींच/पुश कर सकता हूं, ताकि कोई और रेपो बी न हो, केवल अंत में रेपो ए।

+0

संभव डुप्लिकेट http://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories) –

+0

@MichaelDurrant नहीं, मैं subtree और submodule समाधान को अस्वीकार करता हूं क्योंकि परिदृश्य एक ही नहीं है – Antony

उत्तर

5

मुझे लगता है कि आप इसे इस प्रकार कार्य करें:

  1. Git दूरस्थ जोड़ने [रेपो ख]
  2. Git लाने // रेपो में रेपो ख पाने की वजह से आप इतिहास रखना चाहते हैं के लिए एक
  3. इस तरह: ए0-ए 1-बी 1-बी0-डी 1-सी 0-डी 0-ई0-एफ 0-जी0-ई 1-एच (रेपो बी से) -एचईएडी (नया रेपो ए) आप पहले ए0 को प्रारंभ बिंदु के रूप में चुन सकते हैं उसके बाद, गिट चेरी का उपयोग करें- एक-एक करके चुनें।

आशा है कि यह आपके लिए उपयोगी है।

बीआर, टिम

की [कैसे आप दो Git संग्रह मर्ज करते हैं?] (
+0

इस गाइड के साथ अपने समाधान को जोड़ा गया है http://gbayer.com/development/moving-files-from-one-git-repository- एक और संरक्षण-इतिहास /, यह काम करता है! – Antony