SVN Revert Trunk, remove a revision as if it never existed?

安稳与你 提交于 2019-12-18 18:59:19

问题


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 through svndumpfilter (excluding the bad path) into an svnadmin 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!