Just to clarify: When you say they would add/commit, you mean they didn't do an svn copy of the old version to the new version name, correct? Based on assuming I understood that correctly...
Is it possible? Yes, but not in place, and not easily.
The way I would approach this would be to write a script that would essentially replay the commits the way you want them done, dump the new repo to an svn dumpfile, tweak the dumpfile using svndumptool.py and probably a bit of custom scripting to set dates and authors and such.
You may be able to get svn to help you out some. Try this approach:
Make a copy of your repository so you can work with that and not make a mess for others. Then, in that repository, create /project
/project/trunk
, /project/tags
and /project/branches
directories. Checkout project/trunk. Use svn export
to get rev 1 of your 1.0.0 version into your trunk working copy. Grab the original commit message using svn log --xml
, use svn add
to add all the files, and commit. That gives you your original starting point.
Now, for every commit made to your /version/1.0.0
, merge that changeset into your new trunk, extract the commit message using svn log --xml
, and commit.
Once you run out of commits to 1.0.0, do an svn copy
from trunk
to tags/1.0.0
. Then use svn merge --ignore-ancestry .../version/1.0.0 .../version/1.0.1@xyz
(where xyz is the first commit of the 1.0.1 version). This should get you any changes that happened as part of your release process. (You may need to experiment a bit to get this just right.)
Repeat that process for each of your remaining versions.
Once you are done with that, you have a repository with a better history under /project
, but still have the old ugly history under /versions
. To clean that out, use svn dump project
to create a dumpfile containing just the new history. Now you'll have to do a bit of custom scripting and probably use svndumptool.py
liberally to fixup the commit timestamps and authors in the dumpfile, pulling that information from the svn log --xml
output. You may need to "invent" this information for the tagging commits you did.
Finally, use svn load
to import that dumpfile into a new repository. Verify that all your new, glorious history looks sane, and then use your new repository going forward.
(Oh, and you get bonus points if you set the commit timestamp of your initial svn mkdir /project /project/trunk /project/tags /project/branches
to 1984. ;) )
Disclosure: I've contributed to svndumptool.py