В начале 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
В итоге получилось так:
$ mkdir ~/tmp/etckeeper $ cd ~/tmp/etckeeper $ sudo hg clone /etc mercurial updating to branch default 2543 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd mercurial/ $ hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors not trusting file /home/andrey/tmp/etckeeper/mercurial/.hg/hgrc from untrusted user root, group root not trusting file /home/andrey/tmp/etckeeper/mercurial/.hg/hgrc from untrusted user root, group root $ sed -i -e 's#^\(.\+\)$#"\1" = "Andrey Tataranovich"#' ../authors $ cat ../authors "andrey@server.home.tataranovich.com" = "Andrey Tataranovich " "Andrey Tataranovich " = "Andrey Tataranovich " "root@server.home.tataranovich.com" = "Andrey Tataranovich " "@server.home.tataranovich.com" = "Andrey Tataranovich " $ cd ../ $ git init converted Initialized empty Git repository in /home/andrey/tmp/etckeeper/converted/.git/ $ git clone https://github.com/frej/fast-export.git Cloning into 'fast-export'... remote: Enumerating objects: 13, done. remote: Counting objects: 100% (13/13), done. remote: Compressing objects: 100% (9/9), done. remote: Total 1666 (delta 3), reused 7 (delta 2), pack-reused 1653 Receiving objects: 100% (1666/1666), 484.84 KiB | 1.31 MiB/s, done. Resolving deltas: 100% (970/970), done. $ cd converted/ $ ../fast-export/hg-fast-export.sh -r ../mercurial/ -A ../authors Loaded 4 authors master: Exporting full revision 1/997 with 1179/0/0 added/changed/removed files Exported 1000/1179 files Exported 1179/1179 files master: Exporting simple delta revision 2/997 with 0/2/0 added/changed/removed files master: Exporting simple delta revision 3/997 with 1/0/0 added/changed/removed files [skipped] master: Exporting simple delta revision 994/997 with 1/9/0 added/changed/removed files master: Exporting simple delta revision 995/997 with 13/3/0 added/changed/removed files master: Exporting simple delta revision 996/997 with 1/1/0 added/changed/removed files master: Exporting simple delta revision 997/997 with 0/1/0 added/changed/removed files Issued 997 commands /usr/lib/git-core/git-fast-import statistics: --------------------------------------------------------------------- Alloc'd objects: 15000 Total objects: 10982 ( 2869 duplicates ) blobs : 6319 ( 2521 duplicates 2249 deltas of 6061 attempts) trees : 3666 ( 348 duplicates 3021 deltas of 3268 attempts) commits: 997 ( 0 duplicates 0 deltas of 0 attempts) tags : 0 ( 0 duplicates 0 deltas of 0 attempts) Total branches: 1 ( 1 loads ) marks: 1024 ( 997 unique ) atoms: 3777 Memory total: 3001 KiB pools: 2298 KiB objects: 703 KiB --------------------------------------------------------------------- pack_report: getpagesize() = 4096 pack_report: core.packedGitWindowSize = 1073741824 pack_report: core.packedGitLimit = 35184372088832 pack_report: pack_used_ctr = 2 pack_report: pack_mmap_calls = 1 pack_report: pack_open_windows = 1 / 1 pack_report: pack_mapped = 10480378 / 10480378 --------------------------------------------------------------------- $ git shortlog -sn 997 Andrey Tataranovich $ sudo mv .git /etc $ sudo chown -R root:root /etc/.git $ sudo chmod -R g-rwx,o-rwx /etc/.git $ sudo mv /etc/.hgignore /etc/.gitignore $ sudo vim /etc/etckeeper/etckeeper.conf # comment VCS="hg" and uncomment VCS="git" $ sudo tar -cpzf /root/etc-20201025.tar.gz /etc # just in case :) $ sudo rm -fr /etc/.hg/ $ sudo etckeeper init $ sudo etckeeper commit "Migrate etckeeper from mercurial to git" $ rm -fr ~/tmp/etckeeper
Комментариев нет:
Отправить комментарий