読者です 読者をやめる 読者になる 読者になる

gitosisからgitoliteへの移行

git サーバーを gitosis から gitolite へ移行する際の作業メモです。
基本的には、gitolite サーバーを構築して、リポジトリrsync で移行すればよいのですが、若干ファイル構成が異なるので rsync 時に注意が必要です。

環境

  • gitosis: 0.2
  • gitolite: 3.04

移行手順の流れ

  1. gitolite のインストール・設定
  2. gitosis 管理用リポジトリ(gitosis-admin) を移行して、keydir 以下の公開鍵を移行
  3. コンフィグファイルのコンバート(gitosis.conf -> gitolite.conf)*1
  4. gitosis-admin 以外のリポジトリデータを gitolite へ rsync で移行
  5. DNS を変更して、gitolite へ切替

データ移行(rsync)時の注意点

単純に gitosis から gitolite へ rsync すると、xxxxx.git/gl-conf と xxxxx.git/hooks/update が削除されてしまい、gitolite 側でリポジトリへアクセスできなくなります。

FATAL: split conf set, gl-conf not present for '%repo-name%'
fatal: The remote end hung up unexpectedly

なので、rsync 時は以下のように exclude オプションを指定します。
gitolite-admin も削除されてしまうので、exclude に指定します。

$ rsync -azrv --delete --exclude "gitolite-admin.git" --exclude "*/gl-conf" --exclude "*/hooks/update" -e ssh /var/lib/gitosis/repositories/ gitolite-server:/var/lib/gitolite3/repositories/

もし、gl-conf と hooks/update を削除してしまった場合は、以下のスクリプトを実行すると、再作成されます。

$ /var/lib/gitolite3/.gitolite/hooks/gitolite-admin/post-update

post-update を実行すると、/var/lib/gitolite3/.gitolite/conf/gitolite.conf-compiled.pm が更新されます。

*1:https://github.com/sitaramc/gitolite に コンバートスクリプト(convert-gitosis-conf) が公開されています