我是SVN的新手,我对一个问题很困惑。我正在使用Tortoise SVN。
我有一个项目的第8版和后来第11版。直到11,这是一个简单的过程,但现在我必须跳回到第8版,它被标记为方式并从中计数。我已经制作了rev8的工作副本,并进行了一些更改。
如何将trunk的“tape”倒带到rev8,并创建最近trunk的分支,并在rev8上提交我的更改,以便结果成为trunk?
所有文档都写了关于分支和标记的无穷无尽的页面 - 存储库中的实际顶级版本 - 但不是过去修订版本中的这些操作。
答案 0 :(得分:3)
svn merge -r11:8 path/
将'恢复'从8到11的所有更改。
答案 1 :(得分:2)
首先,让我们分析最近的变化。我喜欢使用完整的网址进行分支:
$ svn cp svn://localhost/trunk svn://localhost/branches/foo #Creating branch foo
现在,我们可以删除9之后的更改:
$ svn merge -rHEAD:8 .
请注意,我没有必要指定用于修订版8的标记。这是因为版本号非常适合用作标记。我通常只标记有趣的修订版本 - 不在开发之外的修订版本,或者我认为可能在以后出于某种原因重要的修订版本。
顺便说一下。我也可以按相反的顺序做事:$ svn merge -r11:8 . #Remove changes 9 through 11
$ svn commit -m "Removing yucky stuff" #Creates revision #12
糟糕!我应该有分支修订版11!我们现在就做:
$ svn copy -r11 . svn://localhost/branches/foo #Revision #11 is now branch "foo"
如果你更喜欢完整的URL:
$ svn copy -r11 svn://localhost/trunk@11 svn://localhost/branches/foo
答案 2 :(得分:1)
答案 3 :(得分:0)
Checkout trunk。
在不同的目录中导出r8(svn export)。这样就避免了“.svn”元目录。
将所有r8文件复制到trunk。
提交。
(5.如果trunk有其他文件不在r8中,你需要手动“svn删除”。
正如你可能猜测的那样,这并不是“倒带”。相反,磁带继续前进,但如果你这样做,r12将巧合地看起来像r8。 : - )
答案 4 :(得分:0)
要从给定修订创建分支,只需选择“merge / branch ...”,然后选中单选按钮“存储库中的特定修订”并输入修订号(11)
要使主干恢复到版本8中的状态,请选择“显示日志...”,然后选择要回滚到的修订版本(8),右键单击,然后选择“还原为此修订版”。然后提交。这将创建一个额外的修订版(13),它与修订版8相同。
确保不将修订版13合并到您从revisoon 11创建的分支中,因为它还会回滚分支中的更改。为确保不会发生这种情况,请将版本13从主干合并到分支中,但选中“仅记录合并”复选框(IIRC)
答案 5 :(得分:0)
这里有不同的信息,因此答案(但@David_W,@ maxim1000和@Wrikken的答案有助于完成这项工作)。
很多人偶然发现,Subversion只允许在每个分支的头部工作。这不是一个但是一个特征。因此,不可能重写历史,没有人会改变历史,你是安全的。
这就是为什么你必须做(抽象的)步骤的原因: