SubversionレポジトリをGitに移行する
自宅サーバーのSubversionレポジトリをGitに移行したのでメモ。
Gitではデータ転送用のプロトコルとして以下の4種類が使用できる。
- Local
- Secure Shell (SSH)
- Git
- HTTP
自分は自宅サーバーに既にセットアップしてある環境を再利用するため、SSHを使用することにした。
移行元のSubversionのレポジトリは/home/subversionにおいてある。また、移行先のGitレポジトリは/home/gitに置くことにした。
SubversionレポジトリからGitレポジトリへ移行するには以下の手順で行う。
- git svn clone で既存のSubversionレポジトリをGitレポジトリとしてローカルにcloneする
- タグを変換する
- 参照をローカルブランチに移動する
- git clone --bare でベアレポジトリを作る
以下は自宅サーバーのSubversionレポジトリをまとめて移行するためのスクリプト。/home/git以下でgitユーザーでログインして実行する。
#!/bin/sh for directory in `ls ~subversion/` do if [ -e ${directory}.git ] then echo "*** Skipping ${directory} ..." continue fi echo "*** Converting ${directory} ..." echo "*** Cloning ${directory} ..." cd git svn clone http://kishibe.dyndns.tv/svn/${directory} --authors-file=users.txt --no-metadata -s ${directory} || exit 1 echo "*** Cleaning up ${directory} ..." cd ${directory} git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag "$tagname" "tags/$tagname"; git branch -r -d "tags/$tagname"; done git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/$branchname"; git branch -r -d "$branchname"; done echo "*** Cloning ${directory}.git ..." cd git clone --bare ${directory} ${directory}.git || exit 1 echo "*** Removing ${directory} ..." rm -Rf ${directory} done
リンク
- Git - プロトコル https://git-scm.com/book/ja/v1/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB
- Git - Git への移行 https://git-scm.com/book/ja/v1/Git%E3%81%A8%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E9%80%A3%E6%90%BA-Git-%E3%81%B8%E3%81%AE%E7%A7%BB%E8%A1%8C
- Git - サーバー用の Git の取得 https://git-scm.com/book/ja/v1/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E7%94%A8%E3%81%AE-Git-%E3%81%AE%E5%8F%96%E5%BE%97