2013年10月18日金曜日

githubでEclipseプロジェクト(Android)の管理

gitの復習を兼ねてgithubの使い方もわかりました。さて次にコマンドラインではなくGUI、特にeclipseでgit(github)を操作する方法を調べてみます。どんなプロジェクトタイプでも同じでしょうが、特にAndroidプロジェクトのgitでのバージョン管理、複数PCでの開発環境構築について調べてみました。(eclipseにはEGitが入れてあります)

今回も結構手間取りました。ネットをググってみると似たような情報は結構あるんですが、いずれも複数のPCでの開発環境を構築するには足りないというか、部分的な解説しか見つからなかったんです。よくあるのが、
  • githubに既に存在しているリポジトリをeclipseで取得(しかもAndroidじゃない)
  • githubにeclipseからAndroidプロジェクトを登録する。但し他のPCでそれをどう使ったらいいかがない。
です。2つ組み合わせればよさそうな気がしますが、問題なのはeclipseのAndroidプロジェクトの場合、プロジェクト内のjava関係のライブラリ等をリポジトリに入れるわけにはいかないので、それを別のPCで開発環境の構築までどうやって持っていったらいいのかがわかりませんでした。
結局、かなり失敗してやり直しましたが(2,3回github上のリポジトリも壊してしまったw)なんとかできたようです。いかに手順を示します。

1.Mac上のeclipseでAndroidプロジェクトを作成し、githubに登録する
2.Windows上のeclipseにgithubからプロジェクトを取得、開発用のAndroidプロジェクトを構築する

大雑把にいって、この2つです。この後、実際に相互にファイルを編集してみて、相手に変更が反映されるのを確認しました。

1.Mac上のeclipseでAndroidプロジェクトを作成し、githubに登録する
まずMac上でAndroidプロジェクトを作成、一応動くことを確認しました。さてこれをgithubに登録するんですが、特にこれは問題なくできました。eclipseのExplorer上のプロジェクトを右クリック→Team→Share Project でダイアログが表示され、そこにリポジトリをどこに置くか聞いてきます。ここで、Mac(或いはwindows)のローカルにリポジトリが作られますが、デフォルトは$HOME/git/以下にどちらも作られました。(この時、プロジェクトは$HOME/workspaceから、$HOME/git/<リポジトリ名>に移動するのに注意。)次に、バージョン管理するファイルを選択、Addしてやります。(Androidのjarとかは当然入れません)そして「最初の」commitをしてやります。(Team→Shareでは、gitリポジトリの入れ物をローカルに作成しただけで、まだ何も入っていない状態です。)そしてPushを選択、githubのリポジトリ(事前にリポジトリの入れ物だけはgithubのHPで作っておきます)を入力して、github上にデータを送ります。ちょっと注意が必要なのが、最初のpushの時何をリポジトリに登録するかです。初めて作ったばかりならmasterのbranchしかないと思っていたら、HEADというのも表示されます。何でこれが表示されるのかわかりませんが、うっかり最初にHEADを選択してリポジトリに登録したら、プロジェクトの登録はできたのですがbranch名がHEADになってしまい、どうやってもmasterにできず結局github上でリポジトリを削除して作り直しました。
別のHPにも情報を後で見つけましたが、

  mastre[branch] (refs/heads/master) → refs/heads/master

が正解のようです。あと、議論が分かれるところですがeclipseのプロジェクトでは、".project", ".classpath"というような設定ファイルがあります。デフォルトではこれもリポジトリに登録する設定になっていますが、これはバージョン管理するな/しろ、の意見が半々でした。どちらがいいかはeclipseの環境にどんなplug-inを入れているかにもよるらしく、一律にコレというのはありませんでした。各自の開発環境で判断するしかありません。
(注:.project内にはプロジェクト名=フォルダ名が格納されています。そのため、gitに.projectがないと2項の方法でAndroidプロジェクトを作成するときプロジェクト名として起動時のクラス名が使われます。デフォルトでは新規プロジェクトを作成する時、プロジェクト名がそのまま起動時のクラス名になるので大抵の場合問題がでないんですが、わざとプロジェクト名と起動時のクラス名を変えている場合に問題がでます。)

