Subversion管理リポジトリをGitHubに移管

著名開発者もすなるgithubといふものを、私もしてみむとてするなり - Archit!!のさらに続き。
現在Subversion(SVN)で管理しているリソースをGitHubに移管する方法のメモ。
基本的には、GitHubのヘルプ記載の方法をとる。そこに記載している svn2git を使う。svn2gitの使い方もsvn2gitのREADMEを読めば書いてあるのだが、少しはまるところがあるので注意が必要。

svn2gitのインストール

  1. 前提として、git、git-svnrubyがインストールされているローカル環境が必要。さらに、rubygemsがインストールされている必要がある。なぜか、私のMacにはすでに入っていた。いつ入れたのだろう…。
  2. 上記環境で、以下のコマンドを実行。
    $ sudo gem install svn2git

authors.txtファイルの用意

SVNでのユーザー名とGitのユーザー名の対照を記述したauthors.txtファイルを用意する。以下のような内容を記述して、任意の場所に配置する*1

jcoglan = James Coglan 
stnick = Santa Claus 

作業ディレクトリの用意

ローカルにSVNから吸い出したソースを配置するディレクトリが必要。どこでもいいので任意のディレクトリを用意し、cdコマンドでそのディレクトリまで移動する。

SVNリポジトリからソースを吸い出す。

SVNでは通常、trunk-branches-tags構成になっているはずなので、その上位ディレクトリから吸い出すことになる*2。このあたりは、先のエントリにも書いたが、例えば、

HogeProject
  |----Document
  |      |----branches
  |      |----tags
  |      |----trunk
  |             |----hogedoc
  |
  |----src
  |      |----branches
  |      |----tags
  |      |----trunk
  |             |----hogesrc

の場合、HogeProject全体をGitHubに移管はできない。この場合は、DocumentでひとつのGitHubリポジトリ、SrcでひとつのGitHubリポジトリとなる*3。そのことを念頭に置いて、例えば、Srcを吸い出す場合は、以下のコマンドを実行する。

$ svn2git http://[svnのURL]/HogeProject/Src  --username [ユーザー名] --authors [authors.txtファイルのパス] -v

ここで、ポイントとなるのが-vオプション。通常SVNは認証がかけられていることが多い。-vオプションをしていることで、コマンド画面に

Authentication realm: SVN Repository
Password for '[ユーザー名]':

というのが出力される。この状態で認証パスワードを入力する。ただし、「ひょっとしてこちらの入力、間違っている?」と尋ねたくなるぐらい何回もきいてくることがあるので、その都度入力する*4

GitHub

吸い出しが完了したら、作業ディレクトリ内はすでにGitリポジトリ構成になっているので、それをGitHubにあげればいい。手順は以下の通り。

  1. GitHubリポジトリを作成。この時、SSH用のURI、例えば、
    git@github.com:architshin/hoge.git
    が表示されるので、それをコピーしておく。
  2. 作業ディレクトリ上で以下のコマンドを実行。URIは上記1のURIに読み替える。
    $ git remote add origin git@github.com:GITHUB_USERNAME/REPO_NAME.git
  3. 作業ディレクトリ上で以下のコマンドを実行。これで、プッシュが完了する。
    $ git push origin master

*1:svn2gitのREADMEによると、~/.svn2git/authorsファイルとして配置すると、自動で読み込んでくれるらしい。

*2:svn2gitのREADMEにはtrunk-branches-tags構成ではない場合の吸い出し方法も書かれている。

*3:プライベートリポジトリへの移管の場合、リポジトリ数が一挙に増えてすぐにMicroプランでは足らなくなってしまう。このあたりは悩ましいものだ。

*4:私は5、6回ほど入力した。