Androidのプロジェクトって、アプリのプロジェクトとテストプロジェクトの2つの管理をしなきゃいけないじゃないですか。それって面倒ですよね。だからgitで2つのプロジェクトを含んだリポジトリを作って管理すりゃいいのかなと思って、そういうふうにして、BitBucketにリポジトリ作り終えたところで、一服していたら、眼鏡が大好きな人にこう言われたのです。
@patorash 別々のリポジトリにしておいて、repo syncで同期した方が良いよ。branch分けるときやたら大変になる
— Keiji Ariyamaさん (@keiji_ariyama) 3月 7, 2012
repoってあれですか?Androidのソースをダウンロードするときに使うやつでしょ?というくらいしか知識のない僕に対して、眼鏡大好きな人は優しく教えてくれました。
@patorash http://bit.ly/zB4pl6 こんな感じのxml書いておいて、repoからこれを読み込むと
— Keiji Ariyamaさん (@keiji_ariyama) 3月 7, 2012
@patorash repo を使えば、ここに書いてある全部のリポジトリをチェックアウト・同期して、それぞれ指定したディレクトリに展開してくれるんだよ
— Keiji Ariyamaさん (@keiji_ariyama) 3月 7, 2012
なるほど。便利そうだから、使ってみる事にしようと決意しました。
ありやまさんが教えてくれていますが、簡単にいうと、複数のリポジトリをrepoコマンドを使う事で一気に操る事が出来るという事ですね。Androidのプロジェクトのように複数のプロジェクトが絡んだり(プログラム、テスト、ライブラリのプロジェクトとか)する場合に、一気にpushしたり、一気にpullしたりするのに便利そうですね。ふむふむ。
参考にしたサイトは以下の通り。
Repo と Git の使い方 (Using Repo and Git)
- まずBitBucketにリポジトリを作る。AndroidアプリのプロジェクトのリポジトリとAndroidアプリのテスト用のプロジェクトのリポジトリの2つとかが多分普通ですね。作り方はBitBucketのサイトで勉強してください。ここでは、AndroidSampleプロジェクトとします。
- プロジェクトを作ってgitでコミットしてBitBucketのリポジトリにpushしといてください。
- Eclipseでrepo用のプロジェクトを作ります。これは別になんでもない、ただのプロジェクトを作ります。RepoHogeHogeというプロジェクトにしたとします。
- RepoHogeHogeプロジェクトにdefault.xmlというXMLファイルを作ります。XMLファイルに以下の記述をします。remoteタグのfetchのssh://git@bitbucket.orgは、githubを使ってるんなら、それ用に置き換えて。patorashは自分のBitBucketのユーザ名とかに置き換えて。
<?xml version="1.0" encoding="UTF-8"?> <manifest> <remote name="origin" fetch="ssh://git@bitbucket.org/" /> <default revision="master" remote="origin" /> <project path="AndroidSample" name="patorash/androidsample.git" remote="origin" /> <project path="AndroidSampleTest" name="patorash/androidsampletest.git" remote="origin" /> </manifest>
- RepoHogeHogeプロジェクト用のリポジトリをBitBucketに作ってpushします。
- 準備は完了。
- ターミナルで、チェックアウトするディレクトリで以下を実行。ちゃんとユーザ名はリポジトリ名を置き換えること。
repo init -u git@bitbucket.org:patorash/repohogehoge.git
- ターミナルで、以下を実行。
repo sync
- これで、AndroidSampleプロジェクトとAndroidSampleTestプロジェクトがチェックアウトされます。
- ただ、RepoHogeHogeをBitBucketにpushして直ぐにrepo syncを実行したらうまくいかないときがありました。
それで凄い悩みました。BitBucketの調子が悪いときも結構あるのかもしれません。失敗する場合は、.repoディレクトリを削除して、再度repo initのやつをやってみてください。何度かやっていたら成功しました。
以上です。実際に使うのはこれからなので、またわかったら書いていきたいと思います。