目次
今回の確認内容
前回のコミットに対して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で必要な情報が見つかることもわかりました。