7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Gitのバージョン管理の本質を理解する上で、.git/objectsディレクトリは非常に重要な役割を果たします。今回は、この部分にフォーカスした理解を記事にまとめます。

Gitオブジェクトの種類

Gitには4つの主要なオブジェクトタイプがあります

  1. Blob(ブロブ)
  2. Tree(ツリー)
  3. Commit(コミット)
  4. Tag(タグ)

1. Blob(ブロブ)

ファイルの内容そのものを保存するオブジェクトです。ファイル名や属性は含まず、純粋なデータのみを保存します。

2. Tree(ツリー)

ディレクトリの構造を保存します。ファイル名、パーミッション、各ファイルやサブディレクトリへの参照を含みます。

3. Commit(コミット)

プロジェクトの特定の時点のスナップショットを表現します。

4. Tag(タグ)

特定のコミットオブジェクトに名前をつけたオブジェクトです。リリースのバージョンなどでtagをつけた際に保存されます。

オブジェクトの保存方法

オブジェクトの保存は以下の方法で行われます。

  1. オブジェクトのデータをzlib圧縮
  2. SHA-1ハッシュを生成
  3. .git/objects/[ハッシュ先頭2文字]/[残りのハッシュ] として保存

実際にオブジェクトを確認してみる

実際にコマンドでそれぞれのオブジェクトを確認してみましょう。

1. Gitリポジトリを初期化する

mkdir git-internals-demo
cd git-internals-demo
git init

2. ファイルを作成する

echo "hogehoge" > test.txt
mkdir tests
echo "hogehoge" > tests/test1.txt

3. ファイルをステージングエリアに追加する

git add test.txt

addした地点でblobオブジェクトが作成され保存されます。

ここで今回保存した内容を確認してみましょう。

hash=$(git hash-object test.txt)
git cat-file -p $hash

hogehogeと表示されるはず。
また、tree .gitでコマンドを叩いてみても、.git/objectsの中に新しくファイルが生成されているのが確認できると思います。

4. 作成したファイルを全てコミットする

git add .
git commit -m "Check Git object for tests"

commitするとtreeオブジェクトとcommitオブジェクトが作成され、保存されます。

今回も内容を確認してみましょう。

# 最新のコミットハッシュを取得
commit_hash=$(git rev-parse HEAD)

# コミットオブジェクトを確認
git cat-file -p $commit_hash

出力として以下のようなものが出ると思います

tree <tree_hash>
author Your Name <your.email@example.com> 1733133160 +0900
committer Your Name <your.email@example.com> 1733133160 +0900

Check Git object for tests

今回の出力で得られた<tree_hash>を確認してみましょう

# コミットオブジェクトを確認
git cat-file -p <tree_hash>

出力として以下のようが得られたのではないでしょうか

100644 blob <blob_hash>    test.txt
040000 tree <subtree_hash> tests

タグの作成

# タグの作成
git tag -a v1.0 -m "Version 1.0 tag"

tagオブジェクトの確認

tag_hash=$(git rev-parse v1.0)

# タグオブジェクトを確認
git cat-file -p $tag_hash

出力として以下のようが得られたのではないでしょうか

object <commit_hash>
type commit
tag v1.0
tagger Your Name <your.email@example.com> 1733133967 +0900

Version 1.0 tag

参考

7
4
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
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?