git でリモートリポジトリからタグを1つだけ取得する

試した環境

本題

git でリモートリポジトリからタグを1つだけ取得するには以下のようなコマンドで行います。

git fetch --no-tags <remote_name> tag <tag_name>

ポイントはタグ名の前にtagと付けることと、--no-tagsオプションを付けることです。 例えばタグ名がv2.0だとして、git fetch --no-tags origin tag v2.0と実行すると以下のように出力されます。

From https://....
 * [new tag]         v2.0       -> v2.0

tagについて

tagがないとローカルにタグとして取得できません。 例えばタグ名がv3.0だとして、git fetch --no-tags origin v3.0と実行すると以下のように出力されます。

From https://....
 * tag               v3.0       -> FETCH_HEAD

この後git logなどで確認してもローカルリポジトリにタグが付いていないことが確認できると思います。

git-fetch のドキュメントに以下の記述があります。

git-scm.com

tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>; it requests fetching everything up to the given tag.

なので以下のコマンドも同様にローカルリポジトリにタグを取得できます。

git fetch --no-tags <remote_name> refs/tags/<tag_name>:refs/tags/<tag_name>
git fetch --no-tags <remote_name> <tag_name>:refs/tags/<tag_name>

--no-tagsオプションについて

--no-tagsオプションがないと、すべてのタグが取得されます。 例えばタグ名がv4.0だとして、git fetch origin tag v4.0と実行すると以下のように出力されます。

From https://....
 * [new tag]         v4.0       -> v4.0
 * [new tag]         v1.0       -> v1.0
 * [new tag]         v2.0       -> v2.0
 * [new tag]         v3.0       -> v3.0

git config remote.<name>.tagOpt--no-tagsに設定されている場合はコマンドに--no-tagsオプションは不要です。 例えばgit clone --no-tags <URL> などでクローンしたローカルリポジトリでは初めからそのような設定になります。

参考

https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt-ltrefspecgt

https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt---no-tags