まるノート

備忘録も兼ねて、様々なお役立ち情報をまとめています。

【Git】.git の仕組みや変化を調べてみた ②(git commit を実行)

以下の記事でgit addコマンド実行後 「.git」内でどのような変化があるかを調べました。
(Hello world と記入した test.txt をステージに追加)

【Git】.git の仕組みや変化を調べてみた ①(git init から git add まで実行) - まるノート


git commit を実行

続けてgit commitコマンド実行により、どのような変化が起こるか調べてみます。
実行前の「.git / objects」は以下の状態です。

実行します。

$ git commit -m "first commit"
[master (root-commit) d6e1f7e] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

すると「objects」配下に2つのフォルダが生成されました。

「40」フォルダ内は以下のファイルが存在しています。

同様に「d6」フォルダ内は以下の通りです。


tree オブジェクト

まずは「40」フォルダの内容をgit cat-file -pコマンドで確認してみます。

$ git cat-file -p 401ce7dbd55d28ea49c1c2f1c1439eb7d2b92427
100644 blob 802992c4220de19a90767f3000a79a31b98d0df7    test.txt

実行結果が表す内容は以下の通りです。

  • 100644・・・アクセス権限
  • blob・・・ファイルの種類
  • 802992c4220de19a90767f3000a79a31b98d0df7・・・オブジェクトID
  • test.txt・・・ファイルのパス

git addを実行した後の「Index」とよく似ていおり、
ステージに追加した test.txt のハッシュ値である
「802992c4220de19a90767f3000a79a31b98d0df7」を指している点は共通です。

これはtreeオブジェクト と呼ばれるものになります。
これだけではさっぱりわからないと思いますが、ひとまず置いといて、 もう一つ生成されたフォルダを見てみます。


commit オブジェクト

次に「d6」フォルダの内容を同じくgit cat-file -pコマンドで確認してみます。

$ git cat-file -p d6e1f7eb272690a4e0f0eaa1de2fd92c6f11c1e7
tree 401ce7dbd55d28ea49c1c2f1c1439eb7d2b92427
author Hogetaro <Hogetaro@yahoo.co.jp> 1653910407 +0900
committer Hogetaro <Hogetaro@yahoo.co.jp> 1653910407 +0900

first commit

「tree 401ce7dbd55d28ea49c1c2f1c1439eb7d2b92427」の部分は、 同じタイミングで生成されたtreeオブジェクトを指しています。

こちらはcommitオブジェクトと呼ばれるものになります。


git commitを実行することでtreeオブジェクトとcommitオブジェクトという2種類のファイル・フォルダが生成される。ということが確認できました。


内容について詳しく触れておらず、この段階では不明な点が多々あるかと思いますが、また次回の記事で解説しようと思います。ここまで読んで頂きありがとうございます。