Gitを使おうよ！ - Remote編 -（GitKrakenを入れてGUIでGitを操作するハンズオン）

# はじめに
[Gitを使おうよ！ - Local編 -（GitKrakenを入れてGUIでGitを操作するハンズオン）](https://qiita.com/okmt_okmt_/items/b1f51e88b2dd8d840c65)の後編的なものです。
GitHubなどにリポジトリをpushしたり、cloneしてきたりします。

# GitHubを使ってみよう！
[GitHub](https://github.co.jp/)はGitリポジトリを共有するサービスのひとつです。

自分のソースコードを公開して、いろいろな人に見てもらったり、使ってもらったりもできるし、その逆に色んな人のコードを見たり、使ったりすることができます。

2018年にはMicrosoftに買収されることが決まって、そのおかげか有料だった非公開リポジトリが無料で利用できるようにもなりました！

実際にGitHubのアカウントを作成して、自分のリポジトリをGitHubにPushしてみましょう！

# GitHubのアカウント作成
促されるままにGitHubのアカウントを取得しましょう！
残念ながらOAuthに対応してないのでユーザー名とか、メアドとかを入力する必要があります。

プランはまぁ、Freeでいいでしょう。
Proにすると大人数で非公開のリポジトリを使ったり、膨大なデータをGitHubへアップロードすることができたりします。
学生なら、申請したりするとPro相当のが無料で利用できるとかできないとか...

最後にちょっとしたアンケートがあります。
スキップもできるので、なんかいいかんじにしておきましょう。

最後に「登録されたメアドあてに確認メール送ったったわ。確認してくれや」みたいになるので確認してあげましょう。

これで今日からあなたもエンジニアだ！！！！

# GitKrakenとGitHubを連携させる
GitKrakenはGitHubと連携させることができる。
GitKurakenのみでリポジトリをGitHub上に作成したり、GitHubにあるリポジトリを作成したりすることができる！便利！

GitKrakenの「Preferenecs」を開いて、「Authentication」をクリックしましょう。

「Connect to GitHub」のボタンをクリックするとブラウザが立ち上がって、GitKrakenのサイトが認証を開始してくれます。
GitHubへログインし、連携を許可してあげればおっけいです。

最終的にこんな感じになればできてます。

![Screenshot from 2019-03-27 12-11-21.png](https://qiita-image-store.s3.amazonaws.com/0/273517/aee257d2-2de2-eeb4-8ada-645b32a3c88e.png)

# Remoteにリポジトリを作ってみる
Gitでは自分のPC側のことを**Local**、GitHubなどのホスティングサービス側のことを**Remote**と呼んでいます。
自分のLocalのリポジトリをRemoteにアップロードするためにまずはRemoteの準備を整えましょう。

GitKrakenのInitからGitHubのリポジトリを作成しましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/c20aba07-4117-2d37-7e52-ab823476ccf5.png)

Nameにリポジトリの名前、Descriptionはそのリポジトリの説明です。
Accessはみんなに僕のソースコードを見てもらおうと思うのでPublicにしました。
誰にも見せるつもりがなかったり、今はいいや...ってときはPrivateにしておくのが良いでしょう。

<font color="Red">
2019/10/11 追記
※ GitKrakenの料金が変更され、**Private Repositoryが無料版では開けなくなりました。**
とりあえず今回はPublicで作りましょう。
</font>

このリポジトリには、[前回](https://qiita.com/okmt_okmt_/items/b1f51e88b2dd8d840c65)作ったリポジトリをそのまま使おうと思ったので「Clone after init」のチェックは外しました。

最初からGitHubへ共有するつもりでリポジトリを作成するのなら、「Clone after init」のチェックを入れてローカルでの保存場所やlicenseを設定しておきましょう。

必要事項の入力が済んだら「Create Repository」！！

# Remoteを追加してみる
「Remote」の欄にカーソルを当てて、「Add Remote」しましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/9137b28c-4385-cb8e-a2e2-6865d82a7b79.png)

次に開くダイアログからGitHubリポジトリが参照できそうな雰囲気があるのですが、なんかいつも表示されないので、手動で設定してあげましょう。
ブラウザでGitHubを開いて、自分のアカウントのアイコンをクリックして「Your Repositories」のページを開きましょう。

で、先程作成したリモートのリポジトリがあるはずなのでそれを開いて、でかく表示されてるアドレスをコピーします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/7619b989-020e-3106-9482-b5b9c17ecb43.png)

コピーしてきたものをGitKrakenのPull URLのところへペーストします。
Pull URLにペーストすると、うすくPush URLのところにも同じ物が入ります。GitHubの場合はPullもPushも同じアドレスなのでこれで大丈夫です。

Push（アップロード）とPull（ダウンロード）でURLが分かれてる場合があるので、その時用です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/024761e1-fed6-9feb-a036-83ba5bdd8c9a.png)

ここのNameは「なんのRemoteなのか」を表すものなのでなんでも大丈夫です。わかりやすい名前を付けましょう。

<font color="Red">
2020/9/27 追記
分かりやすいが吉だとは思っていますが、デフォルトとして使うRemoteの名前は`origin`が普通なので、特別な理由がなければ`origin`が無難そうです。
RemoteのNameが大きくかかわる部分はないですが、知識のひとつとして...
</font>

「Add Remote」して終了！
RemoteにGitHubが加わりました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/41f86894-1898-827e-2f37-63f8ffb045ec.png)

