我不小心用'svn copy'复制主干覆盖了一个旧分支。更具体地说,对于每个版本,主干都会分支并作为标签保存,使用:
svn copy svn://machine/REPOS/trunk svn://machine/REPOS/tags/$RELEASENR
但这一次,'RELEASENR' 的值是旧的现有分支而不是新分支的值。有人对如何撤消这个错误有任何想法吗?已经谢谢了!
Subversion 不是这样工作的。你实际上并没有覆盖它。如果复制或移动的目标存在并且是目录,则复制或移动的项目将放置在该目录中:
svn copy svn://machine/REPOS/trunk svn://machine/REPOS/tags/EXISTS_ALREADY
如果你看,你应该会发现:
svn://machine/REPOS/tags/EXISTS_ALREADY/trunk
这是您刚刚尝试标记的主干的副本。这种情况下的修复很简单:
svn mv svn://machine/REPOS/tags/EXISTS_ALREADY/trunk \
svn://machine/REPOS/tags/CORRECT_TAG_NAME
(如果您不熟悉 *nix:\ 表示我已将一条逻辑线分成两条物理线,以免水平滚动条过度劳累。)
为了撤消
svn cp OLDFOLDER NEWFOLDER
如果更改尚未提交,只需使用
svn revert NEWFOLDER --depth=infinity
您可以通过合并回上一个版本来撤消上一个版本。见http://anilsaldhana.blogspot.com/2007/11/svn-undo-change.html
svn merge --revision 92:91 .
然后提交