2016-06-07 9 views
5

हमारे पास दो गिट भंडार हैं।एक अलग इतिहास से किसी अन्य संग्रह से काम कैसे करें?

रेपो 1. प्रतिबद्धता: ए, बी, सी। यह संग्रह एसवीएन इतिहास से बनाया गया था।

रेपो 2. प्रतिबद्धता: डी, ​​ई, एफ। यह संग्रह एसवीएन इतिहास के बिना बनाया गया था, केवल काम करने वाली प्रति (प्रतिबद्ध सी के रूप में) का उपयोग करके जो प्रतिबद्धता डी बन गया। दूसरे शब्दों में, फ़ाइल पेड़ सी अंडर डी वही है।

अब, हम दोनों भंडारों को मर्ज करना चाहते हैं ताकि हमारे पास एक भंडार में पूर्ण इतिहास हो। क्या सी पर प्रतिलिपि ई-एफ के सभी "कॉपी/रीबेस/कुछ और" करने का कोई तरीका है?

उत्तर

6

एक remote में के रूप में रेपो 2 जोड़ने के लिए किया जाएगा करने के लिए सबसे आसान काम रेपो 1 डिस्क पर अपनी भौतिक पथ का उपयोग कर और फिर बस cherry pick करता C के शीर्ष पर E और F

तो, रेपो 1 में आप क्या करेंगे:

git remote add repo2 C:\Path\To\Repo2 
git fetch repo2 

तो, E संभालने और F रेपो 2में master शाखा में नवीनतम दो प्रतिबद्ध हैं और C नवीनतम master में प्रतिबद्ध है में रेपो 1, इस तरह:

 master 
    /
A-B-C 
     repo2/master 
    /
D-E-F 

आप क्या करेंगे: C के शीर्ष पर E और F करता से

git checkout master 
git cherry-pick repo2/master~2..repo2/master 

जो पैच लागू होंगे:

  master 
     /
A-B-C-E'-F' 
     repo2/master 
    /
D-E-F 

ध्यान दें कि यहाँ मैं चेरी उठा करता के रेंज, जो since Git 1.7.2 समर्थित है।

+1

अपने पथ का उपयोग कर स्थानीय रिमोट जोड़ना प्यारा है - मुझे नहीं पता था कि आप ऐसा कर सकते हैं – dumbledad

1

क्या ये रिमोट रिपोजिटरी हैं? दोनों सी और एफ एक ही स्थानीय भंडार पर हैं तो आप शाखा सी की ओर इशारा करते पर शाखा एफ की ओर इशारा करते rebase को यह कोशिश नहीं की है, तो सक्षम होना चाहिए:

    Repo1 में
  1. स्थानीय
    एक चलाते हैं। git remote add repo2 <Repo 2 URL>
    बी। git push repo2 branchPointingToC
  2. फिर स्थानीय रूप से रेपो 2 रन
    ए। git fetch
    बी। git checkout branchPointingToF
    सी। git rebase -i remotes/origin/branchPointingToC

(एनबी इसके बजाय यदि आपने Enrico's answer पीछा किया लेकिन rebase करने के लिए आप अपने git cherry-pick के स्थान पर git rebase -i repo2/master का प्रयोग करेंगे चाहता था।)

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