0
0

Gitのデータ管理の仕組み

Last updated at Posted at 2023-09-21

Gitがどのようにしてバージョン管理をしているのか理解するため、
addとcommitコマンドそれぞれを実行した際に、
リポジトリ内部で行われていること確認していく。

目次

 addコマンド実行時の挙動
 commitコマンド実行時の挙動
 まとめ

addコマンド実行時の挙動

 git addコマンドを実行すると、
 まずリポジトリにaddで指定したファイルの圧縮ファイル1が保存される(図①)。
 圧縮ファイルはblobオブジェクトと呼ばれている。
 それにハッシュ関数SHA12によってファイル名3が付けられる。

 次にステージエリアにあるインデックス4に、
 圧縮ファイルとその元ファイルのマッピング情報を記載する(図②)。

・概要図

behavior_of_add.png

commitコマンド実行時の挙動

 git commitコマンドを実行すると、
 まずリポジトリにtreeオブジェクトが作成される(図③)。
 名前はハッシュ関数によって付けられる。
 内容はインデックスを複製したもの。

 次にリポジトリにcommitオブジェクトが作成される(図④)。
 名前はハッシュ関数によって付けられる。
 内容は以下
 ・treeオブジェクトのファイル名
 ・親commit情報
 ・commit作成者名, アドレス
 ・commit日時
 ・commitメッセージ

・概要図

behavior_of_add_and_commit.png

まとめ

 Gitではコミットを実行すると、
 リポジトリ内に次の3つのオブジェクト5が生成される。

 blobオブジェクトはコミットしたデータ本体を圧縮ファイルとして保存し、
 treeオブジェクトはファイルシステムの様にファイル(ディレクトリ)構成を管理し、
 commitオブジェクトはコミット情報を管理している。

 それらによってGitはバージョン管理をしている。

  1. zlibライブラリを使用

  2. ファイルの中身にヘッダーを付け加えた文字列を暗号化

  3. 40文字の英数字

  4. インデックスの正体はファイルであり、
    .git/indexに保存されている

  5. ./git/objectに保存されている

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0