суббота, 30 августа 2014 г.

Конвертирование репозитария из mercurial в git

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

Итак, сначала делаем копию репозитария (я добавляю опцию --noupdate, чтобы скопировать только метаданные)

$ hg clone --noupdate project.orig project.hg

Затем нам нужно установить расширение hg-git и подключить его в ~/.hgrc. В дебиан для этого нужно установить пакет mercurial-git

$ sudo aptitude install mercurial-git
$ cat >> ~/.hgrc <<_EOF_
[extensions]
hgext.bookmarks =
hgext.git =
hgext.convert =
_EOF_

Инициализируем пустой git репозитарий (тут нужно обратить внимание на опцию --bare, иначе hg push закончится ошибкой "прервано: git remote error: refs/heads/master failed to update"

$ mkdir project.git
$ git init --bare project.git/.git
Initialized empty Git repository in /home/andrey/tmp/hg-to-git/project.git/.git/

Если нужно скопировать информацию о ветках, кроме default, то нужно сначала добавить соответствующие bookmarks в репозитарии mercurial

$ cd project.hg
$ hg bookmark -r default master
$ hg bookmark -r feature1 feature_1
...

Когда все будет готово настает время выполнить push из репозитария project.hg в project.git

$ cd project.hg
$ hg push ../project.git
проталкиваем в ../project.git/
creating and sending data

На большом репозитарии этот процесс может занять много времени и потребовать достаточный объем оперативной памяти. Если процесс завершился без ошибок, то пора проверить историю комитов и соответствие бранчей в project.git

$ cd project.git
$ git log -n 1
commit 2c765e70ad96c2bd2bc6cc0b545038f4faa42c25
Author: John Doe <john.doe@example.com>
Date:   Sun Apr 20 12:27:44 2014 +0300

    Latest fixes for reviews.

$ git branch
* master
  feature_1

Теперь все готово и можно работать с репозиторием через git.

Комментариев нет:

Отправить комментарий