Google が repo というツールをリリースしている。これは、Google が開発している Android プロジェクトのためのツールなのだけど、Android 専用のツールといふわけでもなさそうなので、少し調べてみた。
Repo って何だろ?
repo は、git を補完するツール。
repo の仕事は主に 2 つ。1 つは、「複数の git レポジトリー」を管理すること。もう 1 つは、git のレポジトリーを取って来たり、レビュー・サーバーに変更点を送ったりということ (特に複数レポレトリーをサポートしている点がミソ)。
何が嬉しいの?
普通、バージョン管理ソフトは、一つのリポジトリーで一つのプロジェクトを管理する。開発規模が小さなうちは、これでいい。問題は開発規模が大きくなった時。もっと言えば、複数のプロジェクトが出来るた時。
例えば、複数のアプリを別々のリポジトリーで管理している時とか、(git 管理の) オープン・ソース・プロジェクト (ex. ライブラリー) を使っている時なんかがそう。こんな時、Subversion だったら svn:externals を使う。svn:externals は、メインのリポジトリーに「外部 (external)」のリポジトリーを追加するけど、repo は違う。最初から「複数のリポジトリー」を管理できるよう設計されている。
Repo がどう動くのか、まずは Android で試してみませう
repo のインストール
まずは、repo をインストールする。
$ curl http://android.git.kernel.org/repo >~/bin/repo $ chmod a+x ~/bin/repo
Working Directory を使る。
作業用のディレクトリーを作る。名前は何でもいい。
$ mkdir working-directory-name $ cd working-directory-name
準備
最初に、repo init コマンドを実行する。
$ repo init -u git://android.git.kernel.org/platform/manifest.git
このコマンドがやることは 2 つ。
- repo コマンドの実体 (Python スクリプト) をダウンロードする
- Manifest ファイルを取得する。
実は、repo コマンド自身は sh script で、中で python script を走らせている。で、git を操作するための「本体」部分を、init コマンド実行時にダウンロードしている。
Manifest ファイルは、repo の設定ファイル。以下の内容が書いてある。
- どこの git リポジトリーから clone するか?
- どのブランチを取って来るか?
- 取って来たリポジトリーを、どういう風に配置するか?
Repo sync -- Git Clone in Repo
Manifest を取得したら、repo sync コマンドを実行する。
$ repo sync
このコマンドは、初めて実行する時は git clone と同じことをする。つまり、リモート・リポジトリーを取って来る。二度目以降は、git pull と同じことをする。
Repo start
初めて repo sync した直後は、ブランチが出来ていない。なので、repo start コマンドでブランチを作ってあげる。
$ repo start master --all
repo の説明では「トピック・ブランチ」という用語が使われている。これは、(開発とかコードネームとかの)「トピック」をベースにブランチ名を付けるという考え方。git の世界でも使われる。
repo start コマンドを使わずに、git-branch コマンドで各々のリポジトリーごとにブランチを作ってもかまわない。
あとがき
repo を使うと、複数の git レポジトリーを扱うことが出来るやうになる。複数のリポジトリーを管理していると、clone/pull/branch まわりで混乱してくるので、その部分を肩代りするために「repo」が作られたんだと思う。
ただ、ぼくも repo を見始めたばかりなので、分からないことも多い。例えば
repo sync で取得したローカル・リポジトリーを、更に git clone でコピーできない。最近試してみたら、何か普通に通った。ブランチを作ってあげる必要はあったけど。- repo でリモート・リポジトリーに push する方法が分からない。
ここら辺は、エントリーを書きながら勉強していこうと思う (誰か教えて!)。次回は、manifest ファイルの書き方!!
参考にさせてもらいました。
ReplyDeletehttp://trwtnb.blogspot.com/2010/04/windowsandroideclipse.html
ブログ拝見致しました。
ReplyDelete一つのページに情報が集約されていて、分かり易いですね。参考にして頂けて光栄です。
有難うございます。噂のAndy Rubinのtweetを理解できました。
ReplyDeleteああ、今、噂の Rubin 氏の Tweet ですね。
ReplyDeleterepo は最初何をやっているのか分からないコマンドなので、この記事が役に立って良かったです。