ゆるふわGitHub解説 with SourceTree

あくまで個人的解釈です。未来の自分が分かりやすいように画像多めになっております。

決定的に間違っているところがありましたらコメントにてお教えいただけると嬉しいです。

# 最初の流れ

最初の最初の設定（登録やSourceTreeの初期設定）には触れません

- [GitHub](https://github.com/)からリポジトリを作成する。
- トップページ右上の "New repository" をクリック。

![f1zz3bIPzIJxlKc1475586593_1475586750.png](https://qiita-image-store.s3.amazonaws.com/0/130191/5b3ffd5a-a151-fc91-5611-ff7dfc133381.png)

- リポジトリの名前を入力し、 "Create repository"

![C2TH33MEdVx91xU1475587124_1475587157.png](https://qiita-image-store.s3.amazonaws.com/0/130191/085d0120-75f9-a0d6-cfe4-bd51f287cb91.png)

- 遷移後のページ（トップページの右上のレポジトリ一覧からも行ける）のURLをコピー

![FYPfjG4E1ztpMwm1475587367_1475587439.png](https://qiita-image-store.s3.amazonaws.com/0/130191/c0479eb6-7dab-99dd-0c60-5e99f8652a68.png)

- SourceTreeを起動し、左上の "新規/クローンを作成する" からURLを入力する。（画像はWindows版。SoueceTreeの導入はggってね）

![NiYETqIIM9LqQ161475587672_1475587723.png](https://qiita-image-store.s3.amazonaws.com/0/130191/03a9ce31-9251-124e-38d3-ff863ea29aec.png)

- ここからは2通りに分かれる。

## 既に中身のあるリポジトリの場合
- リポジトリのクローンを行う。
- 元のパス・保存先のパスを指定して "クローン"

![clone.png](https://qiita-image-store.s3.amazonaws.com/0/130191/65ffc859-dca4-73b9-6ba4-bebb6f35fda9.png)


## 未だ中身のないリポジトリの場合
- リポジトリの作成を行う。
- 保存先のパスを指定して "作成"
 
![create.png](https://qiita-image-store.s3.amazonaws.com/0/130191/d9efd6c2-c897-d089-893f-6e669adf0f2e.png)

- 右上の設定からリモートの設定をする。

![NiYETqIIM9LqQ161475587672_1475587723.png](https://qiita-image-store.s3.amazonaws.com/0/130191/5fca3473-3f2c-1f41-69f3-fe7cb765765f.png)

- リポジトリ設定を開いたらリモートタブの追加をクリック

![setting.png](https://qiita-image-store.s3.amazonaws.com/0/130191/0478280f-035c-1329-634e-a31bb3d0cd6a.png)

- リモート名（SourceTree上で表示される名前なので何でもいい。クローンするとoriginalになる）・パスを指定したら "OK"

![remote.png](https://qiita-image-store.s3.amazonaws.com/0/130191/33d4ef2c-eb39-3448-c704-833ddb347332.png)


- 正直中身がない状態でクローンしても問題なく出来る（はず）

# 基本的な使い方
コミット → プッシュ
## コミット
ネット上にあげるデータをまとめる。荷造りのイメージ

![commit.png](https://qiita-image-store.s3.amazonaws.com/0/130191/e127cd7f-2b4e-07ea-8a5f-b8c86f70a1bb.png)

- 作業ツリーのファイルの横のチェックボックスにチェックを入れ、ネット上にあげたいファイルをIndexにステージしたファイルの下に来るようにする。
- コミットメッセージを入力する。なんでもいいが、更新内容が分かるものだと尚良。
- "コミット"

![comm.png](https://qiita-image-store.s3.amazonaws.com/0/130191/7c56a110-d7e9-de1f-81ab-15414ccae23c.png)

### コミットの取り消し
あ、このコミット絶対いらない取り消したいって時、取り消したいコミットを右クリックして "このコミットを打ち消し..." ダメダメ、イケてない。それをするとこのコミットを打ち消す内容のコミットがされる。（例えば、aという名前のファイルを追加する内容のコミットならaを削除するコミット）
取り消したいコミットの一つ下のコミットを右クリックして "現在のブランチをこのコミットまでリセット" がスマート

![delete.png](https://qiita-image-store.s3.amazonaws.com/0/130191/b8d4dcb1-987c-059b-40be-28887d5f8dca.png)


## プッシュ
ネット上にあげる。荷物を配達するイメージ

![push.png](https://qiita-image-store.s3.amazonaws.com/0/130191/dcf3aba8-c9fc-eed9-795a-2a9a1dfeb968.png)

- コミットした後、プッシュしたいブランチを選択して "OK" （ブランチについては下で）

![pu.png](https://qiita-image-store.s3.amazonaws.com/0/130191/9065f18a-6866-a395-3eeb-f1701d266597.png)



# 仕組み
そもそもGitHubってなんなんじゃ？
→ PC上だけでプロジェクト管理しているとデータ飛んじゃったり怖いからバックアップとっておくやつ。チーム制作するときに便利になるやつ。

SourceTreeってなんぞや？
→ GitHubを簡単に使えるようにしたやつ。

プッシュでPC内（ローカル）のデータをネット上のGitHub（リモート）に送っている。
プルでGitHub上のデータをPC内に持ってくる（プッシュの逆）
常にリモートとローカルにデータがあることに注意！
コミットしただけではデータのやり取りはないよ。
ほとんどの操作がローカルとリモートの情報を同期するイメージ

# チーム開発
- チームの一人がリポジトリを作成する。
- GitHub上のSettingsから他のメンバーをCollaboratorsとして招待する。

![set.png](https://qiita-image-store.s3.amazonaws.com/0/130191/6f393d2e-86e0-9df3-caaa-f0485b1dadbf.png)

- 招待したいメンバーのIDを入力し、 "Add collaborator"

![colla.png](https://qiita-image-store.s3.amazonaws.com/0/130191/0ae19013-9998-f53c-a441-9bfb7b837ce3.png)

- 招待されたメンバーはGitHubに登録しているメールアドレスに招待メールが届く。メールのリンクを踏まないと正式に参加したことにならないので注意。
- メンバーのうち一人（メインとなる人）がリポジトリの作成を行い、残りのメンバーはリポジトリのクローンを行う。
- メンバーごとにブランチを作り、各々自分のブランチに進捗をプッシュしていく。（チーム開発に限らず、個人開発の際も機能ごとにブランチを変えるとスマート）

![bra.png](https://qiita-image-store.s3.amazonaws.com/0/130191/6409d569-a30c-801c-bb90-c5374f9c6c39.png)

- 上のツールからブランチを選び、ブランチ名を入力して "ブランチを作成"

![branch.png](https://qiita-image-store.s3.amazonaws.com/0/130191/024f1f85-a5ef-4978-275e-a35926d7ca06.png)

- ある程度プッシュがたまったタイミングでマージ（別のブランチにプッシュされているデータを合体させるイメージ）を行う。

![mar.png](https://qiita-image-store.s3.amazonaws.com/0/130191/e71e972e-0636-b39e-9d55-8d284630b134.png)

- masterブランチをクリックしてmasterブランチに移動して、masterブランチが太字になるようにする。
- masterブランチに他のブランチをくっつけていきたいのでマージはmasterブランチから行う。

![current.png](https://qiita-image-store.s3.amazonaws.com/0/130191/dce9bfcd-9944-0264-f893-332c3a2d03e6.png)

- マージしたいブランチが青くなるように選択し、 "OK" を押して競合しないように祈る。

![marge.png](https://qiita-image-store.s3.amazonaws.com/0/130191/0ec464fd-558d-e28b-d96b-18fa8529bc5e.png)

- 競合してしまったら競合したファイルにマーク（黄色い三角形にびっくりマーク）がつくので、そのファイルを右クリックし、どちらのデータに合わせるかを選択して競合を解決する。

![kyou.png](https://qiita-image-store.s3.amazonaws.com/0/130191/013639d2-86da-3e3e-7273-49d14abfee1c.png)


![kyougou.png](https://qiita-image-store.s3.amazonaws.com/0/130191/8e3ec891-3710-362a-1b6b-f7288d0cfcbf.png)

- 全ての競合を解決したらコミットしてプッシュする。競合しなかったらコミットとプッシュの必要はない。

- マージされたら全員（マージした人はしなくても良い）がフェッチ（ローカルの情報を最新に更新するイメージ）して、一番新しいコミットをプルして開発を再開する。

別の人で同じスクリプトをいじらないようにする。
Unityならば同じシーンのオブジェクトを動かすのもグレー
基本個々のフォルダを作ってその中で作業すると安心