AndroidStudioとGitHubを使ったチーム開発でのバージョン管理

Githubの導入についてはこちらを参照
[（初めての）AndroidStudioからGitHubにプロジェクト作成](https://qiita.com/HamaTaka/private/ab358d914780d8ed0c95)

この記事ではチーム開発でのリポジトリの共有、クローン、コミット、プル、プッシュの仕方について解説します。

まず、Githubでプロジェクトを管理するときはリポジトリ（プロジェクトの入れ物）にこんな風に入っています。
![git_repository_figure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/3d596366-bd4b-e3e9-e694-8669dc04e7c2.png)
出典：[TeckAcademy 今さら聞けない！GitHubの使い方【超初心者向け】](https://techacademy.jp/magazine/6235)


Githubに新規のリポジトリを作成した後、
・各端末にレポジトリを複製する（クローン）
・各自のソースコードの変更をローカルレポジトリに反映させる（コミット）
・メンバーのソースコードの変更を自分のローカルレポジトリに反映させる（プル）
・自分のソースコードの変更をリモートレポジトリに反映させる（プッシュ）
という作業を行うので、それぞれ解説していきます。

####リポジトリへの招待
チーム開発を始めるには、大本の制作者がリポジトリを作成後、クローン等を行う権限をチームメンバーに渡さなければいけません。公式ヘルプページにスクショ付きの超わかりやすい解説が載っています。
[GitHub ヘルプ - コラボレーターを個人リポジトリに招待する](https://help.github.com/ja/github/setting-up-and-managing-your-github-user-account/inviting-collaborators-to-a-personal-repository)

招待を受けると、Githubのトップページ左側に該当のレポジトリが表示されるので確認してください。
<img width="227" alt="https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_562254_b5aae0d0-b792-06c0-db01-977d21f49473.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/e6975883-1182-7873-0952-43c169203786.png">

####クローン
リポジトリに招待された側はそれぞれの端末にローカルリポジトリを作成し、Github上のリモートリポジトリから、データをまるっと持ってくる必要があります。
これをクローンといい、最初の一回だけ必要な作業です。~~（この記事の後で触れるプルが上手くいかないと何回もやるハメになります）~~

Githubのリポジトリを開くと右中央にClone or DownloadというボタンがあるのでクリックしてHTTPアドレスをコピーします。
※git@~~から始まるアドレスが表示される場合は枠の右上にUse HTTPSと表示されているので、そこをクリックすると直ります。
<img width="634" alt="https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_562254_4ff5a54c-052f-b597-cd6b-786569f3e552.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/ad778e92-5813-4aa5-9a2a-fe569f557b84.png">

ここからは全てAndroidStudioの方で操作していきます。
新規で適当にプロジェクトを作成してください。

メニューバーから次のように選択し、
<img width="264" alt="sc01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/e7dc338c-8ba2-ccbf-74cf-44d89e0c0bff.png">

URL:の欄に先ほどコピーしたアドレスを貼り付けます。
<img width="398" alt="https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_562254_dcea75dc-f67a-4b5e-678d-71dcd50b2ef4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/f98c35a8-c0c5-a0d9-2003-32df734d3eb0.png">

『The directry already exists and it is not empty』というエラーメッセージが出る時は既に作成済みのディレクトリ名が指定されてるので新規で指定します。

『Check out from version control』というウィンドウが出てくるのでYes
（持ってきたプロジェクトを開きます）

『Sync android SDKs』というウィンドウが出てくるのでOK
（リモートリポジトリのプロジェクトとローカルリポジトリのプロジェクトのパスが一致しないのでAndroidStudioの方で勝手に合わせてくれます）

これで最初にやることはおしまいです。プロジェクトを更新しながら行う手順に入っていきましょう。

####コミット
ソースコードの変更を自分のPC上のローカルリポジトリに反映させます。この時点ではリモートリポジトリのソースコードは変更されません。また、コミットした後でないとプル、プッシュができません。

メニューバー - VCS - commit を選択
commit message が空白だとエラーが出るので自分がソースコードに変更を加えた内容を明記します。
<img width="567" alt="https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_562254_aa35d08e-10c8-fbca-6e8a-2433746d1a27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/1065a234-32a8-7ea2-4303-7c2e57666562.png">

そしてcommit。出てくるウィンドウでもcommit

左下の方に緑色の枠でcommit messageが表示されたら成功です。
<img width="355" alt="sc22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/b77ab2ac-7619-e7db-d0fa-071e6a8c271e.png">



####プル
他のメンバーが変更したリモートリポジトリのソースコードを、自分のローカルリポジトリに持ってきます。この作業は自分のローカルリポジトリのコミットとチームのコミットと、どちらを優先させるか設定することが可能です。

メニューバー VCS - Git - pull を選択
出てくるウィンドウでもpullを選択
右下に↓のようなエラーが出たらコミットを忘れているのでコミットしてください。
<img width="276" alt="sc23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/07514b24-5db0-e720-51e8-4f5f2cab7bd0.png">

リモートリポジトリとローカルリポジトリのどちらを優先するか聞かれます。
ファイルごとチームを優先させるならAccept Theirs
ファイルごと自分を優先させるならAccept Yours
コードをいい感じに混ぜるならMerge
<img width="419" alt="https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_562254_db9fb23f-74f0-db0d-1a4e-c4bddd9aece3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/f5eeb4ba-da6c-1f70-29d8-f0a6b697bc9e.png">

この時、自分がコミットした状態とpullで持ってきた状態を、どちらもブランチとして持っています。
そして今は自分のコミットを記憶しているブランチに存在しているので、これからpullしてきた方に移動します。

画面下の方でVersion Controlタブ - Logタブ　を開きます。
<img width="392" alt="sc16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/ba655804-2bcc-89c2-53e6-b2d6725e5a01.png">
オレンジの玉が付いているブランチがリモートリポジトリにに存在している最新版なので、今回は『画像変更』のコミットに移動します。
該当のコミットを右クリックReset Current Branch to Hereを選択します。
<img width="198" alt="sc17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/ca02a5df-aea9-422a-073d-ff5cf6ade725.png">

このようなウィンドウが表示されるのでMixedを選択してReset
<img width="316" alt="tes.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/e3d36ff7-92d5-c8a1-24ca-6bb8ffc80622.png">

同じ箇所を修正してるなんて残念なことがなければ、AndroidStudioが自動的にそれぞれのコミットを反映してくれます。

左下にReset　Successfulと表示されたらOKです。
**が、ここで完了ではないので注意です！**


pullの時にパスなども反映してしまってbuildがおかしくなってしまうので、一度AndroidStudioをリスタートします。
メニューバー　file - Invalidate Caches / Restart - Just Restart　を選択すると正常にビルドされます。

参考記事：[[Android Studio] エラー吐き地獄に陥った時に試してほしい事](https://qiita.com/meru_h/items/5c547df99d44afa85f77)

これでプルは完了です。


####プッシュ
自分のローカルリポジトリが反映済みのソースコードをリモートリポジトリに反映させます。

コミットをする時のcommit changesウィンドウでcommitのボタンのオプションを開きcommit and pushするか、もしくは
メニューバー VCS - Git - push　を選択したください
出てきたウィンドウでpushを選択します。

右下にpush successfulと表示されたら完了です。
<img width="271" alt="sc24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562254/3f06f4a7-be9e-531f-3ae1-1f6f1b298991.png">