Skip to content

Instantly share code, notes, and snippets.

@cmittendorf
Created December 19, 2014 11:42
Show Gist options
  • Save cmittendorf/f00e377f1a56ab473db9 to your computer and use it in GitHub Desktop.
Save cmittendorf/f00e377f1a56ab473db9 to your computer and use it in GitHub Desktop.
Renames already pushed git tags to follow a folder structure staging/<version> or master/<version>.
#!/usr/bin/env ruby
#
# renames git tags
# 3.7.0.31-staging -> staging/3.7.0.31
# 3.7.0 -> master/3.7.0
#
# see http://blog.sidmitra.com/how-to-rename-a-tag-already-pushed-to-a-remot
#
# make sure that other repo users call
# pull --prune --tags
# on their checked out repository
#
def rename_tag(old, new)
puts "rename_tag: #{old} -> #{new}"
`git tag #{new} #{old} && git push --tags && git push origin :refs/tags/#{old} && git tag -d #{old}`
end
`git tag -l`.each_line do |tag|
oldTag = tag.chomp
newTag = oldTag.gsub(/\-.*?$/, "")
if oldTag =~ /^\d+\.\d+\.\d+\.\d+-staging$/ then
rename_tag(oldTag, "staging/#{newTag}")
elsif oldTag =~ /^\d+\.\d+\.\d+$/
rename_tag(oldTag, "master/#{newTag}")
else
puts tag
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment