Git・GitHubの仕組み

一言で言えば、ファイルのバージョン管理をするもの。
Githubとは、Gitのリポジトリホスティングサービスとセットで使われることが多い。

#### Gitとは
ソースコードの変更履歴や、画像ファイルの変更履歴を管理するシステム。
複数のユーザーが同じファイルを操作する場合にとても便利仕組み。

#### Visual Studio CodeでGitのパスを通そう

Gitをインストールしたものの、現時点ではVisual Studio Code ではGitコマンドは使えない。

Visual Studio CodeでGitのパスを通そう。

![スクリーンショット 2022-06-19 10.02.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1314502/d49dc188-cbcf-7097-94c5-099b0aac5eb7.png)

setting.jsonで編集を行う。

以下のコードを追加する。
```
"git.path": "C:\\Program Files\\Git\\bin\\git.exe"
```
Gitのバージョンを確認する
![スクリーンショット 2022-06-19 10.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1314502/063d8047-d656-0502-c9bc-f642d80af3c4.png)

Cloud９でGit のバージョンを確認
git version 

#### gitの初期設定
> ユーザーの設定

git hubに設定した、登録したユーザ名を指定して、ユーザ名の設定を完了させる。

```
git config --global user.name "ユーザネーム"
```

> メールアドレスの登録をする

githubで設定したメアドを登録する

```
git config --global user.email einstein8tesla@gmail.com
```

>設定を確認する

```
#ユーザネームを確認
git config user.name
#メアドを確認
git config user.email
#gitの設定一覧を確認する
git config --list
```

#### gitの仕組みを確認する

gitではプログラムの状態をスナップショットとして保存する。それをコミットと呼ぶ。
そのコミットという単位でバージョンが管理される。そのコミットを記録しており、コミットの履歴をたどることでプログラムを特定のバージョンの状態に戻すことが可能。

＜変更履歴＞
・ローカルリポジトリへ変更履歴の保存
・github 上のへのリモートリポジトリへの変更履歴の保存
・github　上へへのリモートリポジトリからのプログラムの変更履歴を取得する操作

> ローカルリポジトリの仕組み
ーーーリポジトリーーー
ーーーステージーーー
ーーーワークツリーーー
```
git add ファイル名
```
ステージに変更履歴を保存
コミットする変更を準備
たくさん変更したけど完了した分だけを記録してコミット
```
git clone ファイル名
```
リポジトリにスナップショットを記録

#### git プロジェクトを作成

Gitプロジェクトを作成する。git_tutorialという名前でプロジェクトを作成する手順を記録する。
>プロジェクトを管理するディレクトリを作成して初期化する。

git initというコマンドを実行すると、今いるディレクトリ配下のファイルをGit管理に登録することができる。

```
mkdir git_tutorial

cd git_tutorial

#git管理を始まる
git init 
```

#### 変更をステージに追加する

修正したものを他の人に共有したい時、
変更したファイルの一覧をステージに知らせるという作業を行う。
変更をステージに追加するにはgit add というコマンドを実行する
```
#ファイルごとにステージに追加する
git add （ファイル名）
#ディレクトリごとにステージに追加する
git add (ディレクトリ)
#ワークツリーの変更を全てステージに追加する
git add.
```

一度、ファイルを変更する

```
echo　"# git_tutorial" >> README.md
#作成されたファイルを確認
cat README.md
```
以下、結果
![スクリーンショット 2022-06-19 12.57.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1314502/658d6a84-b8de-4165-a89e-b4c370d6f8f0.png)

#### ステージに追加(
```
git add README.md
git add.
```

#### 変更をローカルリポジトリに反映する（コミット）

git commit コマンドでステージに追加された変更履歴をローカルリポジトリに反映する作業をコミットと呼ぶ
実際にコミットを実行
```
git commit -m "最初のコミット"
git commit 
#エディタが立ち上がりファイルの変更内容が確認できる
git commit -v
```
#### 変更状況を確認する
```
git status 
```
#### 何を変更したのかを確認
```
#変更差分を確認
git diff 
#特定のファイルの変更差分をかくにんする
git diff READE.md
# ステージに追加された変更差分を確認する
git diff --staged
```

#### 変更履歴を確認する
```
# コミットログを確認する
git log
# コミットログを一行で表示する
git log --oneline
# ファイル単位でコミットログを確認する
git log -p index.html
# 表示するコミット数を制限する
git log -n <コミット数>
```
![スクリーンショット 2022-06-19 13.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1314502/8a392a20-e0f2-7a5c-d35b-35f18835c6fa.png)

#### ファイルの削除を記録
```
#ワークツリーとリモートリポジトリからファイルを削除
git rm <ファイル名>
#ワークツリーとリモートリポジトリから削除する
git rm <ディレクトリ名＞　
#リモートリポジトリからは削除するが、ワークツリーにはファイルを残したい
git rm --cached <ファイル名>
```

#### ファイルの移動を記録
```
git mv <旧ファイル> <新ファイル>
```
これは以下の操作と同じ挙動

```
# ファイルを移動する
mv <旧ファイル> <新ファイル>
# 古いファイルの削除
git rm <旧ファイル>
# 新しいファイルを追加
git add <新ファイル>
```



ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ご愛読ありがとうございました。
何か気づきや質問があれば、コメントお願いします。
新しい情報を取得するたび、更新していきます。

良ければ、LGTM、ストックよろしくお願いいたします！