我不小心使用 'svn copy' 将 trunk 覆盖了一个旧分支。更具体地说,对于每个版本发布,都会分支 trunk 并将其作为标签保留,使用以下命令:
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 .
然后提交
svn co svn://machine/REPOS/tags/EXISTS_ALREADY/ EXISTS_ALREADY
,cd EXISTS_ALREADY
,svn merge -c -REVISION_OF_INCORRECT_CP .
,svn commit
。 - Chris Page