When pushing a signed tag (or possibly any other tag object), the checked out tag ref points directly to the commit hash rather than the tag object.
Impact: unable to perform additional git commands as tree is out of sync.
Example workflow with issue
-
Create and push signed tag. Creates something like:
$ cat .git/refs/tags/v1.0.0
6d516f7003b7db4f2a6e3a15332f23afa3e4e7f9
$ git cat-file -t 6d516f7003b7db4f2a6e3a15332f23afa3e4e7f9
tag
$ git cat-file -p 6d516f7003b7db4f2a6e3a15332f23afa3e4e7f9
object 3f7352e5bd0ac4ad07bb64964d96b411a29d769b:refs
type commit
tag v1.0.0
tagger Author Name <author@company.example> 1638969265 +0000
-
Use checkout action during workflow running based on the tag push trigger:
"on":
push:
tags:
- v*.*.*
...
steps:
- name: Checkout Repo
uses: actions/checkout@v2
-
Source is fetched using a command such as:
/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +3f7352e5bd0ac4ad07bb64964d96b411a29d769b:refs/tags/v1.0.0
-
The tag is now out of sync with the remote. If a command tries to sync the tag it will fail e.g.
$ git fetch --prune --unshallow --tags
! [rejected] v1.0.0 -> v1.0.0 (would clobber existing tag)
$ cat .git/refs/tags/v1.0.0
3f7352e5bd0ac4ad07bb64964d96b411a29d769b
Note: this might in fact affect any tag which creates a tag object rather than a direct referent to the commit object.
When pushing a signed tag (or possibly any other tag object), the checked out tag ref points directly to the commit hash rather than the tag object.
Impact: unable to perform additional git commands as tree is out of sync.
Example workflow with issue
Create and push signed tag. Creates something like:
Use checkout action during workflow running based on the tag push trigger:
Source is fetched using a command such as:
The tag is now out of sync with the remote. If a command tries to sync the tag it will fail e.g.
Note: this might in fact affect any tag which creates a tag object rather than a direct referent to the commit object.