4

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

我有一个项目的第 8 版和更高版本的 11 版。在 11 之前,这是一个简单的过程,但现在我必须跳回到第 8 版,顺便说一下,从那开始。我已经制作了 rev8 的工作副本,并进行了一些更改。

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

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

4

6 回答 6

3
svn merge -r11:8 path/

将“还原”从 8 到 11 所做的所有更改。

于 2012-06-19T22:09:26.710 回答
2

首先,让我们对最近的更改进行分支。我喜欢使用完整的 URL 进行分支:

$ 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
于 2012-06-20T02:00:33.023 回答
1
  1. 检查头部修订
  2. 打开日志
  3. 右键单击要成为新负责人的修订版
  4. 点击“恢复到这个版本”
  5. 犯罪
于 2012-06-20T12:47:35.283 回答
0
  1. 结帐后备箱。

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

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

  4. 犯罪。

(5. 如果 trunk 有其他文件不在 r8 中,您需要手动“svn remove”这些文件)。

正如您可能推测的那样,这并不是真正的“倒带”。相反,磁带继续前进,但如果你这样做,r12 会巧合地看起来与 r8 完全一样。:-)

于 2012-06-19T22:06:52.720 回答
0

要从给定的修订创建分支,只需选择“合并/分支...”,然后选中单选按钮“存储库中的特定修订”并输入修订号 (11)

要将主干恢复到修订版 8 中的状态,请选择“显示日志...”,然后选择要回滚到的修订版 (8),右键单击,然后选择“恢复到此修订版”。然后提交。这将创建一个与版本 8 相同的附加版本 (13)。

确保不要将修订版 13 合并到您从修订版 11 创建的分支中,因为它也会回滚分支中的更改。为确保它不会发生,请将修订版 13 从主干合并到分支中,但选中“仅记录合并”复选框(IIRC)

于 2012-06-19T22:17:05.013 回答
0

这里有不同的信息,因此有答案(但@David_W、@maxim1000 和@Wrikken 的答案有助于完成这项工作)。

很多人偶然发现的是,Subversion 只允许在每个分支的头部工作。这不是一个但是,而是一个特征。因此,不可能改写历史,并且您可以放心,没有人会改变历史。

这就是为什么您必须执行(抽象)步骤的原因:

  1. 在本地签出当前版本。
  2. 在您的本地副本上执行反向补丁(这意味着 r8 到 r11 以相反的顺序)。
  3. 提交这些更改,以便工作副本的新内容(与修订版 8 完全相同)将进入 HEAD。
于 2012-07-01T11:38:12.247 回答