几周前,我开始对我的 SVN 存储库的主干进行更改,我认为这将是相当小的更改。
经过几个小时的工作,意识到更改的影响比我想象的要大,我认为立即将更改检查到主干中风险太大,所以我创建了一个分支,如下所示:
svn copy . https://my_svn_server/svn/blah/branches/my-branch
...然后做了一个 svn switch 并愉快地继续在那个分支工作。到目前为止,一切都很好,直到我对所有更改感到满意并希望再次将它们合并回后备箱。因此,我将所有更改都 checkin my-branch,然后仔细按照 here 所示的程序进行操作……这就是我遇到麻烦的地方。因为我从本地(客户端)存储库创建了 my-branch,其中已经有大量(未 checkin )未完成的更改,所以合并不包括与这些更改对应的差异,因此有合并中有很多冲突,我必须手动解决——这是我不想做的事情,因为如果我搞砸了,它会给错误留下空间。
我尝试通过减少我在合并期间指定的修订号来包含丢失的差异,例如通过做一个
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
...但这不起作用,因为 my-branch 在修订版 2818 中不存在,所以我得到了一个错误:
svn: Unable to find repository location for 'https://my_svn_server/svn/blah/branches/my-branch' in revision 2818
所以这就是事情的立场。这次我可以手动整理困惑,但我很好奇是否有办法处理这个问题,以便下次我的事情变得更好。
我能想到的一种方法是创建 my-branch,而不是通过复制本地(客户端)存储库,而是通过制作 SVN 主干 HEAD 的副本,然后将 my-branch checkout 到一个单独的目录中,然后手动将我的本地(未 checkin )更改从主干目录复制到 my-branch 目录,然后直接恢复本地主干……但这也非常乏味且容易出错。
肯定有更好、更自动的方法来创建包含本地(未 checkin )更改的分支,然后将其合并回主干?
最佳答案
你的最后一个建议几乎就在那里。当你想分支时,复制主干HEAD。然后在你的工作副本中,
svn switch https://my_svn_server/svn/blah/branches/my-branch
这会将您切换到分支,同时保留所有本地修改。然后,您可以随时将更改提交到分支。
关于svn - 将分支合并回主干时如何避免SVN冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1269366/