如何在将分支合并回主干时避免SVN冲突

如何在将分支合并回主干时避免SVN冲突,svn,merge,branch,Svn,Merge,Branch,几周前,我开始对我的SVN存储库的主干进行更改,我认为这将是相当小的更改 经过几个小时的工作,意识到更改的影响比我想象的更大,我决定立即将更改检查到主干中风险太大,因此我创建了一个分支,如下所示: svn copy . https://my_svn_server/svn/blah/branches/my-branch 。。。然后做了一个svn转换,并愉快地继续在那个分支工作。到目前为止,一切都很好,直到我对所有的更改感到满意,并希望将它们重新合并到主干中。因此,我将所有更改都签入到我的分支中,

几周前,我开始对我的SVN存储库的主干进行更改,我认为这将是相当小的更改

经过几个小时的工作,意识到更改的影响比我想象的更大,我决定立即将更改检查到主干中风险太大,因此我创建了一个分支,如下所示:

svn copy . https://my_svn_server/svn/blah/branches/my-branch
。。。然后做了一个svn转换,并愉快地继续在那个分支工作。到目前为止,一切都很好,直到我对所有的更改感到满意,并希望将它们重新合并到主干中。因此,我将所有更改都签入到我的分支中,然后仔细地遵循所示的过程。。。这就是我遇到麻烦的地方。因为我从本地(客户端)存储库创建了分支,该存储库中已经有大量(未签入)未完成的更改,所以合并不包括与这些更改对应的差异,因此,在合并过程中有很多很多冲突,我必须手工解决——我不想这样做,因为如果我把它搞砸了,它会给bug留下潜入的空间

我试图通过减少合并过程中指定的修订号(例如,通过执行

svn merge -r2818:2932 https://my_svn_server/svn/blah/branches/my-branch
而不是预期的

svn merge -r2819:2932 https://my_svn_server/svn/blah/branches/my-branch
…但这不起作用,因为我的分支在修订版2818中不存在,所以我得到了一个错误:

svn: Unable to find repository location for 'https://my_svn_server/svn/blah/branches/my-branch' in revision 2818
这就是事情的现状。这一次我可以手动清理这些乱七八糟的东西,但我很好奇是否有办法处理这些事情,以便下次我能做得更好

我能想到的一种方法是创建分支,不是复制本地(客户端)respository,而是复制SVN中继头,然后将我的分支签出到单独的目录中,然后手动将我的本地(未签入)更改从中继目录复制到我的分支目录,然后直接还原本地主干。。。但这相当乏味,而且容易出错


当然,有一种更好、更自动的方法来创建包含本地(未签入)更改的分支,然后再将其合并回主干?

您的最后一个建议就快到了。当您要分支时,复制主干标头。然后在你的工作副本中

svn switch https://my_svn_server/svn/blah/branches/my-branch

这将切换到分支,同时保留所有本地修改。然后,您可以随时将更改提交到分支

好吧,我想我已经想出了如何干净地进行合并的方法(有趣的是,如何撰写一个问题往往能澄清问题,不是吗?)。解决方案是进行两次合并,一次是考虑主分支(原样)和我的分支开始之间的差异,然后进行第二次合并,考虑我的分支中随后所做的更改:

svn merge https://my_svn_server/svn/blah/trunk/software@2818 https://my_svn_server/svnblah/branches/my-branch@2819
svn merge -r2819:2932 https://my_svn_server/svn/blah/branches/my-branch

酷,我没想到svn开关会保留我的本地编辑。这就是我所缺少的:^)我的回答是在假设主干头部与新分支头部相同的情况下做出的。我不保证它会成功地保留您的本地编辑,如果您在主干中有一些冲突的其他更改。