Gitの特徴
Gitとは、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムのことです。

個人やチームで作業するときに、既存のファイルを編集する際、バックアップやコピー、編集用など沢山のファイルが生成されていることがあります。
この状態では「誰が」「いつ」「目的」「変更箇所」などが不透明で、管理が複雑とても複雑になります。
しかし、Gitでは「誰が」「いつ」「目的」「変更箇所」などを全てを明確に管理することができます。
バージョン管理システム
バージョン管理システムには、集中型と分散型の2種類があります。

集中型と分散型の大きな違いはリポジトリの数の違いになります。
リポジトリとは、貯蔵庫や各農耕を意味し、システムを構築するデータやプログラムの情報が納められるデータベースのことです。
集中型はサーバー上にある中央リポジトリからデータを取得して、修正が完了したら、データを中央リポジトリに反映させます。
分散型は自分のローカルスペースにあるローカルリポジトリとサーバ上に存在するリモートリポジトリという二種類のリポジトリがあります。
ローカルリポジトリは使用する人それぞれに存在するので複数、リモートリポジトリは基本的には一つという形になります。
普段はローカルリポジトリで作業を行い、修正が完了したら、リモートリポジトリに反映させるという使い方が一般的です。
リモートリポジトリにアクセスできない環境(オフライン時)でも作業が進められることも強みになります。
Gitのデータ管理

Gitはデータをスナップショット(その時点の状態を、そのまま丸ごと保存したもの)で記録します。
バージョン1とバージョン2ではファイルBとファイルCに差分がある状態です。
バージョン2をコミットする際に、差分だけを記録するのではなく、ファイルB1とファイルC1のデータ全てを保存します。
ファイルAに関しては、バージョン1のをそのまま持ってきます。
以前のバージョン管理システムは差分でデータを持っていたため、ブランチやマージに非常に時間が掛かっていましたが、Gitは全てのデータを保存しているため、瞬時に対応することができるのが強みです。
GitHubとは
GitHubとは、Gitの仕組みを利用して、世界中の人々が自分のプロジェクト(コードやデザインデータ)を保存、公開することができるWEBサービスです。
Gitはコマンドラインツール(ターミナルなどを用いて、キーボードを使い、プログラムする手法)ですが、GitHubはウェブ上でグラフィカルに扱うことができます。
Gitの用語集
●リポジトリ
ファイルとディレクトリとその変更履歴を保存・記録する場所のことを指します。
分散型バージョン管理システムであるGitには、ローカルリポジトリとリモートリポジトリの2種類のリポジトリがあります。
ローカルリポジトリとは、各ユーザーが自身のマシン(パソコン)上にリポジトリを配置することができます。
リモートリポジトリとは、サーバー上にリポジトリを配置して複数人で共有します。
Gitのリモートリポジトリをホスティング(利用するサーバーを貸し出すこと)するサービスとして有名なのがGitHubやGitLabです。
●コミット
変更したファイルやディレクトリをリポジトリに記録することです。
ソースコードだけでなく、コミットしたユーザー名、メールアドレス、直前のコミット情報なども一緒に記録される
●ステージングエリア
ステージングエリアとは、ローカルリポジトリに登録(保存)するファイルが集まっているエリアのことです。
変更したファイルやディレクトリは、一度ステージングエリアに登録してからローカルリポジトリに登録します。
ステージングエリアを経由する理由は、コミットしたいファイルを選別することができるからです。
追加・修正したファイルの一部のみをローカルリポジトリにコミットしたい場合に、特定のファイルをのみをステージングエリアに追加することによって、選別することができます。
GitHubのワークフロー

1.ローカルリポジトリの新規作成
initコマンドが実行されたディレクトリに「.git」というディレクトリが作成されて、リモートリポジトリを新規作成します。すでにリポジトリが作成されている場合は、初期化されます。
2.修正したファイルをステージングエリアに追加する
いきなりローカルリポジトリに修正ファイルを追加するのではなく、ステージングエリアに修正したファイルを登録(保存)します。
3.ローカルリポジトリにコミット(登録・保存)する
追加・編集されたステージングエリアにあるファイルを、リモートリポジトリに登録・保存します。
Gitのデータの持ち方
Gitのデータの持ち方を理解して、Gitへの理解を深めます。

Gitのディレクトリ構成
git addやgit commitした時に、「圧縮ファイル」や「ツリーファイル」、「コミットファイル」が生成されますが、これらのファイルはGitオブジェクトと呼ばれています。
Gitオブジェクトは「.git/objects」ディレクトリの下に保存されます。
1.ワークツリーからステージングエリアへの追加
ローカルリポジトリに圧縮ファイルの生成
「git add」コマンドでステージングエリアへの追加した際に、addの対象のファイルが圧縮され、ローカルリポジトリに圧縮ファイルAが生成されます。
圧縮ファイルの命名規則はハッシュIDであり、、ヘッダー(ファイル内容の文字数など、ファイルのメタ情報)とファイル内容を、SHA-1というハッシュ関数で40文字の英数字に変換したものになります。
例として、圧縮ファイルは「.git/objects/af/5626b4a114abcb82d63db7c8082c3c4756e51b」として保存されます。
ハッシュIDというには中身が同じであれば、同じハッシュIDになります。つまり、ファイル内容が同じものをgit addしても追加で圧縮ファイルが生成されることはありません。
ステージングエリアのインデックスファイルの生成
ステージングエリアの圧縮されたファイル名(圧縮ファイルA)とファイルの中身をマッピングした情報をが記載されたインデックスファイルが生成されます。
良いコミットメッセージの書き方
コミットメッセージのフォーマットはいかになります。
1行目:接頭辞:変更内容の要約(タイトル、概要)
2行目:空白
3行目:変更した理由(内容、詳細)
接頭辞の種類
- fix:バグ修正
- hotfix:クリティカルなバグ修正
- add:新規(ファイル)機能追加
- update:機能修正(バグではない)
- change:仕様変更
- clean:整理(リファクタリング等)
- disable:無効化(コメントアウト等)
- remove:削除(ファイル)
- upgrade:バージョンアップ
- revert:変更取り消し
コミットメッセージの例
Add(追加):グローバルナビゲーション機能の追加
理由:PCとSPの構成が大きく変わるため、別々のHTMLで表示している
https://test.com