问题
Is it possible in the svn server to remove a revision as if it never existed?
So we have the following revisions:
1004 // Commit of some bogus code that broke the build and was just wrong
1003 // Change 1.2
1002 // Change 1.1
1001
1000 *** Initial checkin
Can we we remove the 1004 in svn and revert back to 1003 as if 1004 never existed?
Forgive my ignorance, I'm still learning how to use SVN.
回答1:
VCS systems are designed specifically to make this as complicated as possible. You usually do not want to do this.
That being said, from the official documentation:
There are special cases where you might want to destroy all evidence of a file or commit. (Perhaps somebody accidentally committed a confidential document.) This isn't so easy, because Subversion is deliberately designed to never lose information. Revisions are immutable trees which build upon one another. Removing a revision from history would cause a domino effect, creating chaos in all subsequent revisions and possibly invalidating all working copies.
The project has plans, however, to someday implement an
svnadmin obliterate
command which would accomplish the task of permanently deleting information. (See issue 516.)In the meantime, your only recourse is to
svnadmin dump
your repository, then pipe the dumpfile throughsvndumpfilter
(excluding the bad path) into ansvnadmin load
command. See chapter 5 of the Subversion book for details about this.
http://subversion.apache.org/faq.html#removal
回答2:
These accidents hapen, and it's not a problem if SVN keeps them in its history. What is important is to fix the accident. The way to do it is to revert the changes made by this commit. use the following commands:
svn merge -r [current_version]:[previous_version] [repository_url]
svn commit -m “Reverting previous commit and going back to revision [previous_version].”
If you're using TortoiseSVN, you could just show the logs, select the commit, and choose "Revert changes from this revision" in the context menu. It will change your working copy to the previous version, and you'll just have to commit.
I guess other graphical clients have the same option.
回答3:
You can move the trunk to another branch (backup) and copy the correct revision back to trunk
svn mv trunk https://svn_path/tags/trunk_broken
svn cp -r revNo http://svn_path/tags/trunk_broken http://svn_path/trunk
Please note the revision number will increment and all changes will be displayed in svn log.
回答4:
You can create a dump of the current repository and skip the bogus Revision in the dump. You can then load the dump to a new repository on the same server or on a different one.
回答5:
I recommend leaving the revision if you don't have a real reason (Shortage in space for example) to remove it. This is the main job of the SVN server, to keeps changes.
来源:https://stackoverflow.com/questions/7202453/svn-revert-trunk-remove-a-revision-as-if-it-never-existed