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


120

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

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

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

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

Ответы:


93

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

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

<Enable Convert Extension w/ Tortoise Hg 2>

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

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

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

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

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

РЕДАКТИРОВАТЬ

К вашему сведению - 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

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


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

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

У меня это хорошо сработало с Mercurial V1.4.3. Репозиторий svn годичной давности преобразован очень быстро с сохранением полной истории. Большое спасибо!
Джонатан Уэбб,

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

9
В TortoiseHG 2.0 это стало намного проще: запустить TortoiseHG Workbench из меню «Пуск». Выберите Файл -> Настройки. Выберите Extensions из списка. Установите флажок «конвертировать» и нажмите «ОК». Это оно! Больше не нужно пытаться сгенерировать файл конфигурации и искать его в файловой системе.
Bart Verkoeijen

8
  1. запуск svn-сервера на локальном хосте
  2. hg конвертировать svn: // localhost / your_repo
  3. сделано, потому что привязки svn нужны только для протокола file: //

Нет, ни mercurial двоичные файлы для win32, ни TortoiseHg не идут с расширениями convert, так что "hg convert" даже не является допустимой командой для win32.
Дэвид Лэй

1
Я пробовал использовать svn: // вместо file: //, но он продолжает запрашивать привязки Python
fglez

Использование svn: // вместо file: // работало для меня без привязок Python. Для запуска svn-сервера используется следующая команда: svnserve -r <путь к корню репо> -d
Петтер Уигл,

7

2
Я знаю, это первое, на что я наткнулся, но цитирую: «Обратите внимание, что вы не можете сделать это с двоичными файлами Win32 Mercurial - нет возможности установить привязки Subversion во встроенную библиотеку Python». Я использую TortoiseHg ...
Дэвид Лэй

Используйте Live CD с Linux или виртуальную машину?
richq

Это абсолютно правильный ответ. Я сделал это, используя только расширение hg convert ( selenic.com/mercurial/wiki/… ) и используя файловый протокол для репозитория SVN без расширения pysvn: hg convert file: /// X: / HOME / REPOS / mysvnrep newhgrep
van

5

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

  1. TortoiseHG установлен. (Проверьте, какая версия используется в настоящее время)
  2. Python установлен. (Проверьте, какая версия используется в настоящее время)
  3. Модули Python (вы можете найти их http://pysvn.tigris.org/project_downloads.html )
  4. Вам нужно будет добавить convertрасширение в Tortoise. Запустите 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. Готово !!!

Привет, можно ли объяснить, почему не стоит initиспользовать первый репозиторий?
Бен Пейдж

3

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

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


1

Это в FAQ TortoiseHg :

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

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

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


0

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

Установил так:

python setup.py install

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

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

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

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

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


0

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

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

  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

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

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

    [extension]
    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.