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

Приложение A. Переход на Mercurial

Простой способ прощупать почву с новым инструментом контроля версий, это поэкспериментировать с переключением существующих проектов, а не начинать новый проект с нуля.

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

A.1. Импорт истории из другой системы

Mercurial поставляется с расширением называемым convert, которое может импортировать историю проекта из наиболее популярных систем контроля версий. В то время когда эта книга была написана, оно могло импортировать историю из следующих систем:

Subversion

CVS

git

Darcs

Bazaar

Monotone

GNU Arch

Mercurial

(Чтобы понять, почему Mercurial поддерживает в качестве источника самого себя, смотрите в разделе Раздел A.1.3, «Очистка дерева».)

Вы можете включить расширение в обычном порядке, отредактировав файл ~/.hgrc.

[extensions] convert =

Это сделает доступной команду hg convert. Команда проста в использовании. Например, эта команда будет импортировать историю Subversion для Nose unit testing framework в Mercurial.

$ hg convert http://python-nose.googlecode.com/svn/trunk

Расширение convert действует поэтапно. Иными словами, после того как вы выполните hg convert первый раз, запуская его снова вы будете импортировать любые новые ревизии, совершенные после первого запуска. Инкрементные преобразования будут работать только если вы запустите hg convert в том же репозитории Mercurial, который вы использовали, потому что расширение convert сохраняет некоторые частные метаданные не под контролем системы контроля версий, в файле с именем .hg/shamap внутри целевого репозитория.

Если вы хотите начать делать изменения, используя Mercurial, то лучше клонировать дерево, в котором вы будете проводить преобразование и оставить оригинальное дерево для последующий инкрементальных преобразований. Это самый безопасный способ позволяет вытягивать и объединять будущие изменения из исходной системы контроля версий в своём новом активном репозитории Mercurial.

A.1.1. Конвертирование нескольких ветвей

Команда hg convert приведенная выше преобразует только историю ветки trunk репозитория Subversion. Если мы вместо этого используем URL http://python-nose.googlecode.com/svn, Mercurial автоматически обнаружит trunk, tags и branches, которые обычно используют проекты Subversion, и он будет импортировать каждый как отдельную ветвь Mercurial.

168

Переход на Mercurial

По умолчанию, каждая ветка Subversion импортируется в Mercurial с названием ветки. После завершения преобразования, можно получить список имен активных веток в Mercurial репозитории с помощью hg branches -a. Если вы предпочитаете импортировать ветви Subversion без названия, используйте опцию --config

convert.hg.usebranchnames=false команды hg convert.

Как только вы преобразовывали свое дерево, если вы хотите следовать обычной для Mercurial практике работы в одном дереве, содержащем одну ветку, можно клонировать одну ветку используя hg clone -r mybranchname.

A.1.2. Связь имён пользователей

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

Если вы преобразовываете дерево из системы контроля версий, которая использует короткие имена, можно сопоставить эти имена с длинными эквивалентами, передавая опцию --authors команде hg convert. Этот параметр принимает имя файла, который должен содержать записи следующего вида.

arist = Aristotle <aristotle@phil.example.gr> soc = Socrates <socrates@phil.example.gr>

Всякий раз, когда convert встретит ревизию с именем пользователя arist в исходном репозитории, он будет использовать имя Aristotle <aristotle@phil.example.gr> в преобразованной для Mercurial ревизии. Если совпадения не найдется, то имя используется дословно.

A.1.3. Очистка дерева

Не все проекты имеют чистую историю. Там может быть каталог, который никогда не должен были проверятся, слишком большие файлы, или целая иерархия, которая должна быть переработана.

Расширение convert поддерживает идею «карты файлов», которая позволяет реорганизовать файлы и каталоги в проекте, при импорте истории проекта. Это полезно не только при импорте истории из других систем контроля версий, но также и для того чтобы подрезать или реорганизовать дерево Mercurial.

Чтобы указать карту файлов, используйте опцию --filemap и укажите имя файла. Карта файлов содержит строки в следующем формате.

#This is a comment.

#Empty lines are ignored.

include path/to/file

exclude path/to/file

rename from/some/path to/some/other/place

Директива include указывает файл или все файлы в каталоге, которые будут включены в целевой репозиторий. Она также исключает любые другие файлы и директории не включенные явно. Директива exclude указывает файлы или директории, которые будут исключены, а другие прямо не упоминаемые должны быть включены.

Чтобы переместить файлы или каталог из одного места в другое, используйте директиву rename. Если вам необходимо переместить файл или каталог из подкаталога в корневой каталог репозитория, используйте . в качестве второго аргумента директивы rename.

A.1.4. Улучшение эффективности преобразования

Subversion

Часто требуется несколько попыток, прежде чем будет получена идеальное сочетание карты пользователей, карты файлов и других параметров конвертации. Преобразование репозитория subversion через протокол доступа похожий на ssh или http может протекать в тысячи раз медленнее, чем Mercurial реально способен работать, изза задержек в сети. Это делает подбор идеальных настроек преобразования очень тяжелой.

169

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