2009-04-02
■ [biwascheme][git] git submodule(SVNの外部参照みたいなやつ)を使ってみた
動機
biwaschemeを使ったアプリケーション(以下tickets) を書いているのだが、利用者にとってみると、ticketsとbiwaschemeという 2つのリポジトリをcloneしないといけないので面倒。
さらに、ticketsで必要になった機能をbiwaschemeに随時追加したりしているので(例:R6RS hashtable)、 2つのリポジトリを同時にcloneしないと依存関係が合わなくて動かない。これは面倒。
解決法
ticketsのリポジトリにおいて、biwaschemeをサブモジュールとして登録する。
submoduleはサブディレクトリで普通にgit cloneするのと近い感じだけど、ticketsの各コミットと、「その時使っていた biwaschemeのバージョン」が対応付けられるので、上のような依存問題が発生しない。
手順
まずticketsの側で
git submodule add git://github.com/yhara/biwascheme.git
とした。これで、biwascheme/ 以下にリポジトリbiwaschemeのファイルがcloneされる。git ci でこの変更をコミットする。
あとは、tickets/biwascheme/以下でgit pullすることで、サブモジュールを最新版に更新できる。 が、これはtickets内の変更とも見なされるので、tickets側で「biwaschemeを最新のものにした」ということをコミットしなければならないようだ。
制限
- tickets/biwascheme/ 以下で作業を行ったときは、tickets側でpushする前にtickets/biwascheme/以下をコミットしてpushしておかなければならない…らしい。
- 利用者がticketsをcloneする場合、サブモジュールは自動では取ってこないので、git submodule init; git submodule updateが必要。
add と submodule は逆でしょうか?<br>msysgitで試したところ、最後に持ってくる名前?を入れる必要がありました<br>git submodule add git://github.com/yhara/biwascheme.git biwascheme
git submodule addが正しいです。直しておきました。