git-svnで特定のサブプロジェクトを扱う

svnリポジトリの構造が、

  • svn
    • trunk
      • project-a
      • project-b
    • branches
      • rc1
        • project-a
        • project-b
    • tags
      • v1.0
        • project-a
        • project-b


みたいになってるケースにおいて、subproject-aだけをgitリポジトリとして管理したいというケース。

git svn cloneの引数をうまく指定してハンドリングする方法がわからなかったんだけど、設定ファイルを自分で書けばうまくいきそう。

man git-svn

の、CONFIGURATIONの項目を見ればやりかたがかいてある。


.git/config に、

     [svn-remote "project-a"]
                   url = http://server.org/svn
                   fetch = trunk/project-a:refs/remotes/project-a/trunk
                   branches = branches/*/project-a:refs/remotes/project-a/branches/*
                   tags = tags/*/project-a:refs/remotes/project-a/tags/*

という記述をする。

で、git svn fetchすると

$ g b -r
project-a/trunk
project-a/branches/rc1
project-a/tags/v1.0

となって幸福が実現。

svn-remoteの記述を自由に書きかえたあとは、.git/svnディレクトリを削除してgit svn fetchするとうまくいく。と思う。