Как перенести / конвертировать из SVN в Mercurial (hg) в Windows - PullRequest
120 голосов
/ 12 мая 2009

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

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

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

Как я могу преобразовать проект SVN в Mercurial?

Ответы [ 9 ]

92 голосов
/ 24 июля 2009

Я просто должен был решить эту проблему сам. У меня машина Windows XP с отдельным сервером Windows, на котором размещен Сервер VisualSVN .

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

<Enable Convert Extension w/ Tortoise Hg 2>

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

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

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

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

1) Откройте C: \ Program Files \ TortoiseHg \ Mercurial.ini

EDIT

К вашему сведению - Tortoise Hg перенес этот файл в

  • XP или старше - C: \ Documents and Settings \ ИМЯ ПОЛЬЗОВАТЕЛЯ \ Mercurial.ini
  • Vista или более поздняя версия - C: \ Users \ USERNAME \ Mercurial.ini

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

[extensions]
convert =

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

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

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

4) Найдите строку с надписью

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

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

convert =

</Enable Convert Extension Manually>

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

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

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

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

8 голосов
/ 22 мая 2009
  1. запуск сервера SVN на локальном хосте
  2. hg convert svn: // localhost / your_repo
  3. сделано, потому что привязки svn нужны только для файла: // protocol
7 голосов
/ 12 мая 2009

Mercurial имеет встроенное расширение конверсии для этого .

5 голосов
/ 07 ноября 2012

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

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

Первое преобразование…

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

Второе клонирование…

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

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

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

1 голос
/ 27 мая 2009

Это в TortoiseHg FAQ :

Как я могу преобразовать хранилище Subversion в Mercurial?

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

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

0 голосов
/ 08 июня 2018

Использование расширения convert Mercurial:

  1. Включить преобразование расширения; добавьте convert= в раздел [extensions] .hgrc следующим образом:

    [расширения]
    конвертировать =

  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]

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

note 2 : когда hg convert не работает с использованием http:// или svn://, вы можете сначала извлечь хранилище Subversion (или обновить существующее) и преобразовать с помощью локальной проверки; пример: hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

0 голосов
/ 24 января 2015

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

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

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

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

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

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

Вещество 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 голосов
/ 12 мая 2010

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

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

python setup.py install

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

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

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

Нет способа установить Привязки Subversion к встроенному [Mercurial's] Библиотека Python. Так что вам нужно будет использовать Mercurial установлен на вершине автономный Python

Так что теперь я просто использую автономную версию для конвертации и TortoiseHg для реальной работы VCS.

...