在SVN中及时跳回

时间:2012-06-19 22:02:46

标签: svn version-control tortoisesvn branch

我是SVN的新手,我对一个问题很困惑。我正在使用Tortoise SVN。

我有一个项目的第8版和后来第11版。直到11,这是一个简单的过程,但现在我必须跳回到第8版,它被标记为方式并从中计数。我已经制作了rev8的工作副本,并进行了一些更改。

如何将trunk的“tape”倒带到rev8,并创建最近trunk的分支,并在rev8上提交我的更改,以便结果成为trunk?

所有文档都写了关于分支和标记的无穷无尽的页面 - 存储库中的实际顶级版本 - 但不是过去修订版本中的这些操作。

6 个答案:

答案 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)

  1. 查看头部修订
  2. 打开日志
  3. 右键单击要成为新头的修订
  4. 点击“还原到此修订版”
  5. 提交

答案 3 :(得分:0)

  1. Checkout trunk。

  2. 在不同的目录中导出r8(svn export)。这样就避免了“.svn”元目录。

  3. 将所有r8文件复制到trunk。

  4. 提交。

  5. (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只允许在每个分支的头部工作。这不是一个但是一个特征。因此,不可能重写历史,没有人会改变历史,你是安全的。

这就是为什么你必须做(抽象的)步骤的原因:

  1. 在本地查看当前版本。
  2. 在本地副本上执行反向修补(即以相反顺序执行r8到r11)。
  3. 提交这些更改,以便工作副本的新内容(与修订版8完全相同)将转到HEAD。