Migrating from Subversion to git
二つの作業のログ。(1) Subversion から git への移行。(2) 新たな git repository 二つを merge。
やりたいこと。Subversion から git への移行。Subversion 時代は自分用のレポジトリを二つ使用。相互に関連しているので、移行を機に統合。
Subversion から git への移行には svn2git を使う。git-svn だとずっと Subversion に貼り付きそうだが、目的は Subversion とおさらばすること。誤解かもしれない。ちゃんと調べたわけではない。
svn2git を gem で取ってくる。
gem install svn2git --source http://gemcutter.org
Subversion の repository には、svn というアカウントを作って svn+ssh でアクセスしていた。二つの repository は、projectA と projectB とする。
projectA を git に移行。projectB も同様。
なぜ --rootistrunk でうまくいくのかわかっていない。ファイルは current working directory 直下に生成される。適当なディレクトリを作ってからそこで実行する。
mkdir projectA
cd projectA
svn2git svn+ssh://svn@repo-host/projectA --rootistrunk
projectA に projectB を merge。とりあえず projectA/projectB というディレクトリ構成にする。気に入らない部分は後で移動させればよい。
そして git commit。これで projectA でも projectB の履歴を引き継げている。
cd projectA-git-path
git remote add -f projectB projectB-git-path;
git merge -s ours --no-commit projectB/master;
git read-tree --prefix=projectB -u projectB/master;
projectA 側で projectB を track する必要はない。縁を切る。
git branch -rd projectB/master
.git/config に svn や projectB の痕跡が残っているが問題なかろう。git branch -a では出てこない。
git clone --bare でハブとなる repository を作る。こちらの .git/config には svn や projectB の痕跡は残っていない。
svn:ignore の情報は引き継がれない。手動で等価な .gitignore を作る。