自分のためのGitHubあれこれ

# はじめに
GitやGitHubについて説明したWebページはネット上に無限にありますね。ですが、どのサイトを見ても詰まってしまうという方はいることでしょう。私もそうでした。
最近ようやくそれなりにGitやGitHubを使えるようになったので、流れを忘れないように残しておくことにしました。  
今回は以下の目的を達成し、とりあえず使えるようになることを目指しましょう。
1. GitとGitHubの違い
2. GitHubのアカウント作成
3. ssh鍵の登録
4. Gitの設定
5. 自分のPCからGitHubにコードをあげる
6. GitHubから自分のPCにコードをもらう

ここまでです。マージとかフェッチとか聞いたことはあるかもしれんみたいなやつは、次回があれば書きたいと思います。  

# GitとGitHubの違い
まずはGitとGitHubの違いについて知りましょう。探せばどこにでも詳しくまとまってると思うので、ここでは簡単にそれぞれの役割を。  
- **Git**はソースコードのバージョン管理
- **GitHub**はインターネット上でのソースコードの共有

すごく簡単に言うとこんな感じです。基本用語についても軽く解説します。
- リポジトリ：ファイルが入っているディレクトリのようなもの
- ローカルリポジトリ：自分のPC上にある、Gitで管理しているリポジトリ
- リモートリポジトリ：GitHub上にあるリポジトリ
- コミット：変更した内容のセーブ
- プッシュ：セーブ内容をリモートリポジトリに送ること
- クローン：リモートリポジトリをローカルにコピーすること


# GitHubのアカウント作成 
それでは始めていきましょう。まず[こちら](https://github.com/)のGitHubの公式サイトに従ってアカウントを作成してください。

以上です。簡単ですね。
無料アカウントではファイルが全て公開になりますが、有料アカウントであればprivateファイルとすることができます。また学生であれば、申請すればprivateファイルを作成することができます。


# ssh鍵の登録
ssh鍵の作成と登録をします。GitHubではssh鍵を登録することで本人認証を行います。
おそらくこの辺りで何が何だかわからないよとなってしまう人が多いのではないでしょうか？
わかりますわかります。ssh鍵については全然書いていないページなども多くありますからね。ここは丁寧に見ていきましょう。  
  
まずssh鍵を登録するディレクトリ(.ssh)に移動します。

```
$ cd ~/.ssh
```
もし無ければ作成した上で移動します。

```
$ mkdir ~/.ssh
$ cd ~/.ssh
```
ssh認証を行うための公開鍵と秘密鍵のペアを作ります。

```
$ ssh-keygen
```
すると

```
Enter file in which to save the key:
```
と聞かれるので好きなファイル名を指定します。(例：```github_rsa```)

```
Enter passphrase (empty for no passphrase):
```
上のように聞かれたら何も入力せずにエンターを押してしまって大丈夫です。
これで公開鍵(<ファイル名>.pub)と秘密鍵(<ファイル名>)が作成されました。ここからは公開鍵(github_rsa.pub)、秘密鍵(github_rsa)として説明します。  

ここから鍵の登録に入ります。ssh-addによって秘密鍵を登録します。

```
$ ssh-add github_rsa
```
次に公開鍵の中身を表示し、コピーします。

```
$ cat github_rsa.pub
```
表示された内容を、```ssh-rsa ```の部分も含めた全てをコピーします。

GitHubの設定画面(https://github.com/settings/keys )を開き、`New SSH Key`をクリックします。
コピーした内容をKey欄に貼り付けます。Title欄には適当な名前をつけ、```Add SSH key```をクリックします。  
terminalに戻り、

```
$ ssh git@github.com
```
と入力します。
すると、

```
Are you sure you want to connect
```
と表示されると思うので、```yes```と入力してください。
そのあとに

```
Hi <ユーザ名>! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
```
と表示されれば成功です。

# Gitの設定
Gitが入っていない場合は

```
$ sudo apt-get install git-all
```
でインストールすることができます。  
次にGitのユーザ名とメールアドレスを設定します。こちらはGitHubと同じものを設定します。

```
$ git config --global user.name ユーザ名
$ git config --global user.email メールアドレス
```
以下のようにコマンドを打つと設定を確認することができます。

```
$ git config --global user.name
$ git config --global user.email
```


# 自分のPCからGitHubにコードをあげる
ローカルリポジトリからリモートリポジトリへのプッシュです。
## GitHub上でのリモートリポジトリの作成
GitHubで自分のアカウントページを開き、右上にある`+`をクリックし、そこから`New repository`を選択します。
そして`Repository name`を付け、`Public/Private`を選択し、`Initialize this repository with a README`にはチェックを付けず、`Create rpository`をクリックする。これだけです。  
すると作成されたリポジトリページに、

```
git remote add origin https://github.com/ユーザ名/リポジトリ名
git push -u origin master
```
のような記述が見つかりますので、この2行をコピーしておきます。

## PC上でのローカルリポジトリの作成
GitHubに挙げたいディレクトリに移動します。
そこで以下のコマンドを打つことで、今いるディレクトリをローカルリポジトリにします。

```
$ git init
```
以下のコマンドで`.git`というディレクトリが作られているかを確認します。

```
$ ls -a
```
ディレクトリにあるファイル情報をgitに加え、コミットしていきます。

```
$ git add .
$ git commit -m "Initial commit"
```
`git add`はGitで管理するファイルを選ぶコマンドです。`.`は現在いるディレクトリの全てのファイルということです。`.`の代わりにファイル名を入力することで、そのファイルだけGit管理することもできます。
`git commit`は`add`したファイルをコミットするコマンドです。`" "`の間にはコミットする際のコメントを書きます。
  
次に上でコピーした

```
git remote add origin https://github.com/ユーザ名/リポジトリ名
git push -u origin master
```
を打ち込むのですが、このままではなく`https://github.com/`を`git@github.com:`に変更します。

```
$ git remote add origin git@github.com:ユーザ名/リポジトリ名
$ git push -u origin master
```
これでssh通信を行うことができるようになりました。
また、これでローカルリポジトリの内容がリモートリポジトリにコピーされます。リポジトリページの`Code`タブから確認してみてください。

# GitHubから自分のPCにコードをおとす
リモートリポジトリからローカルリポジトリへのクローンです。
リモートリポジトリをクローンするディレクトリに移動し、以下のコマンドを打ちます。

```
$ git clone git@github.com:ユーザ名/リポジトリ名
```


# おわりに
今回はGitHubに登録し、リポジトリを作成し、sshで通信できるようにするまでを行いました。GitやGitHubにはまだまだ機能がたくさんあります。色々使っていく中で試してみてください！
また、新しいツールを使う中で絶対に知らないエラーが出てくることはあると思います。そんな時はエラー文をそのままコピーして検索してみましょう。GitHubなどの有名なツールであれば、ほぼほぼ解決策が見つかります。
システムエンジニアとして働く人にとっては大切なツールだと思うので、ぜひ使いこなしてください！