2014年1月6日月曜日

git svnからgitへの移行

ソース管理にはvss、svnと色々ありますが、そろそろgitに移行しましょう、という話がでました。
それでは、とばかりに、とあるsvnリポジトリからgitに移行しようとしましたが、これが割りと知識不足のために四苦八苦したのでメモメモ。

1) git svn cloneコマンドでsvnリポジトリを取得します

git svn clone http://svn/my_project

このとき、対象のsvnリポジトリが一般的なの構成(※ 管理の主体となる「my_project」階層配下でtrunk、brunch、tagがぶら下がっている構造)の場合、「- s」オプションを付与して実行しますが、

git svn clone -s http://svn/my_project

trunk配下に別のプロジェクトや、ドキュメントまで一括して管理しているような構造の場合、「-T」「-b」「-t」オプションでtrunk、brunch、tagの階層を明示的に指定してやる必要があります。

git svn clone -T http://svn/my_project/trunk/android/ -b http://svn/my_project/brunch/android/ -t TAGS http://svn/my_project/tag/android/

**

上記のように実行すると、最旧から最新のリビジョンまでの更新情報を取得しますので、対象のリポジトリの規模が大き過ぎると、場合によっては半日以上経っても取得が完了しない場合がありますので、「-r」オプションで最低限必要なリビジョン範囲を指定して取得することも検討します。

git svn clone -r 0001:HEAD http://svn/my_project


2) GitHub Enterprise上等でリポジトリを作成



3) 作成した後、pushコマンドで対象のリポジトリにpushします

git push -f http://git/my_project.git

このとき、ポイントとなるのは、「-f」オプションで強制pushしないと失敗してしまいます。
あまり強制pushは望ましくないですが、git svn cloneコマンドでリビジョンを取得すると、git移行後にsvnリポジトリにコミットした内容をgit上に反映したい場合、git svn rebaseで手軽に実行できます。