如何正确分支后提交并还原svn中的中继?

时间:2020-03-06 14:52:36  来源:igfitidea点击:

实际上,我已经决定要进行一些提交,而更多的是分支工作,而不是主干工作。如何创建分支并还原主干,同时又确保以后合并不会麻烦呢?

就像将当前中继复制到分支并还原中继一样简单吗?还是会在以后引起头痛?

解决方案

遵循Philip的方法没有什么问题,除了它在修订历史记录中留下了一些"草皮"。如果我们想删除它们是为了使内容整洁,并且修订版位于HEAD,则可以按照以下说明从存储库中删除它们。

更新:菲利普的方法比问题中提出的方法要好,原因是他所说的。 Mine和Philip的方法类似,只是我打算将主干从修订历史记录中删除,这是出于还原主干的目的。 (正如我说的,只有当我们要删除的所有修订都在存储库的HEAD上时,才可以这样做。)

老实说,我将更改复制下来,还原主干,分支,然后将更改提交到分支。主要原因是以后易于合并(如果我们以后在分支点从主干合并到分支,则合并将包含初始更改的还原)。

这可能不是"正确"的方法,因为我们可以在合并时始终跳过修订,但是通常以后对我来说就不那么令人头疼了。免责声明:我不是svn专家,所以对我来说可能更容易,因为我做错了,但是我确实大量使用了svn。

我这里没有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之间的历史记录,但是我们在分支中保留了该历史记录的链接并访问了主干记录,同时强制rev仍会产生正确的历史记录)

然后

svn switch branch workdir

如果我们要从中继中完全删除更改,则此方法应该起作用。如果要保留小文件,可以从分支到主干再次选择它们(如果使用svn 1.5,它将跟踪合并点并避免虚假冲突)

我认为Philips的方法将类似于以下内容,假设最近的"好"修订版本为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)' .

(执行这些命令的顺序无关紧要,因此我们可以在创建分支之前还原中继。)

然后,我们可以切换到我们在存储库中创建的新分支:

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