Як перенести / перетворити з SVN в Mercurial (hg) на Windows


120

Я шукаю інструмент для переміщення декількох сховищ SVN до Mercurial, з історією, мітками тощо.

Я використовую TortoiseHg (Windows x32), тому ConvertExtensions відкидається. Існує деяка інформація про те, як зробити цей процес у вікні Linux ( hgsvn ), але у мене немає машини Linux.

Чи можу я використовувати ці сценарії Python у Windows? Якщо так, що мені потрібно для цього? Або які ще інструменти я можу використовувати для цього процесу?

В основному, як я можу перетворити проект SVN в Mercurial?

Відповіді:


93

Мені просто довелося вирішити цю проблему самостійно. У мене є машина Windows XP з окремим сервером Windows, на якому розміщений сервер VisualSVN .

У мене також встановлено TortoiseHG , а також клієнт командного рядка Subversion Subversion .

<Enable Convert Extension w/ Tortoise Hg 2>

Велике спасибі bgever за те, що в коментарях вказали , що з TortoiseHg 2.0, увімкнути розширення для конвертування простіше, ніж будь-коли. Як він каже

З TortoiseHG 2.0 це було значно спрощено: запустити TortoiseHG Workbench з меню «Пуск». Виберіть Файл -> Установки. Виберіть розширення зі списку. Установіть прапорець "конвертувати" та натисніть кнопку ОК. Це воно! Більше не потрібно намагатися генерувати конфігураційний файл та шукати його у файловій системі. - bgever 11 березня о 7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Щоб перетворити сховище з SVN в HG, я дотримувався наступних кроків:

1) Відкрийте C: \ Програмні файли \ TortoiseHg \ Mercurial.ini

EDIT

FYI - Черепаха Hg перенесла цей файл на

  • XP або старіші версії - C: \ Документи та налаштування \ USERNAME \ Mercurial.ini
  • Vista або новіші версії - C: \ Users \ USERNAME \ Mercurial.ini

Цей файл буде здебільшого порожнім, і ви просто перелічите те, що ви хочете там замінити. Якщо це у вас є, просто додайте ці два рядки до самого кінця файлу:

[extensions]
convert =

2) Пошук рядка, який починається з

[розширення]

3) Під ним ви побачите список ключових слів, коментований крапкою з комою (;) у кожному рядку

4) Знайдіть рядок, який говорить

; конвертувати =

і видаліть крапку з комою, щоб вона читалася

конвертувати =

</Enable Convert Extension Manually>

5) Відкрийте командний рядок і перейдіть до каталогу, в якому ви хочете створити нову папку hg (процес створить нову папку під назвою tvojevnreponame-hg у каталозі, в якому відкритий командний рядок).

6) Використовуйте цю команду

hg конвертувати файл: /// y: / tvojevnreponame

Я виявив, що у інструмента перетворення можуть виникнути проблеми з мережевими сховищами, тому мені довелося скласти до нього накопичувач, але це для мене спрацювало чудово.


Вибрати відповідь на це питання було складно. evilbloodydemon мав рацію, коли він коментував у своїй відповіді редагування конфігурації, щоб увімкнути розширення для конвертації, але ця відповідь більш чітка і точна
Девід Лей

1
Я просто хотів зазначити, що я перевірив це без клієнта командного рядка SVN, і він також працював. Вам навіть не потрібен SVN-сервер, що функціонує для цього, просто доступ до шляху файлу репозиторію.
Майкл Ла Вой

Це добре працювало для мене з Mercurial V1.4.3. 1-річний сховище svn конвертується дуже швидко з цілою історією. Велике дякую!
Джонатан Вебб

1
Просто додам - ​​файл ini створений не за замовчуванням установки TortoiseHG. Вам потрібно застосувати / зберегти деякі налаштування спочатку або почати з порожнього файлу, якщо ви знаєте, що робите.
Ахмад

9
З TortoiseHG 2.0 це було значно спрощено: запустіть TortoiseHG Workbench з меню «Пуск». Виберіть Файл -> Установки. Виберіть розширення зі списку. Установіть прапорець "конвертувати" та натисніть кнопку ОК. Це воно! Більше не потрібно намагатися генерувати конфігураційний файл та шукати його у файловій системі.
Барт Веркойейн

8
  1. запуску svn сервера на localhost
  2. hg перетворити svn: // localhost / your_repo
  3. зроблено, тому що svn прив'язки потрібні лише для файлу: // протокол

Ні, ні mercurial binaries для win32, ні TortoiseHg не постачаються з розширенням для перетворення, тому "hg convert" не є навіть дійсною командою для win32.
Девід Лежав

1
Я спробував використовувати svn: // замість файлу: //, але він продовжує просити прив’язки Python
fglez

Використання svn: // замість файлу: // працювало для мене без прив'язок Python. Для запуску svn-сервера команда: svnserve -r <шлях до репо кореня> -d
Petter Wigle

7

2
Я знаю, це перше, на що я натрапив, але цитую: "Зауважте, що ви не можете цього зробити з бінарними файлами Win32 Mercurial - немає способу встановити прив'язки Subversion до його вбудованої бібліотеки Python" Я використовую Черепаха Hg ...
Девід Лежав

Використовуєте живий компакт-диск Linux або віртуальну машину?
richq

Це абсолютно правильна відповідь. Я зробив це, використовуючи лише розширення hg converting ( selenic.com/mercurial/wiki/… ) та використовуючи файловий протокол для сховища SVN без розширення pysvn: hg конвертувати файл: /// X: / HOME / REPOS / mysvnrep newhgrep
van

5

Щоб перетворити SVN Repo в HG Repo І скопіювати його на інший сервер, знадобиться кілька речей.

  1. ЧерепахаHG встановлена. (Перевірте, яка версія використовується зараз)
  2. Установлено Python. (Перевірте, яка версія використовується зараз)
  3. Модулі Python (ви можете знайти їх http://pysvn.tigris.org/project_downloads.html )
  4. Вам потрібно буде додати convertрозширення до Черепаха. Запустіть Worktoch TortoiseHG з меню «Пуск». Виберіть File -> Settings. Виберіть Extensionsзі списку. Поставте convertпрапорець і натисніть кнопку ОК.

Спочатку конверсія ...

  1. Найкраще відобразити папку, на якій знаходиться поточний SVN Repo, на комп'ютер, на якому ви працюєте. (тобто \\server\folder не картографуйте саму папку SVN Repo. Позначте папку безпосередньо над нею) Надайте картографічному диску, наприклад,Y:\
  2. Відкрийте командний рядок та введіть: CD /D Y:\
  3. У Y:\рядку підказок: hg convert y:/RepoName (використовуйте назву поточного Repo) Будьте уважні до перерізів вперед і назад. Команда в команді - це коса риса вперед. Крім того, якщо в імені є пробіли, введіть його в лапки. (тобто Y:/"My Repo folder")
  4. Тепер він повинен працювати і створить ще одну папку поряд зі старою. І папка hg повинна бути всередині. НЕ БУДЬ ЗАПИТАНО І НЕ ЗАПИТАТЬ!
  5. Перетворення завершено.

По-друге, клонування ...

  1. Відкрийте верстат TortoiseHG. Йти доFile -> Clone Repository
  2. Джерело: Введіть повний шлях перетвореного репо.
  3. Місце призначення: Введіть повний шлях до того, де ви хочете клонувати РЕПО. Не потрібно створювати папку за новим пунктом призначення, оскільки процес клонування створить її та ініціалізує.
  4. Додайте дозволи в нову клоновану папку.
  5. Ви закінчили !!!

Привіт, чи можна пояснити, чому ви не повинні бути initпершим сховищем?
Бен Пейдж

3

Ніхто досі не згадує hgsubversion ( Extension Wiki ), що може зробити це без майже будь-якого головного болю (за винятком рідкісних випадків та конкретного дерева).

Просто додайте розширення, увімкніть його та hg clone SVN_REPOлокальну репортаж


1

Це у поширених запитаннях про TortoiseHg :

Як я можу перетворити сховище субверсії в Mercurial?

Ви повинні встановити інструменти командного рядка svn-win32-1.4.6, а потім додати їх у свій шлях. Тоді потрібно включити розширення для перетворення. У цей момент ви повинні мати можливість використовувати команду ' hg convert' для здійснення перетворення. Будь ласка, направляйте проблеми / запитання щодо розширення перетворення на список розсилки Mercurial або #mercurialдалі irc.freenode.net.

Тож, мабуть, це можливо - я використовую Linux, тому я не намагався себе.


0

Я щойно перетворив віддалений репортаж SVN з HTTP auth в репортаж Mercurial, і дозвольте вам сказати, що не так багато документації, як це зробити. Мені довелося завантажити джерело Mercurial і встановити його окремо, використовуючи вихідний пакет, таким чином, SVN-прив'язки будуть працювати правильно.

Я встановив його так:

python setup.py install

Що добре працювало на моєму сервері Server 2003. Тепер я можу конвертувати SVN-репо в правильний спосіб, зробивши щось подібне:

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

Документація для ConvertExtension на сайті Mercurial не дуже зрозуміла, але вона говорить так:

Немає можливості встановити прив'язки Subversion до вбудованої бібліотеки Python у [Mercurial's]. Тому вам потрібно буде використовувати Mercurial, встановлений поверх автономного Python

