Gitの仕組みとコマンドについての基本的なことをメモ。
Gitのデータ保存について
Gitはスナップショットで保存している。
参考↓
なぜスナップショットで保存しているのか?
複数人で開発する際のスピードを上げるため。(並行作業するため)
もし差分でデータを保存する場合、そのコミットやマージの際に差分を都度計算しなくてはならないため、スナップショットで保存している。
バージョンを記録しておくことのメリット
コミットを辿って以前の状態に戻すことができる
- コミットは直前のコミットを記録する
- そのコミットはスナップショットで丸ごと状態が保存されているので、その状態にもどすことができる
Gitの操作の流れ
自分が編集した場合
- ローカル(ワークツリー・ローカルリポジトリ)でスナップショットを記録(ファイル編集→保存)
- GitHub(リモートリポジトリ)へアップロード
※リポジトリとは履歴データの置き場・データベースのこと
人の作業分を自分のローカルに取り込む場合
- GitHubの記録をローカルリポジトリに取得
- 取得したGitHubの記録をローカルのワークツリーに反映
ローカルでの作業の深堀
ローカルは
- ワークツリー
- ステージ
- リポジトリ
の3つのエリアに分かれている。
ワークツリーとは
ファイルを変更したりする手元の作業場。
コマンド『git add』でステージに上げる。
ステージとは
コミットする変更を準備する場所。
コミットとはスナップショットを記録すること。
つまりステージとはスナップショットを記録する準備をする場所。
コマンド『git commit』でリポジトリに上げる。
なぜ一旦準備するのか?
手元には変更が完了したファイル、完了していないファイルが様々混在するので、変更が完了した分(記録したい分)だけスナップショットで記録したりGitHubにアップするためにステージに上げて準備するため。
リポジトリとは
スナップショットを記録して保管する場所。
Gitのデータ構造について
- リポジトリに『圧縮ファイル(git add で作成)』『ツリー(git commit で作成)』『コミット(git commit で作成)』のファイルを作成することでデータを保存
- コミットが親コミットの履歴を持つことで変更履歴を辿れる
Gitの本質は、データを圧縮して、スナップショットで保存すること。
Gitコマンドは、上記各データに対して様々な操作を行なっている。