追記:
gen/R.javaも管理を外しました。branchを変更したり、古いバージョンに戻す時にエラーがでます。プリコンパイル・ファイルなのでRun/Debug時に生成されますから、元のファイル(res/以下)さえ管理対象に入っていれば大丈夫でしう。

とりあえずこれで、このMacだけで開発を進めていく分にはバージョン管理ができるようになりました。

更に追記:
最初にリポジトリにpushしたPCでは、どうもうまくpullができません。色々やってみたのですが、eclipseのGUIでやるとconfigに以下のものが記録されないようです。(hogeは適当に変換してください)

branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.master.rebase=true

remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=https://github.com/hogehoge/hogehoge.git

Repository Explorerでプロジェクトを右クリックして、Propertiesを選ぶとwindowがでてくるので、そこに追加で指定してやります。
どういうわけかeclipseから最初にリポジトリに登録してやるとこの5項目が登録されてなくてpullがうまくいきません。(つまりpushしかできない)
登録したら一度削除して、githubから取り出してやったほうが、このあたりの設定をしてくれて楽かもしれません。

2.Windows上のeclipseにgithubからプロジェクトを取得、開発用のAndroidプロジェクトを構築する
さて次が一番悩んだところです。リポジトリに登録時、Androidプロジェクトだという情報は入っていません。何も考えずにeclipseでgithubからImportしてしまうと、単なるファイルの塊がeclipseのExplorer上にできるだけです。もちろんその状態でファイルの編集/更新を相手に伝えることはできるんですが、Windows上でAndroid実機での動作確認ができない状態です。(Androidプロジェクトになってないから当たり前です)さんざん悩みましたが、以下の手順でいいようです。(一発でやる方法もありますが、あえて一つずつやっていきます。

(1)eclipseのGit Repositoryにgithubからcloneを作る
eclipseで、Window → Show View からGit Repositoryを表示する。そこで右クリック、あるいはボタンで目的のAndroidプロジェクトのcloneを作成する。

OKすると、master branchを取得したとダイアログがでてきます。(今回はmasterしかないし、たいていはmasterを取得するでしょうが、場合によっては別のbranchを取得する場合もあるでしょう)
これで$HOME/git/以下にローカルなリポジトリが作成されます。


次に、eclipseのExplorer上で右クリックでImport(或いは、FileメニューでImport)します。Sourceは、Git/Projects from Gitを選択します。EGitが入っていると、Local、Urlの2つが選べます。Urlは先ほどのGit Repositoryにcloneを作成する手順に入っていきます。Localはすでに存在するgitリポジトリを指定します。今回は先に作成したcloneとなります。そして以下の画面が表示されます。
ここで3つの選択がありますが、真ん中の"Use the New Project wizard"を選択します。次に、"Android Project from Existing Code"を選択します。

これで既存のコードでAndroidプロジェクトを作成することをeclipseに伝えることになります。次のダイアログで、どこにそのコードがあるのか指定する画面になりますが、$HOME/git/以下に1.で登録したプロジェクトのフォルダが存在しているはずなのでそれを選択してやります。これでOKです。

注:
先に、".project"ファイルをバージョン管理に入れるかという問題がありましたが、どうもこれが入っていないとこの時点で指定したフォルダがeclipseのプロジェクトと認識されないようです。実はこのあたりどう解決すべきか正解が自分にもわかりません。個々の開発環境に応じて考えてください。

また、この手順でWindows上にプロジェクトを作成すると、ちょっと通常のプロジェクトとはファイルの位置が異なります。

・通常のeclipseプロジェクトのファイルの位置
       $HOME/workspace/<プロジェクト名>

・今回のgit管理下のプロジェクトのファイルの位置
       $HOME/git/<リポジトリ名>/<プロジェクト名>

eclipseのExplorer画面上は同じように見えるので、ちょっと注意が必要です。(eclipseで操作する上では何も差がありません)

さて結果としてWindows上の画面は以下の様になります。
Package Explorer, Git Repositoriesの両方に同じ名前のフォルダがありますが、実体は同じものです。

0 件のコメント:

コメントを投稿