2011-03-17 15 views
7

को धक्का देने के लिए आवश्यक चरणों को मैं मुख्य रूप से एसवीएन का उपयोग करने वाली टीम पर काम कर रहा हूं, जबकि मैं संभव होने पर Mercurial का उपयोग करना पसंद करता हूं। मैंने hgsubversion का उपयोग कर एसवीएन रेपो का एक एचजी क्लोन स्थापित किया, और कई मूल खींच/काम/धक्का ठीक काम करने लगते थे।Hgsubversion SVN क्लोन को

अब स्थानीय विकास के 2 सप्ताह बाद (जब मैं बाहरी एचजी रेपो से परिवर्तन में विलय कर चुका हूं, और एसवीएन रेपो से कई बार विलय में विलय कर चुका हूं), मैंने एसवीएन रेपो को धक्का देने का प्रयास किया है, लेकिन इस संदेश के साथ असफल रहा:

abort: क्षमा करें, विलय संशोधन के svn माता-पिता को नहीं मिल सकता है।

मैं अन्य उपयोगकर्ताओं को एक ही समस्या का सामना कर, कैसे आगे बढ़ते हुए इस समस्या से बचने के लिए पर युक्तियां साथ पाया है, लेकिन मैं कुछ भी है कि कई समानांतर संघनक एक मौजूदा साफ करने के लिए प्रतिबद्ध है पता करने के लिए लगता है का सामना करना पड़ा नहीं किया है hgsubversion repo।

मेरे सर्वोत्तम कामों को खोए बिना मामलों को सुधारने का सबसे अच्छा तरीका क्या है? (चरण-दर-चरण निर्देशों के साथ?)

उत्तर

9

आप एचजी विलय को एक उपवर्तन भंडार में धक्का नहीं दे सकते, क्योंकि एसवीएन उन्हें समझ नहीं सकता है। आपको नवीनतम एसवीएन प्रतिबद्धता के शीर्ष पर अपने परिवर्तनों को पुन: पेश करने की आवश्यकता है।

संपादित कदम इतिहास समतल:

चेतावनी, मर्ज के बहुत सारे है के लिए तैयार रहना विरोध करता है

आप MQ की जरूरत है और rebase विस्तार सक्रिय

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

अपने ग्राफ इस तरह दिखता है कहते हैं:

C1--C2--C3------M1--C5--C6--C7---M2-- 
    \   /\   /
    \--B1--B2--/ \--B3--B4-B5-/ 

फिर दूसरे चरण के लिए सी 3 के शीर्ष पर बी 1 + बी 2 rebase के लिए है: hg rebase -b B2 -d C3

-b के लिए शुरू के रूप में दोनों शाखाओं के आम आधार का उपयोग शाखा को पुनर्जीवित करने के लिए, इसलिए मर्क्योरियल पाता है कि बी 1 पहली विचलन प्रतिबद्धता है, जब भी आप बी 2 को रिबेस करने के लिए कहते हैं, तब भी इसका उपयोग करता है। -d पुनर्स्थापित शाखा का गंतव्य निर्दिष्ट करता है।

वेन आप विलय विवादों का सामना करते हैं तो सुनिश्चित करें कि बी 2 '= एम 1 का परिणाम, अन्यथा आपको निम्नलिखित संशोधनों में बहुत से संघर्ष मिलेंगे।

बाद में मर्ज एम 1 चला गया है और अपने ग्राफ इस तरह दिखता है:

C1--C2--C3--B1'--B2'--C5'--C6'--C7'---M2'-- 
        \    /
        \--B3'--B4'-B5'-/ 

और अब आप कर दूसरे मर्ज के लिए एक ही: hg rebase -b B3' -d C7', जो इस तरह अपने रेपो देखो बनाता है:

C1--C2--C3--B1'--B2'--C5'--C6'--C7'--B3''--B4''--B5'' 

तब तक दोहराएं जब तक आपके पास एक रैखिक संस्करण इतिहास न हो।

इतिहास को चकित करने के बाद आपको svn प्रतिबद्धताओं के शीर्ष पर अपने कामों को फिर से व्यवस्थित करने की आवश्यकता है। अपने रेपो अब लग रहा है इस तरह कहो (एस = तोड़फोड़ करने, सी = स्थानीय प्रतिबद्ध):

S1--S2--S3--C1--C2--S4--S5--C3-C4--C5--C6--C7--S6--S7 

अब तुम एक तेज कतार (hg qimport -rC1:) गुणा (सहित) से सी 1 सब कुछ आयात करते हैं। सभी बनाए गए पैच देखने के लिए hg qseries का उपयोग करें।

फिर आप सभी पैच (hg qgoto C1.diff [this is the first one in qseries], hg qpop के बाद) को अनुपयुक्त करते हैं। फिर आप उपversण को हटाते हैं (hg qdelete S4.diff S5.diff S6.diff S7.diff)।

अब svn commits (hg pull »svn-remote«) को फिर से लाने का समय है। फिर आप सभी स्थानीय पैच को दोबारा दोहराएं, एक hg qpush के साथ, और सभी विलय विवादों को ठीक करें जो अब हो रहे हैं। जब आप एक संघर्ष के साथ होते हैं, तो आप वर्तमान पैच को hg qfinish -a के साथ एक मेरबुरियल प्रतिबद्धता में ले जा सकते हैं, और अपना वर्तमान स्थिति hg push »svn-remote« के साथ भेज सकते हैं।

+0

ठीक है, मैंने इसे बाद में अन्य पोस्टों से इकट्ठा किया है। तो, मैं पहले से ही क्या कर चुका हूं इसे ठीक कर सकता हूं? (वास्तव में मेरा मूल प्रश्न कौन सा था) –

+0

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

+1

@ जोन सामान्य एचजी सर्वोत्तम प्रथाओं के खिलाफ एसवीएन जुड़े रेपो पर अलग-अलग इतिहास को विलय करना बेहतर नहीं होता है। जब आप एक svn repo से खींचने के बाद अपने काम को दोबारा दबाते हैं, तो आप बाद में एक संभावित धक्कादायक स्थिति में हैं। सहायता के लिए – Rudi

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