如何撤销一个“svn copy”操作

16

我不小心使用 'svn copy' 将 trunk 覆盖了一个旧分支。更具体地说,对于每个版本发布,都会分支 trunk 并将其作为标签保留,使用以下命令:

svn copy svn://machine/REPOS/trunk svn://machine/REPOS/tags/$RELEASENR

但这一次'RELEASENR'的值是一个旧的已存在的分支,而不是一个新的分支。有没有任何想法可以撤销这个错误?感谢!

3个回答

18

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:\ 表示我将一行逻辑代码分成两行物理代码,以避免您的水平滚动条过度劳累。)


我怀疑如果他的程序对所有版本都是相同的,那么他实际上已经覆盖了EXIST_ALREADY目录中现有的主干。 - mouviciel
谢谢,这很有帮助。然而,我选择撤销cp并重新创建标签,因为提交消息也不正确(它包含了现有标签的名称而不是新标签的名称),并且我喜欢保持所有标签的更改历史记录统一和简单。要撤销cp:svn co svn://machine/REPOS/tags/EXISTS_ALREADY/ EXISTS_ALREADYcd EXISTS_ALREADYsvn merge -c -REVISION_OF_INCORRECT_CP .svn commit - Chris Page

5
为了撤销操作
svn cp OLDFOLDER NEWFOLDER

如果更改还没有提交,请直接使用以下方法:

svn revert NEWFOLDER --depth=infinity

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接