巨大なSVNリポジトリの一部をGitリポジトリにする

(コメント)

前提条件

  • 大きなSVNリポジトリがあり、その中のディレクトリの1つのディレクトリがソースコードのディレクトリ。他はドキュメントやmysqldumpなんかが入っている
  • ソースコードのディレクトリのみ svn checkout して更新するという運用をしていた
  • git化したい
  • ただし、ソースコード以外のディレクトリはサイズが大きいので、リポジトリに含めたくない

試したこと

→ドキュメントやmysqldumpなんかが含まれた巨大な 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
現在未評価

コメント

最近のツイート

  • ytyng

    ytyng @ytyng

    俺もスタバアプリにログインできないよ
    4 ヶ月, 1 週間 前

  • 安藤拓郎 Takuro Ando

    安藤拓郎 Takuro Ando @takuroando

    ytyng

    これまでいろんなグッズを作ってきたけど、今回は「お米」と聞いて買うしかないなと。今夜の夕食はコシヒカリ!箸もセットだし^^ https://t.co/01ucQx9qtw #腰乃展 #マンガ展 https://t.co/4VL2vOe0Og
    4 ヶ月, 3 週間 前

  • ytyng

    ytyng @ytyng

    講談社さんとやった全部入り電子書籍セットがギネスブックに登録されたよー https://t.co/rbkd3IYub0
    4 ヶ月, 3 週間 前