GitHubの使用法(初心者用備忘録) 

# はじめに
機械学習の勉強を始めようと思ったが、いい感じに作成履歴とかを残しときたいな...と思ったので、イチからGitHubについて勉強して作成してみます。

# 参考
以下のサイトを参考にしました。
[【初心者向け】GitHubの使い方を8ステップでわかりやすく解説](https://web-camp.io/magazine/archives/75359)


# 自分が現在持ち合わせているGitHubの情報
* バージョン管理が可能なGitの機能を持ったサービス
* Gitでpushとかなんやかんやすることで、これまでの履歴との比較とかが出来て便利！
* 最近、GitHub Copilotが出てきて、ますます便利に？


# では実際にお勉強
まず、Gitには以下の機能があるらしいです。
1. ローカル/リモートリポジトリ
1. クローン
1. ブランチ
1. コミット/プッシュ
1. プルリクエスト
1. フォーク

#### 1. ローカル/リモートリポジトリ
　"リポジトリ"がファイル、フォルダを保存する場所のことらしい。ローカルリポジトリは、自身のPC(環境)内にあるもの。リモートリポジトリが、GitHubを利用したネットワーク上にアップロードをするもの。
　複数人で作業するときに、同期作業とかがあるとめんどいので、上手く使うと便利っぽいかな。

#### 2. クローン
　リモートリポジトリをローカルにコピーして、ローカルリポジトリを作成すること。

#### 3. ブランチ
　履歴の流れを分岐して記録していくもの。使い方としては、
　　・一つのプロジェクトに対し、複数人で機能追加、バグ修正を行う際、並行して行われる作業を一旦別のブランチで実行　→　後で内容を一致させる
　　・実際にリリースする用のブランチと、デバッグ等を実施するテスト用ブランチを用意し、作業が終了してからテストブランチの内容をリリースブランチにコピーする
　などがあります。このブランチの変更の反映のことを(上ではコピーと書きましたが)「マージ(merge)」と言う。

#### 4. コミット/プッシュ
　コミットはファイルの追加・変更履歴をローカルリポジトリに保存すること。
　プッシュはコミットで実行したファイル追加や変更履歴をリモートリポジトリにアップロードする操作。

#### 5. プルリクエスト
　ローカルリポジトリでの変更を他の開発者に伝える機能のこと。機能追加・改修内容などを一覧で確認できるため、確認しやすくなるということ。このログを確認しながらプルすると、間違いがないということになるのかな？(一旦自分だけで作業するのでこの機能を使えるかが微妙...)

#### 6. フォーク
　リポジトリのコピーのこと。元のプロジェクトに影響を与えずに変更が適用できる点が重要。
　複数人のプロジェクトでのバグ修正について、フォーク→修正→プロジェクトの管理者にプルリクエスト　といった行動が可能になる。


# GitHubを始めてみる

まずは、Gitのインストールから...と言いたいところでしたが、既にGitのアプリが入っていたので、ここは割愛。

### Gitの初期設定
　1. Git Bashの起動
　　Gitのユーザ名、メールアドレスの設定を行う。以下のコードをGit Bashに打ち込んでいます。
```Bash
git config --global user.name "ユーザー名"
```
```Bash
git config --global user.email "メールアドレス"
```
"--global" の部分は、他に"--local", "--system"などがあるが、一旦Gitの環境全体での定義なので、上のコードで問題なし。


ちなみに、この設定が上手く行っているかは、以下のコマンドでそれぞれ確認しています。
```Bash
git config user.name
```
```Bash
git config user.email 
```


### GitHubの設定
　基本的にCUIでやるのは、初心者にハードルが高いため、GUIベースのGitHubを使用していきます(SSHなど使用するとCUIベースにならざるを得ないところがあるので、いずれは覚えていきたいですが...)。

以下のサイトにアクセス
https://github.co.jp/
Sign in を行い、ユーザ名、メールアドレス、パスワードを登録し、メールアドレスに届くコードを打ち込んで完了。

### リモートリポジトリの作成
　GitHubのトップ画面で"Create Repository"をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256521/5565cd56-c253-74cd-40f9-bd748260da85.png)

すると、上のような画面が出るため、"Repository name"に作成したいリポジトリ名を入れます。今回は機械学習用に使用したいので、自分は"machine_learning"と入れています。

また、その下のラジオボタンは、ソースコードの公開可否になっています。Privateが非公開ですね。
READMEファイルを作成する場合は"Initialize this repository with a README"にチェックしておくと便利ですね。
他の内容の紹介は割愛しますが、以下のサイトに記載しています(コミットの際に変更を無視するファイルの指定や、ソフトウェアライセンスの追加ですね)
https://docs.github.com/ja/repositories/creating-and-managing-repositories/creating-a-new-repository

これでmachine_learningのブランチが作成されました。

### ローカルリポジトリの作成
　ローカルリポジトリとなるディレクトリを作成していきます。WindowsのPowerShellでmachine_learning用のフォルダを切ります。cdコマンドで切りたいディレクトリの上のフォルダまで行き、以下のコマンドを打ちます。

```PowerShell
mkdir machine_learning
```
machine_learningディレクトリに移り、以下のコマンドを入力
```PowerShell
git init
```
すると、以下のようにgitのファイルが作成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256521/201e062e-e900-b05e-d5bc-7a2c3155c501.png)

### ローカルリポジトリにファイルをコミット
　ローカルリポジトリに適当なファイルをコミットしていきます。machine_learningディレクトリ直下に適当なtxtファイルを作成し、以下のコマンドでコミットします。
```
git add test.txt
git commit -m "first commit"
```

### リモートリポジトリにプッシュ
　リモートリポジトリに先ほどのファイルをプッシュしていきます。ただし、まだGitHubをリモートリポジトリに指定していなかったので、そちらを先に実施します。
PowerShellで以下のコマンドを打ち込みます。
```
git remote add origin https://github.com/"ユーザID"/machine_learning.git
```
ちなみに、上のGitHubのurlは下図の部分に書かれているので参照してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3256521/b93d9226-84f4-6c52-7188-f2e72309f536.png)

最後にこちらのコマンドを打ち、push完了です。(masterの部分を使用するbranch名に変更可能)
```
git push origin master
```