Subversionから履歴を引き継いでgitへ移行(git-svn 使用例)
問題
Subversion管理されているソースがあります。
gitに移行したいです。
答え
git-svnを使用する。
準備
以下のようなエラーが発生する場合、
$ git svn
git: 'svn' is not a git command. See 'git --help'.
The most similar commands are
fsck
mv
show
gitだけインストールした環境では別途以下が必要かもしれない。
apt install git-svn
手順
場所を作る
mkdir xxx
cd xxx
gitリポジトリ作成
git svn init -s --prefix=svn/ https://svn.example.com/aaa/bbb/xxx
必要に応じて設定を調整
/trunk、/branches、/tags を切って運用していたら .git/config と一致しており問題ない。
/trunk なしのディレクトリを取り込みたいときなどでは、.git/config を編集して調整する。
デフォルト
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[svn-remote "svn"]
url = https://svn.example.com/aaa
fetch = bbb/xxx/trunk:refs/remotes/svn/trunk
branches = bbb/xxx/branches/*:refs/remotes/svn/*
tags = bbb/xxx/tags/*:refs/remotes/svn/tags/*
trunkなしに変更
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[svn-remote "svn"]
url = https://svn.example.com/aaa
fetch = bbb/xxx:refs/remotes/svn/trunk
prefixのsvnはoriginみたいなリモートの名前になり、trunkはブランチ名になる。
後で名前を変えればよいので、必要以上にいじらなくてよい。
履歴取得
git svn fetch
履歴の多いリポジトリでは時間がかかる。
ある時期以降の履歴だけでよい場合は範囲指定可能。
git svn fetch -r リビジョン:HEAD
今後使用するgitリポジトリを追加
git remote add origin https://git.example.com/xxx.git
リモートにpush
git push -u origin master