ASとか

開発系の記事が多めです。タイトルのASはActionScriptの略です。

SubversionリポジトリをGitへ移管する

はじめに

一昨年末の下書きを見つけ、せっかくなので公開。当時はこれでうまくいきました。

Subversionリポジトリからソースを回収

流れ

  1. SubversionユーザとGitユーザをマップするファイルを作成
  2. git svn init
  3. .git/configにSubversionリポジトリをどのような形式で回収するかを定義する
  4. git svn fetch

Subversionリポジトリの構成が結構複雑で、branchesの場所を色々定義したいがためにこのような手順になってます。単純な構成(trunkだけとか)であれば直でcloneでもいいと思います。

SubversionユーザとGitユーザをマップするファイルを作成

どこでもいいけど自分はホームディレクトリに作りました。マップしたいユーザが複数いる場合は改行して追加して下さい。

$ vi ~/.svnauthors
$ cat ~/.svnauthors 
svn_user_name = git_user_name <git_user_email>
git svn init

ソース回収するディレクトリでinit。branchesは複数指定可能、今回は無いけどtagsもbranchesとして指定するのだと思われる。

$ git svn init \
> --trunk=trunk/ \
> --branches=branches/branchA/* \
> --branches=branches/branchB/* \
> --prefix=svn/ \
> svn_repo_url

これでカレントディレクトリに.gitが作られるので、それを修正していきます。

.git/configにSubversionリポジトリをどのような形式で回収するかを定義する
$ git config --add svn.authorsfile /Users/murakaming/.svnauthors
$ cat ~/.git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[svn-remote "svn"]
        url = svn_repo_url
        fetch = trunk:refs/remotes/svn/trunk
        branches = branches/branchA/*:refs/remotes/svn/branches/branchA/*
        branches = branches/branchB/*:refs/remotes/svn/branches/branchB/*
[svn]
        authorsfile = /Users/murakaming/.svnauthors

authorsfileの定義の追加と、branchesをrefs/remotes/svn/直下に置かないようにしています。branches定義の修正はコマンドを使わずエディタで修正しました。

git svn fetch

git svn initしたディレクトリでfetch

$ git svn fetch

なお、途中でfetchが失敗しても再度同じコマンドをうつ事によって失敗したところから再開できます。私の場合はauthorsfileに不備がありましたがauthorsfile修正後に再開できました。

参考というか全て真似した