gitとsvnでのプラグインの公開方法
gitが素晴らしーと思ったのはプラグイン作ってるときです。
いつもプラグインを作る時はプラグインをテストするためのプロジェクトを作るわけですが、Subversionだとリポジトリ上で、アプリとプラグインを分けるためにはローカルなディレクトリも分けなければなりませんので、開発の流れとしては、
- Railsのプロジェクトを作る
- ruby script/generate plugin xxx
- プロジェクトをコミット
- .svnを除いてプラグインをコピー
- プラグインをコミット
- コードを変更
- 3に戻る
面倒くさい。で、gitだと、プロジェクトのリポジトリ内にプラグインのリポジトリがあってもOKなので、
と一個手順が減ります。この「.svnを除いてプラグインをコピー」という一個が大きいです。プロジェクトが増えたりプラグインが増えると自分で作っていて訳分かんなくなりますし、.svnを除いてコピーっていうスクリプトでも書けばいいのかもしれませんが、できることならやりたくない手順です。
で、僕的なgitとsvnの位置づけはこんな感じ。
ローカルgit | 公開するかどうか分からないもの |
github | いけるかどうか分からないけどひとまず公開したいもの |
subversion | ちょっといい感じなので皆に使ってもらいたいもの |
subversionは普及しているので、色んな人に使ってもらいやすいっす。
できることならローカルgit--->github--->subversionという順番で公開していきたいんですが、git svn initはhttp://www.kernel.org/pub/software/scm/git/docs/git-svn.html によると、空のディレクトリを初期化するだけなんで、既に作られているローカルなgitリポジトリにsvnのリポジトリと関連付けることはできません。なので以下のような手順を踏む必要があります。
ローカルからgithub
subversionにも公開
- 対象となるディレクトリの上にcd
- 対象となるローカルリポジトリを削除(あるいはバックアップ取っておく)
- Subversionのリポジトリにディレクトリを作成
- git svn clone http://xxxx.googlecode.com/svn/xxxx (-sとか付けておくと便利かも)
- cd xxxx
- git remote add origin git@github.com:akm/xxxx.git
- git pull origin master
- (ここでなぜかコンフリクトが起きたら修正)
- git rebase --continue
- git svn rebase
- (またここでなぜかコンフリクトが起きたら修正)
- git rebase --continue
- git svn dcommit
追記
でもなー、githubからgooglecodeとかに公開した方がいいのかなー。よく分かんないなー。みんなどうしてるんだろう?