几个星期前,我开始在我的SVN存储库的主干中进行更改,我认为这将是相当小的.
经过几个小时的工作,我意识到这个变化比我想象的更重要,我觉得立刻检查我的变化是太危险了,所以我做了一个分支,就像这样:
svn copy . https://my_svn_server/svn/blah/branches/my-branch
Run Code Online (Sandbox Code Playgroud)
...然后做了一个svn开关,并愉快地继续在那个分支工作.到目前为止,这么好,直到我对所有变化感到高兴,并希望将它们再次合并回主干.所以我将所有更改检入my-branch,然后仔细按照此处显示的步骤进行操作......这就是我遇到麻烦的地方.因为我从本地(客户端)存储库创建了my-branch,该存储库已经有大量(未签入的)未完成的更改,所以合并不包括与这些更改对应的差异,因此存在合并中有很多很多冲突,我必须手工解决 - 这是我不想做的事情,因为如果我搞砸了就会留下虫子进入的空间.
我尝试通过减少合并期间指定的修订号来包含缺失的差异,例如通过执行a
svn merge -r2818:2932 https://my_svn_server/svn/blah/branches/my-branch
Run Code Online (Sandbox Code Playgroud)
而不是预期的
svn merge -r2819:2932 https://my_svn_server/svn/blah/branches/my-branch
Run Code Online (Sandbox Code Playgroud)
...但是这没有用,因为我的分支在修订版2818中不存在,所以我只是得到一个错误:
svn: Unable to find repository location for 'https://my_svn_server/svn/blah/branches/my-branch' in revision 2818
Run Code Online (Sandbox Code Playgroud)
这就是事情的立场.我这次可以手动理清这个烂摊子,但我很好奇是否有办法处理这个问题,以便下次事情变得更好.
我能想到的一个方法是不通过复制本地(客户端)储存库,而是通过使SVN树干HEAD的副本,然后检查出我分支到一个单独的目录中创建我的分支,然后手动将我的本地(未签入)更改从trunk目录复制到my-branch目录,然后直接还原本地trunk ...但这也非常繁琐且容易出错.
当然有一种更好,更自动的方法来创建一个包含本地(未签入)更改的分支,然后将其合并回到主干中?
你的最后一个建议几乎就在那里.如果要分支,请复制主干HEAD.然后在你的工作副本中,
svn switch https://my_svn_server/svn/blah/branches/my-branch
Run Code Online (Sandbox Code Playgroud)
这将切换到分支,同时保留所有本地修改.然后,您可以随时将更改提交到分支.