2009-11-01 2 views
2

Я пытаюсь преобразовать SVN-репозиторий в Mercurial, но у меня возникают некоторые проблемы. Эти шаги, которые я взял: (я на Windows)Преобразование репозитория Subversion в Mercurial

Включил «конвертировать» в расширениях

открыл окно командной строки, и напечатал:

hg convert http://myversioncontrorepositoryhere 

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

Enter username for Administration at http://myversioncontrorepositoryhere: 

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

in Administration at http://myversioncontrorepositoryhere: 

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

Enter username for Administration at http://myversioncontrorepositoryhere: 

Что я делаю неправильно? Я уверен, что правильно печатаю свое имя пользователя и пароль.

ответ

7

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

+0

Я пытаюсь сделать svnsync, но я продолжаю получать эту ошибку: svnsync: репозиторий не был включен для принятия изменений; попросите администратора создать привязку с предварительным revpp-изменением Так что я включил крюк pre-revprop-change, но это все еще происходит. – Paul

+0

Отмените это - крюк, который там работает, не работает под окнами, он должен содержать «@exit 0» – Paul

3

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

+0

hgsubversion, по-видимому, не может справиться с именами, отличными от ASCII, решив не интерпретировать их как UTF-8, а латынь 1. Знаете ли вы об этом? – Joey

+0

Файл с ошибкой? :) Серьезно, это все Python, он должен уметь справляться. –

1

Мне посчастливилось установить аутентификацию проблемы путем простого преобразования из локального выезд:

svn co http://myversioncontrorepositoryhere localrepo 
hg convert localrepo 
+0

Хорошая точка! Один недостаток заключается в том, что вы пропускаете 'trunk /' + 'branch /' + 'tags /' conversion .... – gavenkoa

0

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

Я предполагаю, что следующий Subversion структура хранилища:

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

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

Подготовка

Я обычно делаю преобразование на удаленном сервере с быстрым подключением. Для семейства Debian требуются следующие пакеты.

apt-get install mercurial subversion python-subversion 

Затем следует включить расширение преобразования.

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

В Windows убедитесь, что вы выполнили the prerequisites.

Исполнение

Обратите внимание, что если вы пытаетесь сделать преобразование непосредственно из удаленного подрывных репо он, вероятно, занять несколько часов, так что следующее создает зеркало пути проекта. Затем каждое преобразование занимает от нескольких секунд до нескольких минут.

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.

Смежные вопросы