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

やっと重い腰を上げてgit-svnを使い始めた@DQNEOです。こんにちわ。
早く人間(=git日常ユーザ)になりたい。。

さて、git svn cloneをやるときは、--prefixオプションを付けた方がよいです。
$ git svn clone --prefix svn/ -s https://path/to/myproject
何も知らずに--prefixをつけずにcloneしたら、困ったことになりました。
$ git svn clone -s https://path/to/myproject

$ git branch -r
  trunk
↑困る。(笑)

普通リモートブランチって、
$ 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
やった!!
できました!!
カテゴリ:

人気記事