खिड़कियों पर SVN से Mercurial (hg) में कैसे प्रवास / परिवर्तित करें


120

मैं इतिहास, लेबल और इतने पर के साथ Mercurial में SVN रिपॉजिटरी के एक जोड़े को स्थानांतरित करने के लिए एक उपकरण की तलाश कर रहा हूं।

मैं TortoiseHg (Windows x32) का उपयोग कर रहा हूं, इसलिए ConvertExtensions को त्याग दिया गया है। लिनक्स बॉक्स ( hgsvn ) पर इस प्रक्रिया को करने के बारे में कुछ जानकारी है , लेकिन मेरे पास लिनक्स मशीन उपलब्ध नहीं है।

क्या मैं विंडोज पर उन पायथन स्क्रिप्ट का उपयोग कर सकता हूं? यदि हां, तो मुझे क्या करने की आवश्यकता है? या, इस प्रक्रिया को करने के लिए मैं कौन से अन्य उपकरण का उपयोग कर सकता हूं?

मूल रूप से, मैं एक SVN प्रोजेक्ट को Mercurial में कैसे बदल सकता हूं?

जवाबों:


93

मुझे सिर्फ इस समस्या से खुद को निपटना था। मेरे पास एक अलग विंडोज़ सर्वर है जिसमें VisualSVN सर्वर की मेजबानी के साथ एक विंडोज़ एक्सपी मशीन है ।

मेरे पास TortoiseHG और साथ ही CollabNet सबवर्सन कमांड-लाइन क्लाइंट भी स्थापित है ।

<Enable Convert Extension w/ Tortoise Hg 2>

TortoiseHg 2.0 के साथ टिप्पणियों में इंगित करने के लिए bgever के लिए बहुत धन्यवाद , कन्वर्ट एक्सटेंशन को सक्षम करना पहले से कहीं ज्यादा आसान है। जैसा वह कहता है

TortoiseHG 2.0 के साथ यह बहुत सरल बना दिया गया है: Start मेनू से TortoiseHG कार्यक्षेत्र प्रारंभ करें। फ़ाइल का चयन करें -> सेटिंग्स। सूची से एक्सटेंशन का चयन करें। 'कन्वर्ट' चेकबॉक्स की जाँच करें और ठीक पर क्लिक करें। बस! अब विन्यास फाइल को उत्पन्न करने और इसे फाइल सिस्टम में खोजने की कोशिश करने की कोई आवश्यकता नहीं है। - 10 मार्च को 7:56 बजे bgever

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

एसवीएन से एचजी में एक रिपॉजिटरी को बदलने के लिए, मैंने इन चरणों का पालन किया:

1) ओपन C: \ Program Files \ TortoiseHg \ Mercurial.ini

संपादित करें

FYI करें - Tortoise Hg ने इस फ़ाइल को माइग्रेट कर दिया है

  • XP या पुराने - C: \ Documents and Settings \ USERNAME \ Mercurial.ini
  • विस्टा या बाद में - C: \ Users \ USERNAME \ Mercurial.ini

वह फ़ाइल ज्यादातर खाली होगी और आप सिर्फ वही सूची देंगे जो आप वहां ओवरराइड करना चाहते हैं। यदि आपके पास ऐसा है, तो इन दो पंक्तियों को फ़ाइल के बहुत अंत तक जोड़ दें:

[extensions]
convert =

2) उस लाइन के लिए खोजें जो साथ शुरू होती है

[एक्सटेंशन]

3) इसके नीचे आपको प्रत्येक पंक्ति में एक अर्धविराम (;) के साथ टिप्पणियों की एक सूची दिखाई देगी

4) उस लाइन को खोजें जो कहती है

; रूपांतर =

और अर्धविराम हटा दें ताकि यह पढ़े

रूपांतरित =

</Enable Convert Extension Manually>

5) कमांड प्रॉम्प्ट खोलें और निर्देशिका में नेविगेट करें जिसे आप बनाया गया नया hg फ़ोल्डर चाहते हैं (इस प्रक्रिया में एक नया फ़ोल्डर बनाएगा, जिसे कमांड में प्रॉम्प्ट के लिए खुला है।

6) इस कमांड का उपयोग करें

hg Convert file: /// y: / yoursvnreponame

मैंने पाया कि परिवर्तित टूल में नेटवर्क रिपॉजिटरी के साथ समस्या हो सकती है, इसलिए मुझे इसके लिए एक ड्राइव मैप करना था, लेकिन यह मेरे लिए ठीक काम किया।


इस प्रश्न के उत्तर का चयन करना कठिन था। badbloodydemon सही था जब उसने अपने जवाब में कॉन्टेक्ट को एडिट एक्सटेंशन को इनेबल करने के लिए एडिट करने के लिए कमेंट किया था, लेकिन यह जवाब ज्यादा स्पष्ट और सटीक है
डेविड ले

1
मैं सिर्फ यह उल्लेख करना चाहता था कि मैंने एसवीएन कमांड लाइन क्लाइंट के बिना इसका परीक्षण किया और यह काम भी किया। आपको ऐसा करने के लिए एक SVN सर्वर फंक्शनिंग की भी आवश्यकता नहीं है, बस रिपॉजिटरी फ़ाइल पथ तक पहुंच है।
माइकल ला वोई

इसने मर्क्यूरियल V1.4.3 के साथ मेरे लिए अच्छा काम किया। एक 1-वर्षीय svn रिपॉजिटरी बहुत जल्दी पूर्ण इतिहास अक्षुण्ण के साथ परिवर्तित हो गई। बहुत धन्यवाद!
जोनाथन वेब

1
बस जोड़ने के लिए - ini फ़ाइल डिफ़ॉल्ट TortoiseHG इंस्टॉलेशन पर नहीं बनाई गई है। यदि आप जानते हैं कि आप क्या कर रहे हैं, तो आपको पहले कुछ सेटिंग्स लागू करने या सहेजने की जरूरत है या एक खाली फाइल के साथ शुरू करना होगा।
अहमद

9
TortoiseHG 2.0 के साथ यह बहुत सरल बना दिया गया है: Start मेनू से TortoiseHG कार्यक्षेत्र प्रारंभ करें। फ़ाइल का चयन करें -> सेटिंग्स। सूची से एक्सटेंशन का चयन करें। 'कन्वर्ट' चेकबॉक्स की जाँच करें और ठीक पर क्लिक करें। बस! अब विन्यास फाइल को उत्पन्न करने और इसे फाइल सिस्टम में खोजने की कोशिश करने की कोई आवश्यकता नहीं है।
बार्ट वेकेइजेन

8
  1. लोकलहोस्ट पर स्टार्टअप svn सर्वर
  2. hg Convert svn: // localhost / your_repo
  3. किया, क्योंकि svn बाइंडिंग केवल फ़ाइल के लिए आवश्यक है: // प्रोटोकॉल

Nope, win32 या TortoiseHg के लिए न तो व्यापारिक बायनेरीज़ कन्वर्ट एक्सटेंशन के साथ आता है, इसलिए "hg Convert" भी win32 पर एक वैध कमांड नहीं है।
डेविड लेट

1
// फ़ाइल के बजाय:: मैं का उपयोग कर SVN की कोशिश की // लेकिन यह अजगर बाइंडिंग के लिए पूछ रहती है
fglez

फ़ाइल के बजाय svn: // का उपयोग करना: // पायथन बाइंडिंग के बिना मेरे लिए काम किया। Svn सर्वर कमांड को शुरू करने के लिए: svnerve -r <path to repo root> -d
पेट्टर विगले

7

मर्क्यूरियल में इसके लिए अंतर्निहित रूपांतरण विस्तार है


2
मुझे पता है, यह पहली चीज है जिस पर मैं लड़खड़ा गया था, लेकिन उद्धृत करते हुए: "ध्यान दें कि आप Win32 मर्क्यूरियल बायनेरिज़ के साथ ऐसा नहीं कर सकते - इसके बिल्ट-इन पाइथन लाइब्रेरी में सबवर्सन बाइंडिंग स्थापित करने का कोई तरीका नहीं है" TortoiseHg ...
डेविड

लिनक्स लाइव सीडी या वर्चुअल मशीन का उपयोग करें?
रिचाक

यह बिल्कुल सही उत्तर है। मैंने इसे केवल hg कन्वर्ट एक्सटेंशन ( selenic.com/mercurial/wiki/… ) का उपयोग करके और pysvn एक्सटेंशन के बिना SVN रिपॉजिटरी के लिए फ़ाइल प्रोटोकॉल का उपयोग करके किया है: hg कन्वर्ट फ़ाइल: /// X: / HOME / REVOS / mysvnrep newhgrep
van

5

