Subversionのbranchesやtagsの階層が深くて移行に失敗してた
SVNからGitへ移行したリポジトリにPushしようとするとSourceTreeでエラーがでる
$ git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags origin foo:foo Pushing to http://userid@git.example.com/scm/migration/hogehoge.git error: src refspec Tools matches more than one. error: failed to push some refs to 'http://userid@git.example.com/scm/migration/hogehoge.git'
- どうやらブランチ名と同じタグ名がいるので失敗しているらしい。タグを消せばいいのかもしれないけど、そもそもこの状況はおかしいので調べてみました。
1つのリポジトリに複数のプロダクトを入れて管理してたのでbranchesやtagsの階層が深かったらしい
- で、
git svn clone -s
だと上手く取れなかったというわけですね。 - なんか、バージョンが付いてないToolsとかいうタグがあっておかしいなーって思ったんですよねw
移行し直し
- 仕方がないのでもう一度最初から移行し直します。
- 今度は、branchesやtagsの位置をオプションで指定します。
- とても長いです。
$ git svn clone --trunk=/trunk --branches=/branches/foo1 --branches=/branches/foo2 --branches=/branches/foo3 --branches=/branches/foo4 --branches=/branches/foo5 --branches=/branches/foo6 --branches=/branches/foo7 --branches=/branches/foo8/bar1 --branches=/branches/foo8/bar2 --tags=/tags/foo1 --tags=/tags/foo2 --tags=/tags/foo3 --tags=/tags/foo4 --tags=/tags/foo5 --tags=/tags/foo6 --tags=/tags/foo7 --tags=/tags/foo8 --tags=/tags/foo9 --tags=/tags/foo10 --tags=/tags/foo11 --tags=/tags/foo12 --tags=/tags/foo13 --tags=/tags/foo14 --tags=/tags/foo15 --tags=/tags/foo16 --tags=/tags/foo17 --tags=/tags/foo18/bar1 --tags=/tags/foo18/bar2 http://svn.example.com/svn/hogehoge hogehoge
注意点
- でかいリポジトリなので1日中流しても終わりません。
- ほっといたら止まっていたので、コマンドを流し直したらエラーが出るようになりました。
W: Refspec glob conflict (ref: refs/remotes/trunk):
とかいうエラーが頻発しだします。- これは、.git/configの中にあるbranchesやtagsの定義が重複している時に起こるらしいのです。
- 重複を削除すれば直ります。
- ほっといたら止まっていたので、コマンドを流し直したらエラーが出るようになりました。
移行したらリポジトリを整理して分割させないと・・・