Тому зараз я просто використовую окрему версію для перетворення, а TortoiseHg для фактичної роботи VCS.


0

краще пізно, ніж ніколи ...

Дві відповіді за ціну одного ...

  1. Якщо це загальнодоступне репо з відкритим кодом, ви можете просто скористатися http://svn2github.com/add/, для того щоб клонувати цю репо до GitHib, а потім просто перетягнути її на Hg.

  2. Перевага використання hg convertполягає в тому, що це може бути відновлено. Перетворення SVN в Hg може зайняти кілька днів . Якщо ви зупините це, він відновиться з того місця, де він припинився.

Нижче наведено пакетний файл, який я написав через сміття Codeplex SVNbridge. Репо в цьому прикладі знадобилося пару днів, щоб отримати всю історію (я в Австралії, тому затримка, можливо, була фактором). Мені б хотілося подумати, що це дало сервер TFS десь гарного побиття.

Цей пакетний файл можна запустити в будь-який час, щоб витягнути оновлення з джерела SVN, якщо вони є єдиними, що залишилися на землі, які фактично все ще використовують SVN. Я не перевіряв цього, щоб побачити, що станеться, якщо ти це зробиш, так якби я був ти, я б відмовився від початкової гілки, якщо ти збираєшся редагувати репо.

The robocopy shamap речі полягають у підтримці історії SVN, якщо ви клонуєте Hg-репо, 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розширення Mercurial:

  1. Увімкнути перетворення розширення; додати convert=до [extensions]розділу .hgrc так:

    [розширення]
    convert =

  2. Linux потребує додаткових прив'язок python: sudo apt-get install python-subversion
  3. Виконати hg convertкоманду
    • Зверніться hg convert -hза допомогою
    • Приклад: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] (див. Примітку 2)
  4. Перейдіть до новоствореного сховища Mercurial: hg push https://[mercurialserver]/[Project]

Примітка : ви навіть можете повторити команду hg convert, щоб включити нові зміни, внесені в сховище svn після попереднього перетворення.

Примітка 2 : Коли hg convert не працює з використанням http://або svn://ви можете спочатку оформити сховище Subversion (або оновити існуюче) та перетворити за допомогою локальної каси; приклад:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.