tags:

views:

885

answers:

2

I've accidentally overwritten an old branch by copying trunk over it using 'svn copy'. More specifically, for every release, trunk is branched and kept as a tag, using:

svn copy svn://machine/REPOS/trunk svn://machine/REPOS/tags/$RELEASENR

But this time the value of 'RELEASENR' was that of an old existing branch instead of a new one. Anybody have any ideas on how to undo this mistake? Thanks already!

A: 

Make again your copy, this time with the correct tag. Then retrieve a previous revision of your existing tag and overwrite the incorrect revision. I don't remember the exact syntax for doing this but it can easily be found in svn book.

mouviciel
+5  A: 

Subversion doesn't work that way. You haven't actually overwritten it. If the target of the copy or a move exists and is a directory, then the copied or moved item is placed in that directory:

svn copy svn://machine/REPOS/trunk svn://machine/REPOS/tag/EXISTS_ALREADY

If you look, you should find:

svn://machine/REPOS/tag/EXISTS_ALREADY/trunk

Which is a copy of the trunk you just tried to tag. The fix in this case is easy:

svn mv svn://machine/REPOS/tag/EXISTS_ALREADY/trunk \
       svn://machine/REPOS/tag/CORRECT_TAG_NAME

(In case you're not *nix conversant: The \ means I've broken one logical line into two physical lines to spare your horizontal scrollbar from overwork.)

bendin
I suspect that if his procedure is identical for all releases, he has actually overwritten the existing trunk in EXIST_ALREADY directory.
mouviciel