git svn cloneをやるときは--prefix svn/をつけるべき

普通リモートブランチって、
$ git branch -r
  origin/master
  origin/br_1
  upstream/master
  upstream/br_1
こういう風に表示されて欲しいじゃないですか。
"リモート名/ブランチ名"となって欲しいのです。

git svn cloneするときに--prefixを付け忘れたときの対処法

レポジトリが巨大すぎて(数万コミットある)、cloneをやりなおしたくない。
そこで、.gitの中身を直接いじったらうまくいきました。

(ただしこれはドキュメントには書いてない非公式かつ強引なやり方なので、作業するときは十分注意して行ってください)
調査
.git の中に入って、"trunk"という名前のディレクトリ・ファイルを探します。
$ cd .git

$ find . -name 'trunk'
./refs/remotes/trunk  ( ←ファイル)
./svn/refs/remotes/trunk  ( ←ディレクトリ)
./logs/refs/remotes/trunk  ( ←ファイル)

$ grep trunk . -r
./config:       fetch = trunk:refs/remotes/trunk   ( ←ファイルの中身)
このあたりをいじれば良さそうです。
実行
$ mkdir svn/refs/remotes/svn
$ mkdir refs/remotes/svn
$ mkdir logs/refs/remotes/svn
$ mv svn/refs/remotes/trunk svn/refs/remotes/svn
$ mv refs/remotes/trunk refs/remotes/svn
$ mv logs/refs/remotes/trunk logs/refs/remotes/svn
$ sed -i -e s#remotes#remotes/svn# config
こんな感じで.git内を変更しました。
そして、
確認
$ git branch -r
  svn/trunk
やった!!
できました!!
カテゴリ: