You don't need to run this on the mono/, moon/, and monodevelop/ trees. It's already been run on those trees. You'll just need to refresh your tags.
The following shell script will generate the list of tags which share the same name as a remote branch, and offer an alternative name. The output is actually a shell script that you can edit and run to actually perform the changes.
cd /path/to/checkout bash ~/bin/fixup-tags.sh > fixer-upper # edit the set of tag renames vi fixer-upper # dry run that lists the set of git commands executed sh fixer-upper # once you're satisfied, you can say RUN_GIT=git sh fixer-upper
And here's the script fixup-tags.sh:
#! /bin/bash cat <<\EOF #! /bin/bash set -e : ${RUN_GIT:=echo git} new_tags= old_tags= rename_tag() { $RUN_GIT tag $2 refs/tags/$1 && { old_tags="$old_tags refs/tags/$1" new_tags="$new_tags refs/tags/$2" } } EOF git for-each-ref refs/remotes/origin/ | while read sha type branch; do j=${branch##refs/remotes/origin/} git rev-parse --verify "refs/tags/$j" > /dev/null 2>&1 || continue k=$(echo $j | tr '/' '-' | sed -e 's,\([0-9]\)-,\1.,g') if test "$j" = "$k"; then echo "rename_tag $j tag-$j" else echo "rename_tag $j $k" fi done cat <<\EOF test -z "$new_tags" || $RUN_GIT push origin $new_tags test -z "$old_tags" || $RUN_GIT push origin --delete $old_tags for i in $old_tags; do $RUN_GIT tag -d ${i##refs/tags/} done EOF