2014-12-11 5 views
5

मैं this उत्तर के अनुसार अपने एसवीएन भंडार को माइग्रेट कर रहा हूं। सब कुछ सुचारू हो जाता है सिवाय इसके कि अंत में मेरे पास पूरा इतिहास नहीं है। मैं समस्या के स्रोत को "एसवीएन चाल" पर ट्रैक कर सकता हूं जिसे मैंने बनाया था। शुरुआत मेरी SVN रेपो में कोई trunkbranchestags dirs था:स्विट गिट माइग्रेशन: अधूरा इतिहास

यह मैं क्या किया है। सोमवार मैंने उन्हें पेश किया और सबकुछ ट्रंक में ले जाया (और फिर मैंने एक शाखा बनाई, यही वजह है कि मैंने नई फ़ोल्डर संरचना शुरू करने का फैसला किया)।

तो एसवीएन रेपो को नए फ़ोल्डर संरचना के परिचय के बाद ही इतिहास को गिट करने के लिए माइग्रेट करने के बाद उपलब्ध है।

मैंने इस मुद्दे को एक बहुत ही सरल परिदृश्य में पुन: उत्पन्न किया। SVN में

इतिहास: enter image description here

Git में इतिहास: enter image description here

जिप जो SVN रेपो/Git रेपो में शामिल हैं:

https://www.dropbox.com/s/ecy54st05qah4up/svn_git_problem.zip?dl=0

तो इसे ठीक करने का कोई तरीका है ?

+0

मुझे रिपो ज़िप फ़ाइल के लिंक के साथ बहुत सारे पॉपअप और वायरस त्रुटियां मिलती हैं। क्या आप इसे ड्रॉपबॉक्स.com जैसी साइट पर पोस्ट कर सकते हैं जिसमें पॉपअप और विज्ञापन नहीं हैं? –

+2

किया गया। खराब लिंक के लिए मेरी माफ़ी। –

उत्तर

2

जब आप --stdlayout निर्दिष्ट करते हैं, git svn clone केवल एसवीएन पर ध्यान देना होगा जो पथ/ट्रंक,/शाखाओं या टैग के तहत फ़ाइलों को संशोधित करता है - अन्य कामों को अनदेखा कर दिया जाएगा। आप अभी भी अपने भंडार के एक वैध क्लोन के साथ समाप्त हो गए हैं, लेकिन आपके द्वारा देखा गया है कि आपके मानक-लेआउट के निर्माण के लिए आर 1 से इतिहास खो जाएगा। जब से तुम अपना Git भंडार ट्रंक, शाखाओं और टैग लेआउट बदलाव के बाद समझना चाहते हैं, तब भी आप --stdlayout चाहते हैं, अन्यथा Git क्लोन/ट्रंक/शाखाओं/टैग के साथ एक एकल पेड़ है, जो नहीं है कि आप क्या चाहते में सभी शाखाओं को जोड़ेगा।

यदि आप वास्तव में प्री-लेआउट-चेंज हिस्ट्री के बारे में गहराई से देखभाल करते हैं तो आप क्या कर सकते हैं (और यदि यह सख्ती से एक ऑफ माइग्रेशन है, तो कोई भी एसवीएन गिट में जाने के बाद काम नहीं करता है), git svn clone को दो बार चलाने के लिए है --stdlayout और बिना एक बार। stdlayout संस्करण अपने अंतिम भंडार बन जाएगा, और गैर stdlayout संस्करण, नए लेआउट के नीचे पूर्व लेआउट-परिवर्तन इतिहास सिलाई करने के लिए केवल प्रवास के दौरान इस्तेमाल किया जा सकता, पुनर्गठन के बिंदु पर। यह द्वारा किया जा सकता अपनी पोस्ट-reorg के सभी चेरी पिकअप ing reorg के समय में भंडार का एक स्नैपशॉट पर करता है।

एक बार जब आप दोनों रेपोस क्लोन, आप नए जमाव के प्रति के बिंदु पर, वहाँ ट्रंक के लिए एक आम के पेड़-हैश है कि ध्यान देंगे। यहाँ एक उदाहरण है (अपने रेपो का उपयोग नहीं कर खेद है, तो हैश अलग):

(stdlayout रेपो में):

# git log --pretty=raw 
commit 44f2f60e00117dfd51fd7d6431b697ec0ccc863d 
tree 5cf62e006bb7b58171010fc0ffaba08ca97520da 
parent d403c6ce0789cf584af9abb945bcfd88721e391e 
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411603 +0000 
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411603 +0000 

    change 4 after folder structure & branch 

    git-svn-id: http://<redacted>/[email protected] 4ed80924-4846-11e4-8279-c5809b3f22e4 

