Преобразование репозитория Subversion в Mercurial


Я пытаюсь преобразовать хранилище SVN в Mercurial, но у меня возникли некоторые проблемы. Вот шаги, которые я предпринял: (я на Windows)

Включен параметр "конвертировать" в расширениях

Открыл окно командной строки и набрал:

hg convert http://myversioncontrorepositoryhere

Он говорит, что инициализирует папку назначения, а затем спрашивает:

Enter username for Administration at http://myversioncontrorepositoryhere:

Введите мое имя пользователя, а затем

 in Administration at http://myversioncontrorepositoryhere:

Я предполагаю, что это мой пароль, но он просто возвращается к

Enter username for Administration at http://myversioncontrorepositoryhere:

Что я делаю не так? Я в этом совершенно уверен Я правильно ввожу имя пользователя и пароль.

4 2

4 ответа:

Я не знаю, что может пойти не так, но я хотел бы предложить обходной путь (который является единственным способом, который я лично использовал для этой задачи!): первый svnsync свойство SVN проекта, чтобы сделать локальное зеркало, то hg convert, что локальное зеркало-это то, что О'Салливан предполагает, в его книги (URL-адрес, как "пример из книги", точно соответствующее приложение для импорта проектов из других систем контроля версий в НД-с особым акцентом на SVN!), хотя его предложение в основном вдохновлено соображения скорости я подозреваю, что следование ему также избавило меня от проблем с аутентификацией и авторизацией, и я надеюсь, что он может сделать то же самое для вас!- )

Вместо этого попробуйте hgsubversion; это намного надежнее. У меня было много странных проблем, взаимодействующих с CLI Subversion в Windows (в основном решаемых с помощью CMD вместо другой оболочки).

Мне посчастливилось решить проблему аутентификации, просто преобразовав из локальной проверки:

svn co http://myversioncontrorepositoryhere localrepo
hg convert localrepo

По моему опыту, преобразование репозитория Subversion в реальном слове с кучей проектов и многолетней историей немного сложнее. В основном потому, что в Subversion хорошо иметь один огромный РЕПО для всех вещей. Напротив, ртутные хранилища рекомендуется делать гораздо более мелкозернистыми.

Я предполагаю следующее расположение репозитория Subversion:

├── project1
│   ├── branches
│   ├── tags
│   └── trunk
│       ├── package1
│       └── package2
└── project2

Преобразование должно превратить package1 и package2 в отдельные ртутные хранилища со своей собственной историей. В этом ответ меня интересует один путь, но преобразование тегов и ветвей также возможно.

Подготовка

Обычно я делаю конвертацию на удаленном сервере с быстрым подключением. Для Debian-family требуются следующие пакеты.

apt-get install mercurial subversion python-subversion

Тогда расширение Convert должно быть включено.

echo -e "[extensions]\nhgext.convert=" >> ~/.hgrc

В Windows убедитесь, что вы выполнили необходимые условия.

Исполнение

Обратите внимание, что если вы попытаетесь выполнить преобразование непосредственно из удаленное РЕПО subversion, скорее всего, займет несколько часов, поэтому следующее создает зеркало пути проекта. Тогда каждое преобразование - это вопрос секунд до минут.

cd /tmp
svnadmin create svn-mirror

# on Windows you may need to look at comments to accepted answer
echo '#!/bin/sh' > svn-mirror/hooks/pre-revprop-change
chmod +x svn-mirror/hooks/pre-revprop-change

svnsync init file:///tmp/svn-mirror svn://subversion.repo/project1
svnsync sync file:///tmp/svn-mirror

echo 'include project1/trunk/package1' > package1-map
echo 'rename project1/trunk/package1 .' >> package1-map    
hg convert --filemap=package1-map svn-mirror package1

echo 'include project1/trunk/package2' > package2-map
echo 'rename project1/trunk/package2 .' >> package2-map    
hg convert --filemap=package2-map svn-mirror package2

Затем внутри каталога пакетов вы можете запустить hg serve -p 8080 и клонировать из http://your.host:8080 с помощью mercurial client или repo manager, например RhodeCode.