🏹

Gitコマンド入門::Gitオブジェクト(update-ref,TAG)第五十六回

2021/03/20に公開

みなさんこんにちは! 今回もGit本家のサイトを参考にして進めていきますね。
今回は、update-ref コマンドで前々回と同じですが、実際に操作するのは、タグです。ここまで何回か、git tag コマンドを取り扱ってきましたど、詳細な説明や学習はなかったと思いますので、合わせていろいろ試して行きましょう!

前回、第五十五回の記事はこちらから!

https://zenn.dev/shiozumi/articles/d28f7fa1faa9b5

git本家本元の情報はこちらから!

https://git-scm.com/book/ja/v2

今日の課題も前回同様、ここを参考にしています!

https://git-scm.com/book/ja/v2/Gitの内側-Gitの参照

10.3 Gitの内側 - Gitの参照

軽量 (lightweight) 版と、注釈付き (annotated) 版!

タグには2つのタイプがあり、簡易タイプと、注釈付きの通常タイプですね。
私の環境はこんな感じになっているので、514ff38 にまずは、簡易版のタグを作成してみますね。

$ git log --oneline
1e3f489 (HEAD -> test, origin/master, master) third commit
514ff38 second commit <!-- ここに簡易のタグ、v1.0
8cab88d first commit

git update-ref refs/tags/v1.0 514ff38

$ git update-ref refs/tags/v1.0 514ff38

$ cat .git/refs/tags/v1.0
514ff38588f46b1459da95dc7ce671d3209c440a
// refs/tags/v1.0 タグファイルが出来ました。
// ファイルの中身は、コミットのハッシュ値のみ

1e3f489 (HEAD -> test, origin/master, master) third commit
514ff38 (tag: v1.0) second commit <!-- ここに表示されました!
8cab88d first commit

まずは、軽量 (lightweight) 版のタグが作成されましたね! タグ名が、そのままファイル名になって、中身はいつものハッシュ値です。ということで、linuxコマンドのechoで強引に作ってみましょうか?(苦笑)

echo "514ff385~" > .git/refs/tags/v2.0

$ echo "514ff38588f46b1459da95dc7ce671d3209c440a" > .git/refs/tags/v2.0 
// 実際のハッシュ値は、40文字で設定してください!
// 省略すると、正常に動作しません。というかタグとして認識しないですね。

$ echo "514ff38588f46b1459da9" > .git/refs/tags/v2.0_short
// 実際に、20文字程度で作成してみます!

$ git tag
v1.0
v2.0
// v2.0_short は認識されていませんね。

$ find .git/refs/tags -type f
.git/refs/tags/v1.0
.git/refs/tags/v2.0
.git/refs/tags/v2.0_short // ファイルは作成されても!

$ cat .git/refs/tags/v2.0_short
514ff38588f46b1459da9 // 40文字を指定しないとダメですね。

// では、一度削除して、git tagコマンドで作成すると!
$ rm .git/refs/tags/v2.0_short
$ git tag v2.0_short 514ff385

$ git tag
v1.0
v2.0
v2.0_short // <!-- ちゃんと、作成されています!

$ cat .git/refs/tags/v2.0_short
514ff38588f46b1459da95dc7ce671d3209c440a
// 中身は、40文字のハッシュ値です。
// git側で、しっかり補記してくれるんですね。

$ git log --oneline
1e3f489 (HEAD -> test, origin/master, master) third commit
514ff38 (tag: v2.0_short, tag: v2.0, tag: v1.0) second commit
8cab88d first commit

// ローカルtestブランチも確認!
$ git log --oneline test
1e3f489 (HEAD -> test, origin/master, master) third commit
514ff38 (tag: v2.0_short, tag: v2.0, tag: v1.0) second commit
8cab88d first commit

ぐだらない実験も同時にやってみましたけど、みなさんは、いかがでしょうか?
毎度の事ですが、細かいところまで突っ込んでいくと、これが不思議と、タグについて詳しくなった気がしますよね~ ほんと、どうでもよい仕様確認ですけど・・・(苦笑)

今回のまとめ

軽量 (lightweight) 版、簡易版のタグは、ほんとシンプルなテキストファイルと、その中身はいつものハッシュ値ですね。git で普段、ブランチとかタグを扱っていると、なんだか敷居が高いイメージを持つのですが、ほんと只の妄想でしたね。実際は、とても単純な仕組み、それを一度でも知ってしまうと、胸も、す~っとして気持が落ち着きます!

それでは、今回はここまで、お疲れ様でした!

https://zenn.dev/shiozumi/articles/fa5f83189514ce
https://twitter.com/esmile2013

Discussion