Git treats tags as being globally unique, ie. refs/tags
is a common namespace regardless of where the tag came from (unlike branches, which are namespaced as refs/remotes/[the origin]/*
). This has to do with the traditional way of verifying them (which btw includes the tagās name, which is part of the object headers).
link
permits to replicate tag refs in a namespaced manner, that is they end up under refs/remotes/xyz/tags
. That, however, means that clients need to be careful to not confuse git when creating project checkouts: if the tags stay namespaced, git will not consider them as being tags (eg. for git-tag -l
, or when decorating git-log
output). If they do not stay namespaced, the workflow described above is unlikely to work, because the maintainer tags will conflict.
Also consider that the project may be published to some traditional mirror (eg. Jit-Hub), so at the end of the day the must be a single release tag (under refs/tags
).
So thatās a multisig problem, which is fairly awkward to solve when you donāt have a timestamping service. Essentially, a proposal would need to be published, which then is signed by the eligible keys, and ultimately āfinalizedā into the published release tag (which in turn contains a proof of those signatures).
This kind of thing can be implemented using collaborative objects, from which a tag can be synthesized (although the tag itself will still be signed by only a single key).