Git, タグを別名でフェッチする

動機

複数のremoteを設定したリポジトリがある。

$ git remote
origin
library-a

git fetchのデフォルトだとタグも取得する。ところでタグの名前空間はどこからfetchするかによらず同じだ

$ git tag
my_tag

$ git fetch library-a
   # library-aのタグが取得されrefs/tags/*へ
$ git tag
v1.0
v2.0
v2.1
v2.2
:
:
my_tag

ノーグッド。わかりにくいし、リモートが多数になると衝突しかねない。タグの名前空間を分けたい。
library-aのタグは library-a/v1.0 とかでアクセスできるようになるといいですね。

方法

git fetchに--no-tagsオプションを付けることでタグを取得しないことができる

$ git fetch --no-tags library-a
   # タグ以外のものを取得

その後、場所を明示的に指定してタグだけもってくる

$ git fetch --no-tags library-a refs/tags/*:refs/tags/library-a/*
    # リモートのタグをローカルに転送。その際プレフィクス library-a/ をつける
$ git tag
library-a/v1.0
library-a/v2.0
:
:
my_tag

グッド。