Git 及び Git Hub の使い方と vagrantでgitとdocker-compose 自分用まとめ

#Git 使い方

####目次
+ [Gitの基礎](#gitの基礎)
   + [◎コマンド](#基本のコマンドと説明)
     + [●基本のコマンドと説明](#基本のコマンドと説明)
     + [●開発途中のコードを共有しないよう完成したものを選択するために使えるコマンド
](#開発途中のコードを共有しないよう完成したものを選択するために使えるコマンド)

   + [◎Git環境構築【Mac】](#macgit環境構築)
   + [◎Githubの設定](#githubの設定サイトを見た方がわかる)
　　　　　   
   + [●リモートを作成する](#リモートを作成する)
   + [●Githubにプッシュをする](#githubにプッシュをするサイトを見た方がわかる)
  
+ [仮想環境でGitとdockerを使う](#仮想環境でgitとdockerを使う)　　　　   
   + [◎【VirtualBox＋Vagrant】仮想環境にgitとdocker-composeをインストール](#virtualboxvagrant仮想環境にgitとdocker-composeをインストール)
      + [●gitのインストール](#gitのインストール)
      + [●Gitの初期設定](#gitの初期設定)
      + [●vagrantで管理しているアプリをgitやGItHubに連携させる](#vagrantで管理しているアプリをgitやgithubに連携させる)


#Gitの基礎

https://tracpath.com/bootcamp/learning_git_firststep.html

##◎コマンド

###●基本のコマンドと説明

`git init`、`git clone`、`git add`、`git commit -m`、`git push origin master`、`git pull origin master`

* 共有リポジトリの作成

```
git init
```

* 作業ディレクトリを作成しクローン

クローン：サーバが保持しているデータをほぼすべてローカルにコピーします。これはプロジェクトのすべてのファイルのすべての履歴が手元にコピーされることを意味しています。
他の開発者に影響を与えずにブランチを作成したりできる分散管理バージョンのメリットです。

```
git clone https://username@domain/path/to/repository
```

* 作業ディレクトリで変更したファイルを索引に追加（コミット準備、管理対象にする）

```
git add ファイル名
git add * 　　　　　　#変更があったファイルをすべて索引に追加します
```

* 変更内容をコミットする

コミット：新規作成したファイルや編集したファイルを保存すること。作業ディレクトリで開発を進めて、区切り毎に保存する操作

```
git commit -m "コミットメッセージ”
```

コミットメッセージは他の人がわかるように書く

```
#例
git commit -m "Create ファイル名"
git commit -m "Change 変更した部分　変更した内容　(ex: Change subtitle color)"
```

* 変更を共有リポジトリに反映させる
マスタブランチにコミットされた HEAD の内容を共有リポジトリに送信する（origin = 共有/リモート リポジトリ）

```
git push origin master
```

* 作業ディレクトリを最新のコミットに更新する

```
git pull origin master
```

###●開発途中のコードを共有しないよう完成したものを選択するために使えるコマンド

__gitでは共有する部分を把握することが大事。__

`git status`、`git diff`、`git log`、`git log -p`


* 変更したファイルを把握する

```
git status
…
変更したファイルは赤く表示される
```

* 変更した内容を把握する

```
git diff
…
追加された部分が緑色で表示される
また、コードを変更した部分では、変更前のコードが赤色、変更後のコードが緑色で表示される
```

変更内容を確認して、その内容でよければ`git add`する

* 「git add」したファイルの確認

```
git status
…
add されたファイルが緑色、変更はあるがまだ add されていないファイルが赤色で表示される
```

* 他の人のコミットメッセージを見る

```
git log

Ex:
commit 9f6af24370a9e0406555506e79ab4430bff4e6a2 (HEAD -> master, origin/master)
Author: Ninja Wanko <wanko@prog-8.com>
Date:   Fri Feb 12 18:04:06 2021 +0900

    Change subtitle color

commit dab5cae5c690e2860a58ec5baa0b3c43b4f13c36
Author: Hitsuji Sennin <hitsuji@prog-8.com>
Date:   Fri Feb 12 16:10:40 2021 +0900

    Create stylesheet.css

commit d8cccd7b8f8eae452c76a23d190028e595cad436
:
```

* 他の人の変更内容を見る

```
git log -p

Ex:
commit 9f6af24370a9e0406555506e79ab4430bff4e6a2 (HEAD -> master, origin/master)
Author: Ninja Wanko <wanko@prog-8.com>
Date:   Fri Feb 12 18:04:06 2021 +0900

    Change subtitle color

diff --git a/index.html b/index.html
index 3d452cb..cbde591 100644
--- a/index.html
+++ b/index.html
@@ -7,6 +7,6 @@
   </head>
   <body>
:
```

`git log` や `git log -p` では表示内容が多い時は特殊な表示モードになる。
上下キーを使うと表示範囲を変えられて、Qキーを押すことで終了できる。


##◎【Mac】Git環境構築

https://prog-8.com/docs/git-env

* ターミナルを準備する
* Gitのインストール

以下のコマンドを実行

```
$ git --version
```

Gitのバージョン番号ではなく、ウィンドウが表示された方は、コマンドライン・デベロッパーツール(Xcode)をインストールしましょう。
使用許諾契約が表示されると思いますので、内容に問題がなければ「同意する」をクリックしてください。
ここまで完了するとダウンロードとインストールが実行されます。
インストールが完了すると、Gitを使えるようになります。

* Gitの初期設定
ユーザー名とメールアドレスを設定する
Gitにユーザー名とメールアドレスを設定することで、コミットしたときに誰が行なったコミットかを記録することができます。

以下のコマンドを実行して設定

```
$ git config --global user.name "ユーザー名"
$ git config --global user.email "メールアドレス"
```

##◎Githubの設定(サイトを見た方がわかる)

Githubを利用して、リモートを作成する
Githubを利用するために、アカウントを作成しましょう
以下のリンクからGithubにアクセスしてください。

https://github.com/

###●リモートを作成する

Githubのヘッダー右上にある「+」をクリックします。
「+」をクリックして表示される項目の「New repository」をクリックします。
「Repository name」の箇所にプロジェクト名を入力して「Create repository」を押すと、リモートを作成することができます。
リモートリポジトリの作成が完了すると、httpsが示されたページに移ります。（参考サイト参照）

###●Githubにプッシュをする(サイトを見た方がわかる)
Githubで作成したリモートにプッシュする

####Gitを使う準備をする

Gitで管理するディレクトリを作成し、移動します。(コードを書くとこ)

```
$ mkdir mysite
$ cd mysite
```

そのフォルダをGitで管理できるように、以下のコマンドを実行します。

```
$ git init
```

`git init` を実行した後、git hub でリモートリポジトリ作成完了後に表示された`https`から始まる1行をコピーしてください。

コピーできたら <URL> の部分をコピーしたものに置換えて下のコマンドを実行してください。
このコマンドは、プッシュ先のリモートリポジトリを指定するコマンドです。

```
$ git remote add origin <URL>
```

####プッシュする

次に、プッシュするためにファイルを作成してコミットしましょう。

```
$ touch index.html
$ git add index.html
$ git commit -m "Create index.html"
```

ここまでできたらプッシュします。

```
$ git push origin master
```

プッシュできているかをGithubで確認してみましょう。
プッシュができていればGithub上にindex.htmlが作成されているはずです。

 __うまくいかない時のチェックリスト__
うまくいかない場合は、以下のような間違いがないかチェックしてみましょう。
	・記事で指定したコードが貼り付けられていない
	・入力したファイル名やソースコードなどに誤字脱字がある
	・ファイルが保存されていない
	・記事で指定している箇所にフォルダが配置されていない
	・コマンドの内容や実行している場所が違う

###●personal access token の発行

https://howpon.com/5308

Githubアカウントの二段階認証を有効に設定した場合、git pushなどのコマンドを実行してGitHubにアクセスするには`Personal access tokens`というアクセストークンが必要になる。

githubで`Personal access tokens`を発行する。

手順は参考サイトを参照のこと。


#仮想環境でGitとdockerを使う

##◎【VirtualBox＋Vagrant】仮想環境にgitとdocker-composeをインストール

https://sazaijiten.work/git_docker-compose/

###●gitのインストール
以下のコマンドをターミナル上で実行するだけです。

```
sudo yum install git
…
完了しました!
```

途中インストール確認がありますので「y」を入力しEnterを押下します。
インストールはすぐ完了しますので、完了後バージョン確認コマンド(`git —version`)を実行しバージョンが表示されればインストールが正常に完了しています。

```
[vagrant@localhost ~]$ git --version
git version 1.8.3.1
```

###●Gitの初期設定

ユーザー名とメールアドレスを設定する
Gitにユーザー名とメールアドレスを設定することで、コミットしたときに誰が行なったコミットかを記録す ることができます。

以下のコマンドを実行して設定

```
$ git config --global user.name "ユーザー名"
$ git config --global user.email "メールアドレス"
```

Gitで管理するディレクトリを作成し、移動します。(コードを書くとこ)

```
$ mkdir mysite
$ cd mysite
```

そのフォルダをGitで管理できるように、以下のコマンドを実行します。

以下の操作に続く

###●`vagrant`で管理しているアプリを`git`や`GitHub`に連携させる

https://nonaka-katuma-hal.hatenablog.com/entry/2017/05/09/185911

__1. GitHubの準備__
まずGitHubの自分のアカウントに入ります。 
`new repository`で新しいリポジトリを制作します。
リポジトリの名前を入力して「Create repository」を押せば完了です。 ここで大切なのがリモートリポジトリのアドレスが表示されるので__HTTPSを選択してURLをどこかにコピペしておく__と後で都合がいいです。

__2.Gitの導入__
vagrantを立ち上げてアプリを制作しているディレクトリまで移動します。

```
$ git init
```

でGitを導入します。

```
$ git add .
$ git commit -m "ここにコミットに関するコメントを書く"
```

これでファイルをコミット出来たので続いては GitHubをリモートリポジトリに設定していきます。

__3.GitHubの連携__
それではリモートリポジトリの設定なのですが、先ほどコピペしておいたURLを使います。

```
$ git remote add origin https://github.com//hogehoge.git
```

ーーーーーーー補足ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

```
$ git push  -u origin master（オプション-u : —update）
```
↑オプションの意図がよくわからないので今回は__補足のコマンド`git push origin master`を使った__。
参考URL

https://qiita.com/satreu16/items/305d5f8d766464323684

これで紐づいたので、`git remote`コマンドで確認。（`origin`と表示されれば紐づいている。）

```
$ git remote 
origin
```

プッシュしたら完成

```
[vagrant@localhost docker_git]$ git push origin master
Username for 'https://github.com': ユーザー名
Password for 'https://ユーザー名@github.com': 

githubのUsername とパスワードを入力
```

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

これで

```
$ git push  -u origin master
（オプション-u : —update　変更されたファイル　 ）
```
とすればOKのはずですが（今回は補足の`git push origin master`を使った）

__4.403と出たら__
もしそこで

```
error: The requested URL returned error: 403 Forbidden while accessing https://github.com/hogehoge/rss.git/info/refs
fatal: HTTP request failed
```

このようなエラーが出てしまったときは

```
$ git remote set-url origin https://ここにユーザーネーム@github.com/ritukiii/rss.git
```

リモートリポジトリのURLに`ユーザーネーム`を入れれば解決します。
もう一度pushすればこんどはGitHubのパスワードを聞かれるので入力すれば GitHubのマイページで確認できます。

__5.非表示にしたいファイルがあるときは__
ついでにGitHubに乗っけたくないファイルをアップしてしまった時の対応ですが 普通`gitignore`を使うと思うのですがもし`gitignore`でファイルを非表示にしてるはずなのにGitHubで表示されてしまうということがあったら gitignoreをコミットする前にファイルをアップしていないか確認してみてください。 もしそうでしたら、

```
$ git rm ファイル名
```

をするとGitHubからファイルを消すことができます。

参考サイト

https://techacademy.jp/magazine/6235

http://qiita.com/ritukiii/items/0d14df8f0253ca223373

http://alice345.hatenablog.com/entry/2013/09/07/001519


——————————————————————————————————
__ファイルの変更や追加の時__

当該フォルダまで移動する
ローカルリポジトリに反映させるため `git add ファイル名orディレクトリ名`

```
[vagrant@localhost docker_git]$ git add　docker/docker-compose.yml
```

説明のためのメッセージをつけるときは `git commit -m “” `で追加

```
[vagrant@localhost docker_git]$ git commit -m "add docker-compose.yml"
```

下記のように追加されたファイル等に関する説明が出る。

```
[master 70dXXXX] add docker-compose.yml
 1 file changed, 15 insertions(+)
 create mode 100644 docker/docker-compose.yml
```

Githubに反映させるため `git push origin master`

```
[vagrant@localhost docker_git_aws]$ git push origin master

Username　と　password　を入力する
↓
Username for 'https://github.com': ユーザー名
Password for 'https://ユーザー名@github.com': 
```

Push された内容等が記載される

```
Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 715 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/ユーザー名/docker_git.git
   1d0d5af..70d9a33  master -> master
```

GitHub でブラウザを更新すると内容がアップデートされている。