ローカル svn リポジトリを git svn clone する
ローカルドライブ上の file:/// でアクセスしている svn リポジトリを git svn で吸い上げようとしてエラーにぶつかったこと、ありませんか?
「FS format が想定外」とか言われ、えー('A`) みたいな。
C:\work>git svn clone -s file:///c:/repos/proj Initialized empty Git repository in c:/work/proj/.git/ Couldn't open a repository: Unable to open an ra_local session to URL: Unable to open repository 'file:///c:/repos/proj': Expected FS format '2'; found format '4' at C:\Git/libexec/git-core/git-svn line 1919
この場合、git svn がリポジトリに直接見るから svn リポジトリの形式に左右されるわけで、要は別の手段で間接的にリポジトリにアクセスすればいいわけです。
間接的にリポジトリにアクセスする方法として WebDAV (http://) 経由がありますが、これでやろうとすると、apache を入れたり、svnadmin dump しておいて別サーバにリストアして〜とか、ちと手間がかかるのでもう1つの方法を使うことにします。
svn 独自プロトコルの svn:// でのアクセスです。
ローカルなのでやり方は簡単、svn に入ってる svnserve を使います。
Windows用に公開されているパッケージによっては、この svnserve が含まれていないパッケージもあるようですが、win32svn のパッケージには含まれていますので、svnserve が無い!って方は win32svn のパッケージを入れてください。
そして、別コマンドラインを開いておいて、そこで svnserve を立ち上げます。
--root にはリポジトリが置かれているフォルダを指定します。
C:\svn\bin>svnserve -d --root c:\repos
で、git svn clone。 svn://localhost/ でアクセスするのがポイント。
C:\work>git svn clone -s svn://localhost/proj A branch1 r1 = 34d6a8bec48deaedb46a260e3c91c7abe75cb817 (refs/remotes/branch1) A trunk r1 = 1fda83f8ae9762fae93ef9ccdd6ae32a3fff8ef0 (refs/remotes/trunk) A tag2 r1 = b67e41ba9b5e987b74e223e2795cc53a86fc6938 (refs/remotes/tags/tag2) A branch2 r1 = 718ecc7a4365c23cde362cbb06d9567ca1ce7a9f (refs/remotes/branch2) A tag1 r1 = f76868e65640df7b61328d3ac6daa320a9048e4b (refs/remotes/tags/tag1) Checked out HEAD: svn://localhost/proj/trunk r1
これでサクッと git に吸い出し完了です。
svnserve は CTRL+C で終了してください。
1点問題があって、msysgit だと日本語ファイル名が化けるようです。 こちらは msysgit ではなく cygwin の git を使えば回避できる、ということらしいです(未確認)。