GitHubのtag機能についてまとめています。
GitHubのtagはコミットにタグ付けする機能
GitHubのtagは、コミットに対して名前(タグ名)をつけられるという機能です。実際には、タグ名にバージョン番号をつけ、「この時点でのコミットでバージョン1.0とする」というふうに、コミットにバージョン名をつける目的で使われているケースが多いようです。
以下はGoogleのりポジトリ・material-design-iconsです。Tagsのページではバージョン名をつけられたタグの一覧が表示され、それぞれのtagのNotes、zip形式やtar.tgz形式でのソースコードがダウンロードできるようになっています。
【関連記事】
▶GitHubのダウンロード zip形式やgit cloneでのリポジトリ複製
関連)Tags · google/material-design-icons
GitHubのtagの使い方
tagをつけるときは、特定のコミット名を指定します。
git tag -a <タグ名> -m '<コメント>' <コミット名>
コミット名は、git logコマンドで一覧を確認できます。以下は、コミット名と内容を1行表示するコマンドの例です。
$ git log --oneline b3f05bfbf4 (HEAD, tag: 4.0.0) Merge pull request #1055 from google/restructure 4ea68aa743 Add assets that existing in only a subset of the stylistic sets c0935ae74a Include icons that do not exist in all sets f69adfd4fe Add ability to fetch fonts 18e03aadb9 Add fonts c3b145e921 png, ios assets e577505fdb Add rules to fetch ios and png assets : :
以下のコマンドは、コミット名18e03aadb9に、タグ「testtag」をつけ、コメントに「this is test」を付与します。
$ git tag -a testtag -m 'this is test' 18e03aadb9
付与したタグは、git showにて内容の確認が可能。コミットの内容に加えて、tag付けをしたユーザの情報とtagのコメントが確認できます。
$ git show testtag tag testtag Tagger: user1 <user1@mydomain.com> Date: Wed Jun 23 06:53:19 2021 +0900 this is test commit 18e03aadb91dd655d1e43a5911d82d1d2eeacfd7 (tag: testtag, tag: show) Author: rsheeter <rsheeter@google.com> Date: Tue Aug 18 21:00:06 2020 -0700 :
コミットを指定せずにgit tagを実行すると、現在のブランチの最新のコミットに対して付与されます。
git tag -a タグ名 -m 'タグコメント'
-mを省略して、コメントなしでタグを付けることも可能。
git tag -a 4.1.0
その場合、ターミナルでテキストエディタが起動するので、メッセージを書き込み保存します。以下のように#の行が自動的に表示されるので、その下にコメントを記入して保存します。
# # Write a message for tag: # 4.1.0 # Lines starting with '#' will be ignored. バージョン4.1.0のタグです。
リポジトリ内で使用しているtagは、git tagで一覧表示できます。
$ git tag 1.0.0 1.0.0-pre 1.0.1 1.0.2 1.0.2b 2.0 2.0.0 2.1 2.1.1 2.2.0 2.2.1 2.2.2 2.2.3 3.0.0 3.0.1 3.0.2 4.0.0 v2.1.3
tagがあまりにも多い場合など、-lオプションでワイルドカード指定すると、tag名を絞り込み表示できます。
$ git tag -l '1.*' 1.0.0 1.0.0-pre 1.0.1 1.0.2 1.0.2b
tag 1.0.0のコミット内容を確認するには、以下を実行します。
$ git show 1.0.0 commit c4edaa75d05f23ae1bed7110fd3b9d5d26e828e5 (tag: 1.0.0) Author: Addy Osmani <addyosmani@gmail.com> Date: Fri Oct 17 12:10:30 2014 +0100 Link to stable & bleeding-edge releases diff --git a/README.md b/README.md index 175a84105b..2f4edb9d41 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ : :
付与したtagを削除するには、git tag -dを使用します。
$ git tag -d 4.1.0 Deleted tag '4.1.0' (was a1031c4e28)
tagを付与してから、pushすると、GitHubにタグ反映されます。特定のタグのみをpushすることも可能です。
// 特定のタグだけ git push origin [タグ名] // プッシュされていない全てのタグ git push origin --tags
tagが反映されると、zipでダウンロードできるようになります。また、git cloneの-bオプションでタグを指定し、特定のタグのクローンも可能です。以下は、google/material-design-iconsリポジトリのtag 4.0.0をクローンしている例です。
$ git clone https://github.com/google/material-design-icons.git -b 4.0.0 Cloning into 'material-design-icons'... remote: Enumerating objects: 873844, done. remote: Counting objects: 100% (2/2), done. remote: Compressing objects: 100% (2/2), done. remote: Total 873844 (delta 0), reused 1 (delta 0), pack-reused 873842 Receiving objects: 100% (873844/873844), 188.45 MiB | 2.74 MiB/s, done. Resolving deltas: 100% (108092/108092), done. Note: checking out 'b3f05bfbf4329a5b63f50a720f867c2bac163f98'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> Checking out files: 100% (316570/316570), done.
最新以外のtagを指定してgit cloneを実行すると、過去のコミットをチェックアウトした状態となり、You are in ‘detached HEAD’…というメッセージが出力されます。
関連)Git の ‘detached HEAD’ 状態とその注意点 – yu8mada
GitHubのtagのまとめ
- GitHubのtagは、指定したコミットに名前をつける機能
- 多くのリポジトリでは、tag名=バージョンとして使っているケースが多い
- tag名をつけたコミットは、zipやtar.tgzでのダウンロードのほか、tag指定してgit cloneが可能になる