# Pushしてみる
**Push**とは、ローカルで増やしたリポジトリの変更をリモートへ反映する操作です。
先程追加したRemoteへプッシュしてみましょう。

上の方にある「Push」をクリックして、Submitです。

![image.gif](https://media.giphy.com/media/MVgnicJVGyC42edFvA/giphy.gif)

これでローカルの状態がリモートに反映されました！

# Pullしてみる
**Pull**はリモートの状態をローカルへ反映する操作のこと。

他の人が作ったブランチが役目を終え、`develop`や`master`へマージされていたりすると`develop`ブランチが変更されますよね。
そういった場合にローカルへ`develop`をプルしてきて、自分のブランチへマージしたりする必要が出てくるんです。

その辺のお話はあとでするとして、GitHubからファイルをひとつ追加してきました。
ファイルの追加/編集程度であればGitHubからも直接操作ができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/9a4da35f-9291-6b43-09d5-e47ea8062d13.png)

変なアイコンになっている方がリモート、パソコンのアイコンのほうがローカルのリポジトリの最新のコミットです。
リモートのほうに新しいコミットがあるのでひとつ伸びてますね。

じゃあ、さっきプッシュしたみたいに、その隣のPullをクリックしてみましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/67d08a12-0061-aaca-6d71-f71e02130efe.png)

うん。ひとつにまとまりましたね。
同じブランチを複数のPCとかで操作するとプルするときにも衝突が発生することがあります。
その時は前回の記事のマージのときと同じように衝突を解決する必要があります。

# Pull Requestしてみる
「`addJavaHelloWorld`ブランチの作業は完璧だ！！`develop`にマージしてほしい！！」
それをリポジトリの管理者に直訴する手段が**Pull request**です！

マージさせてほしいブランチで何を作ったのかを説明して、あなたの書いたコードをレビューしてもらいます。
コードのレビューをしてもらうことで、プロジェクト内でコーディングのルールを厳守させたり、いい加減な実装をあぶり出して不具合の早期発見や防止ができます。

プルリクエストを作らないで勝手にマージしてしまうとせっかく定めたプロジェクト内のルールが破綻したり、他の人のコードとモロかぶりしてしまったりするので...

コードレビューは大変な作業だけど、大事な作業です...
プロジェクトのルールにもよるのですが、基本的に作るべきだと思います。

プルリクエストはローカルで作っても仕方ないので、ブラウザを開いてGitHub上で作成します。
GitHubのリポジトリのページで、ブランチを自分のものに切り替えて、「New pull request」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/6f4171b6-7809-20cb-b5a3-e9b2dd455eb9.png)

そして、このブランチで何を作ったのか説明をします。
この辺はプロジェクトごとに何を書くのか決めておくのがいいと思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/66869986-9e85-0e15-6937-24cfddb201bf.png)

いろいろ書いて「Create pull request」しましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/15d5c03f-8a78-7ecd-edd9-60e778941fe4.png)

こんな感じになるので、イケてるエンジニアに自分のコードを見てもらいます。
ぼくはひとりなので、このまま下の方にある「Merge pull request」をします。

すると、マージするときのコミットメッセージを入力できるので、いじるなり、デフォの値をそのまま使うなりして、マージします。
んで、GitKrakenで確認してみましょう！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/9e755335-7df9-7157-cbbe-01f564f6a282.png)

プルリクエストが受理されました！やった！
`master`にチェックアウトして、プルして、また新たなブランチを`master`から作って、新しい機能の実装に励みましょう！！

# cloneしてみる
GitHubに存在しているリポジトリをローカルにコピーするのが**Clone**。
このエントリでこねくり回してきたリポジトリをクローンしてみよう！！

GitHubからURLをコピります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/fb361c3c-aa21-6aaf-edc4-e4920f7279ce.png)

例としてこちらどうぞ。ぶっ壊してもまぁ大丈夫です。
「https://github.com/okmtmk/git_test.git」

で、GitKrakenでファイルのアイコンのところをクリックして、「Clone」のところを開きます。
<img width="1017" alt="スクリーンショット 2019-03-27 15.38.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/273517/080146f5-2ffa-20a5-75a9-d107a5ee0fef.png">
URLのところにさっきコピーしたURLをペースト、パスは好きなように設定して「Clone the repo!」しましょう！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/273517/91d102b8-c224-2922-4504-9e96e58753c5.png)

クローンできました！
いろいろなオープンソースのリポジトリをクローンしてコードを呼んだり、自分のプロジェクトに使ったりしてみましょう！！

GitHubのプロジェクトに限りませんが、他人のものを使うときは**オープンソースライセンス**への配慮をお忘れなく。
中には自分のプロジェクトを公開する必要があるものもあります。
ライセンスの種類を調べたり、読んだりして必要な要件を満たすようにしましょう。


# さいごに
これさえ知っておけばとりあえずなんとか使える...かな...

初心者だからこそGitとうまく付き合っていくのが効率よくプログラミングに対して理解を深める上で大切なのではないかなと思います。
いろいろ書いて、動かなくなって、原因がわからなくなる...とかよくある話なので...
そんなときにGitで管理していれば動かなくなる前の状態に戻したりすることができるし。

Gitは現場では必須といえるスキルのひとつだと思います。
複数人で作業するとなるとこれなしでは...と思うことが多いです。

僕もわからない機能とか、知らない機能がたくさんあるので大きな事は言えませんが...

効率的なツールを使って快適なプログラミング・ライフを楽しみましょう！！