Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hgbook.pdf
Скачиваний:
50
Добавлен:
17.03.2015
Размер:
3.15 Mб
Скачать

Переход на Mercurial

Команда svnsync [http://svn.collab.net/repos/svn/trunk/notes/svnsync.txt] может значительно ускорить преобразование репозитория Subversion. Она создаёт зеркало только для чтения для репозитория Subversion. Идея заключается в создании локального зеркала вашего Subversion дерева, а затем преобразовании зеркала в Mercurial репозиторий.

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

$ svnadmin create memcached-mirror

Далее, мы установим ловушку Subversion необходимую для svnsync.

$ echo '#!/bin/sh' > memcached-mirror/hooks/pre-revprop-change $ chmod +x memcached-mirror/hooks/pre-revprop-change

Затем мы инициализируем svnsync в этом репозитории.

$ svnsync --init file://`pwd`/memcached-mirror \ http://code.sixapart.com/svn/memcached

Наш следующий шаг — начинаем процесс зеркалирования svnsync.

$ svnsync sync file://`pwd`/memcached-mirror

Наконец, мы импортируем истории нашего локального зеркала Subversion в Mercurial.

$ hg convert memcached-mirror

Мы можем использовать этот процесс инкрементно, если репозиторий Subversion по-прежнему используется. Мы запускаем svnsync для вытягивания новых изменений в наше зеркало, а затем запускаем hg convert для импорта их в наше дерево Mercurial.

Есть два преимущества двухступенчатого импорта с svnsync. Во-первых, используется более эффективная синхронизация кода Subversion по сети, чем при hg convert, так как меньше данных передаётся по сети. Во-вторых, импорт из локального дерева Subversion настолько быстр, что вы можете изменять ваши установки неоднократно без ожидания сетевых процессов каждый раз.

A.2. Переход из Subversion

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

A.2.1. Философские различия

Основное различие между Subversion и Mercurial, конечно то, что Subversion является централизованной, в то время как Mercurial распределённой. Mercurial хранит всю историю проекта на локальном диске, сеть нужна только если вы хотите явно общаться с другим репозиторием. В отличие от Subversion, которая очень мало информации хранит локально, и таким образом, клиент должен связываться со своим сервером для большинства распространенных операций.

Subversion более или менее может обходится без четко определенного понятия ветви: какая-то часть пространства имён сервера объявляется веткой и является предметом конвенции, с программным ограничением доступа. Mercurial обрабатывает репозиторий в качестве единой ветви управления.

A.2.1.1. Набор команд

Поскольку Subversion не знает, что части ее пространства имён в действительности ветви, то относится к большинству команд, как запросу работы над любым каталогом в котором вы сейчас находитесь. Например, если вы запускаете svn log, вы получите историю той части дерева, в которой вы находитесь, а не дерева в целом.

170

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]