LoginSignup
0
0

More than 3 years have passed since last update.

Gitの内部の動きを知ろう ~その3~

Posted at

目次

今回の確認内容

前回のコミットに対してtagをつけてみます。

git tag

以下のコマンドを実行します。

$ git tag -a v001 -m "first tag"

オブジェクトがどのように変わったかを見ていきます。
差分は以下の通りです。

├── .git
│   ├── objects
│   │   ├── 8b
│   │   │   └── e68ce70275726ea093eb5da6c1fe9c9566bd7e
│   └── refs
│       └── tags
│           └── v001

新しく追加されたオブジェクトの中身を見てみます。

$ git cat-file -t 8be68ce70275726ea093eb5da6c1fe9c9566bd7e
tag
$ git cat-file -p 8be68ce70275726ea093eb5da6c1fe9c9566bd7e
object 2deb1b0751cbfeffdc75683b2f61e476ef970640
type commit
tag v001
tagger Chapa <hoge@hoge.com> 1581461073 +0900

first tag

前回コミットした際にできたコミットオブジェクト(2deb1b0751cbfeffdc75683b2f61e476ef970640)とタグが紐づいていることがわかります。
試しに何もコミットしないでさらにタグを追加してみます。

$ git tag -a v002 -m "2nd tag, no changes"

差分は以下のようになりました。

├── .git
│   ├── objects
│   │   ├── ab
│   │   │   └── ca15c3e8b8f5db47539ad14551806eb2f57df4
│   └── refs
│       └── tags
│           └── v002

オブジェクトの中身を見てみます。

$ git cat-file -t abca15c3e8b8f5db47539ad14551806eb2f57df4
tag
$ git cat-file -p abca15c3e8b8f5db47539ad14551806eb2f57df4
object 2deb1b0751cbfeffdc75683b2f61e476ef970640
type commit
tag v002
tagger Chapa <hoge@hoge.com> 1581461574 +0900

2nd tag, no changes

新規にコミットをしていないので、v001と同じコミットオブジェクトが記載されています。
タグに関しては順序性がないので、「/refs/tags/」配下を見ても同列にv001とv002が存在し、タグオブジェクト以外に変更点はありません。

タグに対応するオブジェクトのハッシュ値は「/refs/tag/」配下のファイルを見るとわかります。

$ cat .git/refs/tags/v001
8be68ce70275726ea093eb5da6c1fe9c9566bd7e
$ cat .git/refs/tags/v002
abca15c3e8b8f5db47539ad14551806eb2f57df4

以下のgitのコマンドでも確認可能ですが、どこに何が作られるかを理解していると単純にcatでも情報が確認できます。

$ git rev-parse v001
8be68ce70275726ea093eb5da6c1fe9c9566bd7e
$ git rev-parse v002
abca15c3e8b8f5db47539ad14551806eb2f57df4

今回のおさらい

git tagを叩くと、どのコミットに対してどこにタグ情報やコミットとの関連が作られていくかがわかりました。意外とgitのコマンドがわからなくてもcatで必要な情報が見つかることもわかりました。

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