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

(Comments)

前提条件

  • 大きな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
Current rating: 3

Comments

Recent Tweets

  • ytyng

    ytyng @ytyng

    apple developer の、テスト用デバイスのUDIDを1年ごとにチェックして、古い端末を消しちゃうやつ チェックボックスを入れたのを残すのか、消すのかの判断まちがって、全部のUDID消えたわ
    1 year, 2 months ago

  • ytyng

    ytyng @ytyng

    うちの会社 TORICO の 代表が今TV出てます #漫画全巻ドットコム #激レアさんを連れてきた
    1 year, 2 months ago

  • ytyng

    ytyng @ytyng

    Proofpoint にブロックされているIPアドレスからでも icloud など Apple メールアドレスにメール送信されてもブロックされてない…?
    1 year, 3 months ago

Recent Posts

Archive

2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011

Categories

Authors

Feeds

RSS / Atom