Показаны сообщения с ярлыком mercurial. Показать все сообщения
Показаны сообщения с ярлыком mercurial. Показать все сообщения

25 октября 2020

Миграция etckeeper с mercurial на git

В начале 2012 года я начал использовать etckeeper для отслеживания изменения в /etc. Тогда я использовал Mercurial в качестве системы контроля версий и было очевидным использовать его в качестве бэкенда хранения для etckeeper.

Двумя годами позже я сменил место работы и целиком переключился на Git. Все новые инсталляции уже использовали Git для etckeeper, но домашний сервер и ноутбук все еще оставались на Mercurial. Где-то в районе выхода Debian Jessie ноутбук перешел на Git при миграции с i386 на amd64. А сервер оставался на Mercurial до сегодняшнего дня, но несколько попыток починить такую ошибку привели к миграции:

/etc/cron.daily/etckeeper:
abort: path contains illegal component: .hg/undo.dirstate
abort: path contains illegal component: .hg/undo.backup.dirstate
abort: path contains illegal component: .hg/undo.dirstate
abort: path contains illegal component: .hg/undo.backup.dirstate

Когда-то я уже описывал процесс миграции с Mercurial на Git с использованием расширения hg-git, но в этот раз решил попробовать сделать по инструкции с git-scm.com

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.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

07 августа 2014

Как в Git просмотреть файл целиком из определенной ревизии

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

$ hg cat -r 2fad6072a89d path/to/file

в git для этого есть команда "show"

$ git show -r 269c3b6ca51a:path/to/file


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.