A couple of days ago, I was having the oddest issues fetching a SwiftPM package. The package resolution/version solving failed. I still don’t know why this was happening as my package was tagged as “0.1.0” at the time, as confirmed over at Github.
In any case, I found that removing the tag locally and remotely and retagging and re-pushing my tags resolved the issue. The package resolved correctly afterwards.
While I was at this, I decided to update my .gitconfig to add tagging aliases. Here’s what I came up with. They work but they’re not pretty and I’m sure there are better ways to approach this:
#### # Tagging retag = "!f(){ name=`git tag | tail -1`; \ git tag -d \"$name\"; echo "Retagged $name"; \ remote=`git remote -v`; \ if [ \"$remote\" != \"\" ]; \ then git push origin --delete \"$name\"; fi; \ git tag \"$name\"; \ if [ \"$remote\" != \"\" ]; \ then git push --tags; \ else echo "No remote"; fi; };f" untag = "!f(){ name=`git tag | tail -1`; git tag -d \"$name\"; \ remote=`git remote -v`; \ if [ \"$remote\" != \"\" ]; \ then git push origin --delete \"$name\"; \ else echo "No remote"; fi; };f" tagit = "!f(){ git tag \"$@\"; echo "Tagged $name";\ remote=`git remote -v`; \ if [ \"$remote\" != \"\" ]; \ then git push --tags; \ else echo "No remote"; fi; };f"
retag
, which solved my issue, grabs the name of the current tag, removes it, and retags locally and remotely. untag
removes the tag and tagit
adds a new tag to the current commit.
Feel free to suggest improvements.
p.s. If you’re looking for it, I took down the time machine rant post at the suggestion of several commenters.
2 Comments
Coincidentally, I ran into a similar issue just this morning. While investigating, I came upon the discussion section from the ‘git help tag’ command which pretty strongly suggests that you never re-tag but create a new tag instead. Personally, I’ve decided that’s the way to go.
I’ve read the help pretty thoroughly and that seems to be important advice for any item that has been published. I don’t believe that resetting the tag to an amended commit is a problem when there is no public release yet. On the contrary, I find it a way to prepare before a release.
What the help is saying that retagging after a release leaves clients in a potential state where they do not have access to your updates, bug fixes, etc, because they cannot detect that a change has been made to the release. In such cases, it is better to prepare a new release, allowing SwiftPM, brew, mint, etc to detect the update.