概要
Gitの中身を知ることで、どこに対する操作なのかを意識しやすくなります。
今回はできるだけ短く要点だけまとめます。
Gitのデータ管理
ローカルでは3つのエリアに分かれています。それぞれ紹介します。
ワークツリー
ファイルを変更する作業場。普段私たちがコードをいじる場所ですね。
ステージ
git add
をした時にステージに追加されます。コミットをする準備をします
リポジトリ
git commit
をした時にリポジトリに追加されます。ここではスナップショットを記録します
引用: https://phoeducation.work/entry/2020/09/11/144733
Gitコマンドについて
コマンド | やっていること | 説明 |
---|---|---|
git init | .gitディレクトリを作成 | Gitに関する全ての関連情報が作成される。 |
git add | blobオブジェクトの作成 | 圧縮ファイルを作成。ハッシュ値を付与する |
git commit | treeオブジェクトの作成 | 圧縮ファイルのハッシュ値に対応するファイル名を付与する |
git commit | commitオブジェクトの作成 | treeオブジェクトを使用して様々な情報を作成する |
代表的なコマンドを3つピックアップしました。
「やっていること」について説明していきます。
git add
上記の前提知識をもとに説明していきます。
例えば、index.htmlファイルを作成した場合を例に考えます。まず、リポジトリに圧縮ファイルAというファイルが作成されます。その後、圧縮ファイルをハッシュ化したものをindex.htmlとマッピングしたものをステージングで保持します。これがgit add
です。そしてこれがblobオブジェクトと呼ばれます。
git commit
git commit
では2つのことをしています
①ツリーオブジェクトの作成
blobオブジェクトにはもともとのファイル名情報が残っていません。全てハッシュ化されています。ここではファイル名とファイルの中身を組み合わせることでツリーオブジェクトを作成します。ツリーオブジェクトはディレクトリの一つの階層ごとに一つのツリーファイルになっていて、ツリーファイルには圧縮ファイルだけでなくツリーファイルも保存されています。
②コミットオブジェクトの作成
コミットオブジェクトでは以下のような情報を持ったコミットオブジェクトを作成します
・ハッシュ値
①で作成した変更情報がハッシュ値として設定されます
・作成者
このコミットをした本人のアカウント名
・親コミット
直前のコミットを記録します。(一個前のコミット)
・日付
コミットした日付を記録
・コミットメッセージ
そのままの意味。変更箇所などを書くことが多い
まとめ
Gitは3つのことをやっている
- 変更ファイルを圧縮する
- 圧縮ファイルと変更ファイルを関連付ける
- 変更情報が記載されたコミットファイルを作成する
Gitのコマンドは基本的に上記3つの動きに対しての操作となるので
どのフェーズに対しての操作か意識すると理解が深まると思う。