如何在svn中正确分支后提交并恢复中继?

时间:2008-09-29 14:27:36

标签: svn branch

我做了一些我已经决定的提交,事实上,这将是更多的分支工作然后干线工作。如何创建分支并恢复主干,同时确保合并后期不痛苦?

是否像将当前中继复制到分支并恢复中继一样简单?或者这会在以后产生麻烦吗?

4 个答案:

答案 0 :(得分:18)

我认为飞利浦方法将如下所示,假设最后一次“良好”修订为100,你现在为130,创建新分支:

svn copy -r100 svn://repos/trunk svn://repos/branches/newbranch
svn merge -r 100:130 svn://repos/trunk svn://repos/branches/newbranch

请注意,这个想法是保留在这些修订中所做的更改,以便您可以将它们应用回主干。

要还原主干:

svn merge -r130:100 .
svn ci -m 'reverting to r100 (undoing changes in r100-130)' . 

(您执行这些操作的顺序无关紧要,因此您可以在创建分支之前恢复主干。)

然后你可以切换到你在repo中创建的新分支:

svn switch svn://repos/branches/newbranch workdir

答案 1 :(得分:3)

说实话,我复制我的更改,还原主干,分支,然后将我的更改提交到分支。以后容易合并的主要原因(如果您稍后从分支点合并到分支点的分支,合并将包含您的初始更改的恢复)。

这可能不是“正确”的方式,因为你可以在合并时总是跳过修订,但对我来说通常不那么令人头疼。免责声明:我不是svn guru,所以对我来说可能更容易,因为我做错了 - 但我确实使用了很多svn。

答案 2 :(得分:2)

遵循菲利普的方法并没有错,除了它在修订历史中留下了一些“残余”。如果你想为了整洁而删除它们,并且修订版在HEAD,你可以按照these instructions将它们从存储库中删除。

更新:菲利普的方法比问题中提出的方法更好,原因是他说的。我和菲利普的方法是类似的,除了恢复后备箱,我建议从修订历史中删除修订。 (正如我所说,只有当您要删除的所有修订都位于存储库的HEAD时才能执行此操作。)

答案 3 :(得分:0)

我这里没有可用的svn,但这是我尝试这样做的方法:

确定您开始提交不良内容的历史记录(当您处于“130”时,将修订版“100”称为

svn copy trunk branch # create your branch while preserving history
svn copy trunk@100 trunk #replace current revision with revision 100  

这应该绕过糟糕的历史记录而不添加反向合并(实际上你绕过了100到130之间的中继历史记录,但你在分支中保留了一个链接到该历史记录的链接并访问主干,同时强制转换仍然会产生正确的历史)

然后

svn switch branch workdir

如果要从trunk中完全删除更改,这应该可行。如果你想保留小的,你可以从分支到主干再次挑选它们(如果你使用svn 1.5它将跟踪合并点并避免虚假冲突)