Как перенести/конвертировать из SVN в Mercurial (hg) в windows

Я ищу инструмент для переноса нескольких SVN-репозиториев в Mercurial, с историей, ярлыками и т.д.

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

Можно ли использовать эти сценарии Python в Windows? Если да, то что мне нужно сделать? Или, какие другие инструменты я могу использовать для выполнения этого процесса?

В принципе, как я могу преобразовать проект SVN в Mercurial?

Ответ 1

Мне просто пришлось самому решить эту проблему. У меня есть машина Windows XP с отдельным сервером Windows VisualSVN Server.

У меня также есть TortoiseHG, а также Клиент командной строки CollabNet Subversion.

<Enable Convert Extension w/ Tortoise Hg 2>

Большое спасибо bgever за то, что указали в комментариях, что с TortoiseHg 2.0, включение расширения конвертера стало проще, чем когда-либо. Как он говорит

С TortoiseHG 2.0 это было сделано гораздо проще: запустите TortoiseHG Workbench из меню "Пуск". Выбрать Файл → Настройки. Выберите расширения из списка. Проверьте 'convert' установите флажок и нажмите "ОК". Это! нет нужно попытаться сгенерировать конфигурацию файл больше и искать его в файле система. - bgever 11 марта в 7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Чтобы преобразовать репозиторий из SVN в HG, я выполнил следующие шаги:

1) Открыть C:\Program Files\TortoiseHg\Mercurial.ini

ИЗМЕНИТЬ

FYI - Tortoise Hg перенесет этот файл в

  • XP или старше - C:\Documents and Settings\USERNAME\Mercurial.ini
  • Vista или более поздняя версия - C:\Users\USERNAME\Mercurial.ini

Этот файл будет в основном пустым, и вы просто перечислите, что вы хотели бы переопределить там. Если это то, что у вас есть, просто добавьте эти две строки в самый конец файла:

[extensions]
convert =

2) Найдите строку, начинающуюся с

[расширения]

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

4) Найдите строку, в которой говорится

; convert =

и удалите точку с запятой, чтобы она читала

convert =

</Enable Convert Extension Manually>

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

6) Используйте эту команду

hg convert file:///y:/yoursvnreponame

Я обнаружил, что инструмент конвертации может иметь проблемы с сетевыми репозиториями, поэтому мне пришлось сопоставить диск с ним, но это сработало для меня отлично.

Ответ 2

  • запуск svn сервера на localhost
  • hg convert svn://localhost/your_repo
  • done, потому что привязки svn нужны только для файла://protocol

Ответ 4

Чтобы преобразовать SVN-репо в репозиторий HG и скопировать его на другой сервер, вам понадобится несколько вещей.

  • Установлен TortoiseHG. (Проверьте, какая версия в настоящее время используется)
  • Установлен Python. (Проверьте, какая версия в настоящее время используется)
  • Модули Python (вы можете найти их http://pysvn.tigris.org/project_downloads.html)
  • Вам нужно добавить расширение convert в Tortoise. Запустите инструмент TortoiseHG Workbench в меню "Пуск". Выберите File -> Settings. Выберите Extensions из списка. Установите флажок convert и нажмите "ОК".

Сначала преобразование...

  • Лучше всего отобразить папку, в которой текущий SVN-репо находится на компьютере, над которым вы работаете. (т.е. \\server\folder Не сопоставляйте папку SVN Repo. Переместите папку чуть выше нее). Дайте сопоставленному диску букву, например Y:\
  • Откройте команду "Запрос" и введите: CD /D Y:\
  • В приглашении Y:\ введите: hg convert y:/RepoName (используйте имя текущего репо). Будьте осторожны с косой чертой вперед и назад. Команда в команде - косая черта. Кроме того, если имя имеет пробелы, введите имя в цитаты. (т.е. Y:/"My Repo folder")
  • Теперь он должен быть запущен и создаст еще одну папку рядом со старой. И hg-папка должна быть внутри. ЭТО НЕ БУДЕТ ИНИЦИАТИВНО И НЕ ИНИЦИАТИВЫ!
  • Преобразование завершено.

Во-вторых, клонирование...

  • Откройте Workbench TortoiseHG. Перейдите к File -> Clone Repository
  • Источник: введите полный путь конвертированного репо.
  • Назначение: введите полный путь, в котором вы хотите клонировать репо. Нет необходимости создавать папку в новом месте назначения, так как процесс клонирования создаст ее и инициализирует ее.
  • Добавьте разрешения в новую клонированную папку.
  • Вы сделали!!!

Ответ 5

проклятые! Никто еще не упоминает hgsubversion (Расширение Wiki), который может сделать это без почти любой головной боли (исключая редкие случаи и конкретное дерево).

Просто добавьте расширение, включите его и hg clone SVN_REPO в локальное меркурийное репо

Ответ 6

Это в TortoiseHg FAQ:

Как преобразовать репозиторий subversion в Mercurial?

Вы должны установить инструменты командной строки svn-win32-1.4.6, а затем добавить их в свой путь. Затем вы должны включить расширение конвертировать. На этом этапе вы сможете использовать команду "hg convert" для преобразования. Пожалуйста, направляйте проблемы/вопросы о расширении конвертации в список рассылки Mercurial или #mercurial на irc.freenode.net.

Так что, по-видимому, возможно - я использую Linux, поэтому я не пробовал себя.

Ответ 7

Я просто преобразовал удаленное SVN-репо с HTTP-авторизацией в Mercurial repo, и позвольте мне сказать вам, что не так много документации о том, как это сделать. Мне пришлось загрузить источник Mercurial и установить его автономно, используя исходный пакет, таким образом, привязки SVN будут работать правильно.

Я установил его так:

python setup.py install

Что отлично работало на моем сервере Server 2003. Теперь я могу преобразовать SVN-репо правильным способом, выполнив что-то вроде этого:

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

Документация для ConvertExtension на сайте Mercurial не очень понятна, но она говорит следующее:

Невозможно установить Связывание Subversion в встроенном [Mercurial] Библиотека Python. Поэтому вам нужно будет использовать Mercurial, установленный поверх автономный Python

Итак, теперь я просто использую автономную версию для преобразования, а TortoiseHg - для работы с VCS.

Ответ 8

лучше поздно, чем никогда...

Два ответа на цену одного...

  • Если это публичный репозиторий с открытым исходным кодом, вы можете просто использовать http://svn2github.com/add/, для чего потребовалось около получаса для клонирования что репо для GitHib, а затем просто потяните его в Hg.

  • Преимущество использования hg convert заключается в том, что оно может быть возобновлено. Преобразование SVN в Hg может занять дней. Если вы остановите это, оно возобновится с того места, где оно остановилось.

Ниже приведен командный файл, который я написал, потому что Codeplex SVNbridge мусор. Репо в этом примере заняло пару дней, чтобы получить всю историю (я в Австралии, поэтому латентность, возможно, была фактором). Я хотел бы подумать, что он дал сервер TFS где-то хорошее избиение.

Этот командный файл может быть запущен в любое время, чтобы вытащить обновления из источника SVN, если они оказались единственными, оставленными на земле, по-прежнему использующими SVN. Я не тестировал его, поэтому посмотрим, что произойдет, если вы сделаете это, так что, если бы я был вами, я бы отказался от исходной ветки, если вы собираетесь редактировать репо.

Элемент robocopy shamap состоит в том, чтобы поддерживать историю SVN, если вы клонируете репо Hg, шамап является эфемерным - проверьте командный файл и 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 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