commit d403c6ce0789cf584af9abb945bcfd88721e391e 
tree d6c0d6cf271be5146b26781ab9bd78736d86ace3 
parent 0c5873eab204942ffe56370cc6e1d31e5372da13 
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411513 +0000 
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411513 +0000 

    changed: moved to new folder structure 

    git-svn-id: http://<redacted>/[email protected] 4ed80924-4846-11e4-8279-c5809b3f22e4 

commit 0c5873eab204942ffe56370cc6e1d31e5372da13 
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411460 +0000 
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411460 +0000 

    new folder structure 

    git-svn-id: http://<redacted>/[email protected] 4ed80924-4846-11e4-8279-c5809b3f22e4 

(पूर्ण, गैर stdlayout रेपो में):

commit ec52fff6ee1d65eadfa1d18aa4b74b553fc693e1 
tree cfda32eb39248fa5969d15a21d2f8014189e88c2 
parent 685fe9961abfee4d4913e83cf5a4a7e8d459a1a1 
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411603 +0000 
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411603 +0000 

    change 4 after folder structure & branch 

    git-svn-id: http://<redacted>@9 4ed80924-4846-11e4-8279-c5809b3f22e4 

commit 685fe9961abfee4d4913e83cf5a4a7e8d459a1a1 
tree 817306fad0ed5466d877437cdda12ff39a0df725 
parent 02caf52174c588f1d394815201b764f9abdaa640 
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411565 +0000 
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411565 +0000 

    created new branch 

    git-svn-id: http://<redacted>@8 4ed80924-4846-11e4-8279-c5809b3f22e4 

commit 02caf52174c588f1d394815201b764f9abdaa640 
tree c041405a580beaef0a4e50923e9279e179c917a8 
parent 37d77b8f1168d00b943e0bca3cab277cf89e7e84 
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411513 +0000 
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411513 +0000 

    changed: moved to new folder structure 

    git-svn-id: http://<redacted>@7 4ed80924-4846-11e4-8279-c5809b3f22e4 

commit 37d77b8f1168d00b943e0bca3cab277cf89e7e84 
tree d6c0d6cf271be5146b26781ab9bd78736d86ace3 
parent 3a4784719bd95af5bf59de96310a1d6a38af562e 
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411460 +0000 
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411460 +0000 

    new folder structure 

    git-svn-id: http://<redacted>@6 4ed80924-4846-11e4-8279-c5809b3f22e4 

commit 3a4784719bd95af5bf59de96310a1d6a38af562e 
tree d6c0d6cf271be5146b26781ab9bd78736d86ace3 
parent 2fb41dab5a7389ab32419b8b270d955631aaaefa 
author (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411421 +0000 
committer (no author) <(no author)@4ed80924-4846-11e4-8279-c5809b3f22e4> 1420411421 +0000 

    update 4 

... etc., continues. 

ध्यान दें कि stdlayout रेपो में, प्रतिबद्ध d403c6c पेड़ d6c0d6c है, और पूर्ण क्लोन में, दोनों के लिए प्रतिबद्ध 37d77b8 और उसकी मूल 3a47847 भी है कि एक ही पेड़ है।आप पहले यह अजीब सोच सकते हैं, जब तक आपको एहसास न हो कि गिट-एसवीएन क्लोन में/ट्रंक/शाखाओं/टैग का निर्माण वास्तव में नो-ऑप है, क्योंकि गिट खाली निर्देशिकाओं को ट्रैक नहीं करता है।

# git checkout -b fix-history 37d77b8 
:

# git remote add fullclone ../fullclone 
# git fetch fullclone 

फिर "नया फ़ोल्डर संरचना" पूर्ण रेपो से प्रतिबद्ध से एक नई शाखा चेकआउट:

stdlayout रेपो में, आप पूर्ण क्लोन अमानक क्लोन आयात कर सकते हैं

तो मानक लेआउट रेपो में इस समय के बाद से सभी प्रतिबद्ध पुनः चलाने:

# git cherry-pick d403c6c..master 

यदि आपके पास कई पोस्ट री-ऑर्ग काम करता है, तो इसमें कुछ समय लग सकता है, क्योंकि प्रत्येक प्रतिबद्धता नई शाखा पर फिर से प्रतिबद्ध होती है। परिणाम ट्रंक प्री के एक सिलाई-एक साथ इतिहास होना चाहिए और पुनर्गठन पोस्ट करना चाहिए।

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