如何重新应用已回滚到先前版本的变更集?当然我会使用另一个与所需修订版本合并,但命令似乎是无操作 - 没有任何内容合并,并且svn status
在合并后没有显示任何更改。我发现这样做的唯一方法是使用--ignore-ancestry
选项,但它似乎不正确。
我尝试做的是以下内容:
1000
trunk
然后在分支WC中执行500
来branches/rollback
回滚到修订版svn merge -r HEAD:500 .
700
的变更集,我们尝试通过执行svn merge -c 700 ^/trunk .
来完成这一变更集,但这不起作用(实际上:什么都不做)--ignore-ancestry
选项添加到上一个命令中,它会执行我们想要的操作,但感觉不对。trunk
以使其处于所需状态:修订501-1000,重新应用修订版700. 有什么想法吗?
答案 0 :(得分:5)
- 存储库位于修订版1000
- 我们首先通过创建分支分支/回滚然后执行svn merge -r HEAD:500来回滚到版本500。在分行WC
好的,我在这里不懂东西。为什么不简单:
$ svn cp -r500 $REPO/trunk@500 $REPO/branches/rollback
这将创建rollback
分支的版本,该版本与trunk的版本500匹配。
- 之后我们想重新应用修订版700的变更集,我们试图通过执行
svn merge -c 700 ^/trunk
来完成这一变更,但这样做不起作用(实际上:什么都不做)
如果您在回滚分支的工作副本上执行此操作:
$ svn merge -c 700
如果在您的分支工作副本中包含修订版700。这不起作用的原因是svn:mergeinfo
表示修订版700已经在回滚分支中,因此Subversion不会重新应用它。 svn:mergeinfo
不受反向合并的影响,因此修订501到1000的回滚不会影响svn:mergeinfo
。
- 如果我们将--ignore-ancestry选项添加到上一个命令,它会按我们的意愿执行,但感觉不对。
以下是Subversion书中关于--ignore-ancestry
的内容:
--ignore-ancestry选项可以防止合并跟踪,从而忽略mergeinfo,既不考虑也不记录它。
因此,当您使用--ignore-ancestry
时,Subversion会合并修订版700,无论它是否已应用。
- 之后,我们会将分支重新集成到主干中,使其处于所需状态:修订版501-1000回滚,修订版700重新应用。
我不确定重返社会会在这一点上做什么。 集成没有任何内容,因为回滚分支本身没有真正的变化。回滚分支上的所有更改都是在主干中发生的更改。
重要的是,重新整合将进行双向合并,这将迫使主干与分支匹配。但是,Subversion版本1.6或1.7中已经弃用了重新集成(我忘记了)。您尝试使用--reintegration
开关,Subversion会抱怨。我不能说Subversion在这种情况下会做什么。
如果你只想回滚trunk,rollback trunk:
$ svn co $REPO/trunk
$ cd trunk
$ svn merge -r1000:701 . # Rolls back revisions 701 to 1000
$ svn merge -r699:500 . # Rolls back revisions 500 to 699
$ svn commit -m" Removed all changes since Rev 500 except 700"
您可以自动执行此操作,并分别回滚和提交每个修订。这样,如果您决定重新应用某个更改,您可以反向合并执行原始反向合并的反向合并修订,并且... ...好的,一个示例:
for revision in {1000..500}
do
[[ $revision -eq 700 ]] && continue # Skip Revision #700
svn merge -c -$revision
svn commit -m "Backing out Revision $revision"
done
假设您已决定现在要将修订版823包含在主干中。您执行svn log
并查看:
------------------------------------------------------------------------
r1230 | mike | ......
Backing out Revision 823
您现在知道修订版1230已在您的仓库中退出了修订版823。所以......
$ svn merge -c -1230
这将删除修订版1230所做的更改 - 这是对版本823的修订。因此,在您提交更改后,修订版823现在又回到了回购中。
您可以编辑svn:mergeinfo
以使用正确的修订范围对其进行修复。但是,不强烈建议手动修改此属性。一个错误,您的合并历史将不再有效。
通常情况下,如果我们发现我们已经把所有事情搞糟了,我们只需要制作一个分支并使用它。
答案 1 :(得分:1)
你至少某些方式在just-trunk中有单独的分支和1路需要的结果
分行方式
自然方式
在单个命令中反向合并两个范围(跳过rev.700)在trunk
中