Gitの管理について

# 1.Gitとは
バージョン管理ツール
いつ、だれが、どのファイルを修正したかを履歴として管理する。

# 2.リポジトリとは
Gitでファイルを管理する場所
※1つのシステムに1つのリポジトリ(入れ物)の中で作業を行う。

Gitを使って複数人で共同開発する場合は、Gitが用意してくれているサーバーに対して
アップロードやダウンロードを行うことでファイルの共有を行います。


:::note info
サーバーのことをGitではリモートリポジトリと呼びます。
個人の作業端末のことをローカルリポジトリと呼びます。
:::

リポジトリを抜いて、リモートやローカルという人もいますが好みです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/5075d88f-67ba-9d6a-4b15-51a900a3a59e.png)

リモートリポジトリを見たいときはGitHubというツールを使うと便利です。

:::note warn
GitHubアカウント作成は下記を参照してください。
:::
https://qiita.com/Yuichi_adobe/items/e80a765919a35a3c28c7

# 4.GitとGitHubの違い
GitHubはあくまでリモートリポジトリの中身をウェブブラウザで見るためのツールにすぎません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/c4522d53-46b3-5a17-7931-ee7bbe539603.png)

:::note warn
つまり
GitHubを使わずにGitだけで使うこともできます。
:::

# 5.リポジトリの作成方法
GitHubを使用しリポジトリを作成します。
GitHubアカウントを作成しておいてください。

GitHubにログインを行い右上の【+】ボタンを押下し、【New repository】をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/fdd25d47-b4fc-994d-d6b4-b468e2f237e4.png)

次にリポジトリ名や備考を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/1946ae16-5d3e-5c2a-0b2e-5c21afa0e7b1.png)

:::note alert
アクセス権の設定
Public ：全世界にこのリポジトリの中身が見られます。
Private：限られた人だけがこのリポジトリにアクセスできるようになります。
:::

【Create repository】を押下するとリポジトリが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/b1619915-0b7d-c028-eda6-0a88e4899c12.png)

# 6.クローンをローカルに作成
今までの作業でリモートに「halo_git」リポジトリを作成したので、
ローカルへクローンします。

:::note info
クローン
既存のリポジトリをローカル環境に複製するコマンドのこと
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/a31ce237-7d00-2e38-57d3-47902d428611.png)

GitHubでクローンしたいリポジトリを開き【HTTPS】を選択し、コピーをします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/4bc076ad-8acf-a20b-ac64-0c0220bced64.png)


コマンドプロンプトを開き下記を実行します。
```コマンドプロンプト
git clone (Gitからコピーしたテキスト)
```

:::note warn
保存したいディレクトリがある場合は「cd」コマンドを使い変更しておいてください。
私はCドライブ直下に「Git」フォルダを作成しこちらに保存を行います。
例：cd C:\Git
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/f10b3618-659c-d553-5e19-fcbef2771d5b.png)

クローンが作成されたか確認をしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/d11b6cfc-3d3b-4d3a-1630-c4f2b7f4b6bc.png)

# 7.コミット、プッシュ
作成されたクローンにファイルを2つ用意し保存してみましょう。

クローンしたファイル内に「file1.txt」「file2.txt」を追加しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/a4564152-797c-c463-3828-45b0d0d98009.png)

今の状態を確認してみましょう。

:::note warn
コマンドプロンプトのディレクトリをクローンしたファイルに変更しておく。
```コマンドプロンプト
cd C:\Git\halo_git
```
:::

ディレクトリの準備ができましたら、下記のコードを流します。

```コマンドプロンプト
git status
```

すると下記が出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/6a8d1596-4267-b972-9c66-80cc1eb77820.png)

こちらはGitが「file1.txt」「file2.txt」が新しく検出したといっています。
現状ではローカルに保存を行っただけですのでGitへ共有を行っていきます。

次に「git add」を使用します。
```コマンドプロンプト
git add file1.txt
```

:::note warn
Macでは拡張子を書かなくても読み込めるそうですが、
Windows では拡張子を含めて入力を行ってください。
:::

下記のように拡張子を入れないとはじかれてしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/1b72eafa-f1de-4706-29a9-300534433e00.png)

こちらでfile1.txtはGitに管理されました。
下記を実行し確認してみましょう。
```コマンドプロンプト
git status
```

下記のように「gitt add」で追加されたファイルは緑色になっています。

:::note info
ステージング
Gitではこのように緑色で表記されている状態をステージングといいます。
:::

つまり、緑文字はGitで管理されており赤文字はGitで管理されていないことになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/c8622fbe-98ab-c66c-05f6-849851035551.png)

このようにGitで管理させるか、させないかを選ぶことができます。

逆に全てのファイルをまとめてGitに管理させたい場合は下記のコマンドを使用します。
```コマンドプロンプト
git add .
```

上記のコマンドで行ったステージングを保存していきます。
保存には下記のコマンドを使用します。
```コマンドプロンプト
git commit -m "初めてのコミットです。"
```
" "の中にはコミットメッセージを入力することが可能です。
共同開発を行うとき、コミットの簡略化した内容をコミットメッセージに記載しましょう。

下記のようにfaile2.txtはステージングをしていませんので、
faile1.txtのみがコミットされた状態となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/fb83a29e-747f-5e2e-e216-b8f2f5622229.png)

<details><summary>補足</summary>

開発を行っているとコミットした後に編集を行いたい場合があります。
上記の場合を記載します。

一度faile1.txtの中を編集し保存を行います。
下記を実行し確認してみましょう。
```コマンドプロンプト
git status
```
file1.txtの前に「modified」と出力されます。
これはGitがファイルに編集があったと検知しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/307aa656-7160-d525-d1f5-1946ae601212.png)

こちらを再度保存するにはまずステージングを行います。
今回はfile2.txtもまとめて行いたいので下記を実行します。
```コマンドプロンプト
git add .
```
ステージングの確認を行うために下記を実行します。
```コマンドプロンプト
git status
```
file1.txt、file2.txtともにステージングが完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/52903d87-2de5-5c9d-1fd3-9105b6fd1168.png)

そのまま保存を行うために下記を実行します。
```コマンドプロンプト
git commit -m "2回目のコミットです。"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/177943fb-11f1-d114-837d-9dcd2ac667bf.png)

</details>

:::note info
嚙み砕いて言うとコミットとはGit(ローカル)への保存を意味します。
GitHub(リモート)へ保存することではないので注意しましょう。
:::

記録の確認方法
```コマンドプロンプト
git log
```

下記のように何時何分何秒に誰がコミットしたか履歴を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/8de8ba06-7740-c4f3-7486-650c69aacaeb.png)


>現状をまとめます。
>1.リポジトリを作成
>2.ローカルへクローン
>3.編集ファイルを2のクローンファイルに入れて保存(commit)
>4.履歴確認
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/1b4960ad-48fc-b28f-7bd2-40d8519d4713.png)

リモートのリポジトリを確認してみましょう。
ローカルで保存を行っただけですのでリモートには「file1.txt」「file2.txt」はありません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/679ff846-28b8-4882-5a05-887e640bfe87.png)

では、ローカルで保存した内容をアップロード(push)していきます。
下記のコマンドを実行します。
```コマンドプロンプト
git push origin
```
※originはリモートリポジトリのことです。

GitHubを確認してみましょう。

file1.txt、file2.txtともにアップロード(push)が完了しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568688/7a4086b8-f16b-aa5d-657d-47cd55f95fce.png)