По моему опыту, преобразование реального хранилища Subversion с кучей проектов и многолетней историей немного сложнее. В основном потому, что в Subversion хорошо иметь одно огромное репо для всего этого. Напротив, хранилища Mercurial рекомендуется быть более мелкозернистыми.
Я предполагаю следующую схему хранилища Subversion:
├── project1
│ ├── branches
│ ├── tags
│ └── trunk
│ ├── package1
│ └── package2
└── project2
Конверсия должна превратить package1
и package2
в отдельные репозитории Mercurial с собственной историей. В этом ответе меня интересует один путь, но также возможно преобразование тегов и ветвей .
Подготовка
Обычно я делаю преобразование на удаленном сервере с быстрым подключением. Для семейства Debian требуются следующие пакеты.
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
с помощью ртутного клиента или менеджера репозитория, такого как RhodeCode.