巨大なSVNリポジトリの一部をGitリポジトリにする
PCその他
2013-08-30 10:51 (12 years ago)

前提条件
- 大きなSVNリポジトリがあり、その中のディレクトリの1つのディレクトリがソースコードのディレクトリ。他はドキュメントやmysqldumpなんかが入っている
- ソースコードのディレクトリのみ svn checkout して更新するという運用をしていた
- git化したい
- ただし、ソースコード以外のディレクトリはサイズが大きいので、リポジトリに含めたくない
試したこと
- git svn clone -s --prefix svn/ http://my-svn-server/svn/myproject/ myproject
→ドキュメントやmysqldumpなんかが含まれた巨大な myproject リポジトリができる
- git svn clone -s --prefix svn/ http://my-svn-server/svn/myproject/source/ myproject
Using higher level of URL: W: Ignoring error from SVN, path probably does not exist: (175002): RA layer request failed: REPORT of '/svn/myproject
このようなエラーが出て、clone できない。
実現方法
まずはそのまま clone してくる。
git svn clone -s --prefix svn/ http://my-svn-server/svn/myproject/ myproject cd myproject git svn create-ignore git commit -m 'add gitignore'
一旦ここで、ローカルリポジトリの全コピーを取っておく
cd .. cp -r myproject myproject_work cd myproject_work
git filter-branch でソースコードのコミットのみにする!
git filter-branch --subdirectory-filter source HEAD
不要なディレクトリを消しておく (やらなくても大丈夫だけど)
rm -rf my-documents rm -rf my-mysqldumps
リポジトリ完成。pushする
git remote add origin my-remote-repo git push origin master
SVNリポジトリに更新が入った場合 SVNリポジトリが更新された場合は、filter-branch する前のリポジトリで git svn rebase し、 後は同じようにすれば変更をgitリポジトリに取り込める。
cd .. rm -rf myproject_work cd myproject git svn rebase cd .. cp -r myproject myproject_work cd myproject_work git filter-branch --subdirectory-filter source HEAD rm -rf my-documents rm -rf my-mysqldumps git remote add origin my-remote-repo git pull origin master git push origin master
現在の評価: 3.0 (1)
著者は、アプリケーション開発会社 Cyberneura を運営しています。
開発相談をお待ちしています。
開発相談をお待ちしています。