एसवीएन रेपो को एचजी रेपो में बदलने और इसे एक अलग सर्वर पर कॉपी करने के लिए, आपको कुछ चीजों की आवश्यकता होगी।

  1. TortoiseHG स्थापित किया गया। (यह देखने के लिए जांचें कि वर्तमान में किस संस्करण का उपयोग किया जा रहा है)
  2. अजगर स्थापित। (यह देखने के लिए जांचें कि वर्तमान में किस संस्करण का उपयोग किया जा रहा है)
  3. पायथन मॉड्यूल (आप उन्हें http://pysvn.tigris.org/project_downloads.html पा सकते हैं )
  4. आपको convertTortoise में एक्सटेंशन जोड़ना होगा । प्रारंभ मेनू से TortoiseHG कार्यक्षेत्र प्रारंभ करें। का चयन करें File -> SettingsExtensionsसूची से चयन करें । convertचेकबॉक्स चेक करें और ओके पर क्लिक करें।

पहला रूपांतरण ...

  1. उस फ़ोल्डर को मैप करना सबसे अच्छा है जो वर्तमान SVN रेपो आपके द्वारा काम कर रहे कंप्यूटर पर है। (यानी \\server\folder SVN रेपो फोल्डर को मैप न करें। इसके ठीक ऊपर के फोल्डर को मैप करें) मैप किए गए ड्राइव को एक अक्षर दें, जैसेY:\
  2. एक कमांड प्रॉम्प्ट खोलें और टाइप करें: CD /D Y:\
  3. पर Y:\शीघ्र प्रकार: hg convert y:/RepoName आगे और पीछे स्लैश से सावधान रहें (वर्तमान रेपो के नाम का उपयोग)। आदेश में एक आगे स्लैश है। इसके अलावा, यदि नाम में रिक्त स्थान हैं, तो नाम को कोटेशन में रखें। (यानी Y:/"My Repo folder")
  4. अब यह चालू होना चाहिए और पुराने के साथ एक और फ़ोल्डर बनाएगा। और एक hg फ़ोल्डर अंदर होना चाहिए। यह प्रमाणित नहीं होगा, और इसमें शामिल नहीं होगा!
  5. रूपांतरण पूरा हो गया है।

दूसरा क्लोनिंग…

  1. TortoiseHG कार्यक्षेत्र खोलें। के लिए जाओFile -> Clone Repository
  2. स्रोत: परिवर्तित रेपो का पूरा पथ दर्ज करें।
  3. गंतव्य: पूर्ण पथ डालें जहाँ आप रेपो क्लोन चाहते हैं। नए गंतव्य पर एक फ़ोल्डर बनाना आवश्यक नहीं है क्योंकि क्लोनिंग प्रक्रिया इसे बनाएगी और इसे इनिशियलाइज़ करेगी।
  4. नए क्लोन किए गए फ़ोल्डर में अनुमतियाँ जोड़ें।
  5. हो गया!!!

नमस्ते, क्या यह समझाना संभव है कि आपको initपहले भंडार क्यों नहीं चाहिए ?
बेन पेज

3

कोई भी अभी भी हग्सुवर्सन ( एक्सटेंशन विकी ) का उल्लेख नहीं करता है , जो इसे लगभग किसी भी सिरदर्द (दुर्लभ मामलों और विशिष्ट पेड़ को छोड़कर) के बिना कर सकता है।

बस एक्सटेंशन जोड़ें, इसे सक्षम करें और hg clone SVN_REPOस्थानीय व्यापारिक रेपो में


1

यह कछुआ-चाल में है :

मैं एक तोड़फोड़ भंडार को मर्क्यूरियल में कैसे बदल सकता हूं?

आपको svn-win32-1.4.6 कमांड लाइन टूल इंस्टॉल करना होगा, फिर उन्हें अपने पथ पर जोड़ें। फिर आपको कन्वर्ट एक्सटेंशन को एनेबल करना होगा। इस बिंदु पर, आपको hg convertरूपांतरण करने के लिए ' ' कमांड का उपयोग करने में सक्षम होना चाहिए । कृपया मर्क्यूरियल मेलिंग सूची में या #mercurialपर विस्तार के बारे में समस्याओं / प्रश्नों को निर्देशित करें irc.freenode.net

तो यह स्पष्ट रूप से संभव है - मैं लिनक्स का उपयोग कर रहा हूं इसलिए मैंने खुद की कोशिश नहीं की है।


0

मैंने बस एक दूरस्थ SVN रेपो को HTTP के साथ एक Mercurial रेपो में परिवर्तित किया है, और मैं आपको बता दूं, कि यह कैसे करना है, इस पर बहुत सारे दस्तावेज नहीं हैं। मुझे मर्क्यूरियल स्रोत को डाउनलोड करना था और इसे स्टैंड-अलोन स्थापित करना था, स्रोत पैकेज का उपयोग करके, इस तरह एसवीएन बाइंडिंग सही तरीके से काम करेगा।

मैंने इसे स्थापित किया:

python setup.py install

जो मेरे सर्वर 2003 बॉक्स पर ठीक काम किया। मैं अब एक SVN रेपो को इस तरह से कुछ करके सही तरीके से बदल सकता हूँ:

python c:\python26\scripts\hg convert <remote repo>

Mercurial साइट पर ConvertExtension के लिए प्रलेखन बहुत स्पष्ट नहीं है, लेकिन यह यह कहता है:

वहाँ कोई रास्ता नहीं है तोड़फोड़ बाँध स्थापित करने के लिए [Mercurial] में निर्मित पायथन पुस्तकालय। तो आपको स्टैंड-अलोन पायथन के शीर्ष पर स्थापित मर्क्यूरियल का उपयोग करना होगा

तो अब मैं सिर्फ कन्वर्ट करने के लिए स्टैंड-अलोन संस्करण का उपयोग करता हूं, और वास्तविक वीसीएस काम के लिए कछुआ।


0

देर आए दुरुस्त आए ...

एक की कीमत के लिए दो जवाब ...

  1. यदि यह एक सार्वजनिक, ओपन-सोर्स रेपो है, तो आप बस http://svn2github.com/add/ का उपयोग कर सकते हैं, जो उस रेपो को GitHib पर क्लोन करने के लिए लगभग आधे घंटे का समय लेता है और फिर बस उसे Hg में खींच लेता है।

  2. उपयोग hg convertका लाभ यह है कि फिर से शुरू किया जा सकता है। SVN को Hg में परिवर्तित करने में दिन लग सकते हैं । यदि आप इसे रोकते हैं तो यह वहीं से फिर से शुरू होगा जहां से इसे छोड़ा गया था।

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

एसवीएन स्रोत से अपडेट खींचने के लिए इस बैच फ़ाइल को किसी भी समय चलाया जा सकता है, यदि वे ऐसा करते हैं जो केवल पृथ्वी पर छोड़े गए वास्तव में अभी भी एनएचएन का उपयोग कर रहे हैं। मैंने इसका परीक्षण नहीं किया है, तो देखें कि यदि आप ऐसा करते हैं तो क्या होगा यदि मैं आप मूल शाखा को छोड़ देता अगर आप रेपो को संपादित करने जा रहे होते।

robocopy shamapसामान SVN इतिहास बनाए रखने के लिए अगर आप एचजी रेपो क्लोन है, shamap अल्पकालिक है - बैच फ़ाइल और में (मुझे क्या करना चाहते हैं कि एक नई शाखा पर) shamap की जाँच करें।

बैच ...

@echo off
mode con:cols=100 lines=800

:: Change the SVN remote name here
::
set remote=https://cinch.svn.codeplex.com/svn
::

title Fetching SVN from %remote%. This could take...DAYS
echo .
echo Fetching SVN checkins from %remote%
echo .
echo Dependencies: Tortoise Hg and hg.exe in the Path would be ideal.
echo using hg convert
echo .
echo First, I will make a backup of shamap in the hg repo folder.
echo If shamap in .hg\ is newer then it will be copied to the repo.
echo You should commit it so hg clones of this repo work with this.
echo Commit this .BeeyATch file as well.
echo shamap keeps track of what has been fetched from SVN.
echo ok, that ends the educational part of this script...
echo Now I will fetch SVN changes from
echo %remote%
echo ...
echo ...(this could take quite some time)...
echo ...DAYS...yes...DAYS
echo ...especially if it's fecking Codeplex SVN...
echo .
echo If this craps out just run it again - it will resume from where it left off. 
echo and fetch the rest...eventually
echo .
echo Control C to abort or any other key to start:
echo .

pause

echo .
:: http://mercurial.selenic.com/wiki/ConvertExtension <== see for details of shamap
:: copy the shamap from the original convert into the .hg folder unless it is already there & newer
:: don't panic if shamap is much bigger than the original - diff it to see why
robocopy .\ .\.hg\ shamap /XO 
robocopy .\.hg\ .\ shamap /XO 
echo .

hg convert --verbose --debug %remote% "%CD%"
echo .
echo .
echo Finished fetching from %remote%
title Finished fetching from %remote%
echo Any  key to Exit
echo .
pause

exit

0

मर्क्यूरियल के convertविस्तार का उपयोग करना :

  1. रूपांतर को सक्षम करें; इस तरह .hgrc convert=के [extensions]अनुभाग में जोड़ें :

    [एक्सटेंशन]
    कन्वर्ट =

  2. लिनक्स को अतिरिक्त अजगर बाइंडिंग की आवश्यकता है: sudo apt-get install python-subversion
  3. hg convertआदेश निष्पादित करें
    • hg convert -hमदद के लिए देखें
    • उदाहरण: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] (नोट 2 देखें)
  4. नव निर्मित मरकरी रिपॉजिटरी में पुश करें: hg push https://[mercurialserver]/[Project]

ध्यान दें : आप पिछले रूपांतरण के बाद svn भंडार में किए गए नए परिवर्तनों को शामिल करने के लिए hg कन्वर्ट कमांड को भी दोहरा सकते हैं।

नोट 2 : जब hg कन्वर्ट काम नहीं करता है http://या svn://आप पहले सबवर्सन रिपॉजिटरी को चेकआउट कर सकते हैं (या किसी मौजूदा को अपडेट कर सकते हैं) और स्थानीय चेकआउट का उपयोग करके कन्वर्ट कर सकते हैं; उदाहरण:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.