【问题标题】:How to undo an 'svn copy'如何撤消“svn 副本”
【发布时间】:2010-10-18 00:06:54
【问题描述】:

我不小心使用“svn copy”将主干复制覆盖了旧分支。更具体地说,对于每个版本,主干都会被分支并作为标签保存,使用:

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

但这一次“RELEASENR”的值是旧的现有分支而不是新分支的值。有人对如何撤消这个错误有任何想法吗?已经谢谢了!

【问题讨论】:

    标签: svn copy undo


    【解决方案1】:

    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 目录中的现有主干。
    • 谢谢,这很有帮助。但是,我选择撤消 cp 并重新创建标签,因为提交消息也不正确(它包含现有标签的名称而不是新标签的名称)并且因为我喜欢保持更改历史的统一所有标签都很简单。要撤消 cp:svn co svn://machine/REPOS/tags/EXISTS_ALREADY/ EXISTS_ALREADYcd EXISTS_ALREADYsvn merge -c -REVISION_OF_INCORRECT_CP .svn commit
    【解决方案2】:

    为了撤消

    svn cp OLDFOLDER NEWFOLDER
    

    如果更改尚未提交,只需使用

    svn revert NEWFOLDER --depth=infinity
    

    【讨论】:

      【解决方案3】:

      您可以通过合并回上一个版本来撤消上一个版本。 见http://anilsaldhana.blogspot.com/2007/11/svn-undo-change.html

      svn merge --revision 92:91 .
      

      然后提交

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 2012-08-04
        • 2018-11-16
        • 2011-03-26
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多