SVN分支管理

SVN分支管理

目录

  • 分支
  • 合并
  • 需要注意的
    • 冲突如何出现
    • 如何解决冲突
    • 如何避免冲突

分支

使用svn客户端进行分支

把项目从svn服务器上检出来,如果已经检出请忽略,要分支的项目一定要是最新的,更新和提交之后开始分支,右键项目目录->TortoiseSVN->Branch/tag...->

SVN分支管理_第1张图片
分支图
  1. 从哪里copy分支(主分支)
  2. copy到什么地方(子分支) To path 来修改路径,记住你要写的路径,这里可以修改为/branches/MyApplication
  3. Create copy in the repository from: 从哪里创建副本
    • HEAD revision in the repository 版本库中当前版本
    • Specific revision in the repository 版本库中指定的版本(如果不填则默认为当前分支)
    • Working copy 从当前工作区copy副本(这个我很少用)

这里如果没有特殊的需求,就直接默认,如果要指定的版本进行分支,可以点击show log 查看想要分支的版本。

最后在 Recent messages 下面写上日志,点击ok

如果成功了,那么此分支就已经存在版本库中的指定路径中了,然后就可以将版本库里的分支检出到本地了。

这一步基本不会遇到什么问题,出现问题可能出现在to path : 选择的路径的问题,根据失败的提示来修改。

合并

当我们检出子分支branch之后,修改子分支项目,然后子分支合并到主分支

合并分支之前先提交,使本地的版本为最新的,如果主分支和子分支都不是最新的或者没有提交的会报出异常,一般更新和提交后问题解决,这是非常有好处的,确保你的代码永远不会丢,这是个很好的习惯。
目标:子分支到主分支(因为要把子分支的数据同步过来,所以选择主分支目录右键)

主分支->右键项目目录->TortoiseSVN->Merge

  • Merge a range of revisions 合并一个版本范围

    下面是官方文档对此操作的解释

    This method covers the case when you have made one or more revisions to a branch (or to the trunk) and you want to port those changes across to a different branch.
    
    What you are asking Subversion to do is this: “ Calculate the changes necessary to get [FROM] revision 1 of branch A [TO] revision 7 of branch A, and apply those changes to my working copy (of trunk or branch B). ”
    
    If you leave the revision range empty, Subversion uses the merge-tracking features to calculate the correct revision range to use. This is known as a reintegrate or automatic merge.
    

一般情况下,我使用此选项合并分支,svn会根据你选择的分支,来同步你修改的代码到另个分支中。官方文档的意思:也就是当你有多个版本,并且某个分支进行了修改,svn会根据计算来比较两分支的改动,来同步到你指定的分支上。

  • Merge two different trees 合并两个不同的文件树(文件夹)
    This is a more general case of the reintegrate method. What you are asking Subversion to do is: “ Calculate the changes necessary to get [FROM] the head revision of the trunk [TO] the head revision of the branch, and apply those changes to my working copy (of the trunk). ” The net result is that trunk now looks exactly like the branch.
    
    If your server/repository does not support merge-tracking then this is the only way to merge a branch back to trunk. Another use case occurs when you are using vendor branches and you need to merge the changes following a new vendor drop into your trunk code. For more information read the chapter on vendor branches in the Subversion Book.
    
    这种方式见名之意合并两个不同的文件树,svn会把你指定的分支全部copy到想要合并的分支(这里假设主分支),你的主分支会和你的分支长的一摸一样,你说我在子分支上改了改,而又在主分支上改了改,那么使用此方法会丢失你在主分支上的代码,注意文档这个词《The net result is that trunk now looks exactly like the branch》(最终:主分支看起来完全像分支),androidStudio 的插件合并就是这个选项,直接将目标比较差别后给合并,两者长得一摸一样。

咱们的目标是:子分支到主分支,介绍完两种合并分支的方式咱们继续。

选择 Merge a range of revisions->ok

SVN分支管理_第3张图片
W1Y9(38QB@%S.png
  1. 指的是合并的数据源是谁,这里定位到子分支MyApplicationCopy
  2. Revision range to merge
    • all revisions 所有的修改(所有的版本,不用比较这么多,一般咱们不选这个)
    • specific range 指定的范围(指定版本,默认最新的版本)
    • Reverse merge 反向合并(天呀!反向Q,就是给你个机会回退,当你把合并的代码也提交了,怎么办?那就勾上这个给reverse,你会有个疑问,这个和svn的rever有区别么?额,这个我还没试过!你要知道可以告诉我)

这是反向合并官方文档的描述

If you want to merge changes back out of your working copy, to revert a change which has already been committed, select the revisions to revert and make sure the Reverse merge box is checked.

如果您想要将更改从工作副本中返回,则要还原已提交的更改,请选择要恢复的修订,并确保选中反向合并框。

specific range 可以指定一些范围,例如4-7,9,11版本

一般情况下可以默认不填自动计算文本之间的区别,或者直接all revisions ,当我们子分支所有功能开发完后可以直接 选择all revisions

我们选择 specific range 之后点击 next

SVN分支管理_第4张图片

在合并之前可以点击Test merge 测试合并的结果,合并错误或者合并冲突提前知道

然后点击Merge,合并完成。

解决冲突

说了那么多的废话,其实合并或者分支都很简单,麻烦的是出了问题怎么办?

  • 文本冲突 (text)
  • 目录结构冲突(tree )

文本冲突,这个就很好解决了,哪里爆红改哪里,svn自带的解决冲突编译器分为四个部分,【工具栏】,【左侧本地文本】,【右侧服务器提交的文本】,【最下面的合并后的文本】。通过选择左侧和右侧的内容来进行合并,合并完保存并且标记为已解决。


SVN分支管理_第5张图片
svn解决冲突的界面 (盗的图)

如果使用的是android studio 冲突解决可以右键文件【subversion】-【resolve text conflict】,然后进入合并的页面,左侧本地,中间合并后,右边服务器。

SVN分支管理_第6张图片
20160318153417964.png

接下来:目录冲突。

  • 这个先了解为什么会出现这个现象,你改了一个文件A,你的小伙伴把这个A的名字改成了B,他提交了,然后你拉代码,svn告诉本地的A老子换了个名字,你接受不接受。这个时候你需要抉择了到底是要他的还是要你的,你和你的小伙伴一商量,两个都是干一个事的那就选一个把,这个时候你可以把本地A的改动放到B对应的位置,把A删掉,或者说把B删掉,保留A,标记为已解决。
  • 还有个情况就是,人家看文件夹的名字都看不顺眼了,直接改了名字,你拉代码,整个目录下的文件我会告诉你,都木有同步,需要你手动合并之后然后标记为解决!

目录冲突更多的是给你个提示,所以解决起来不会有那么多工具

最后

查了很多文章,感觉官网的教程是最准确的,虽然不容易看懂,但是贵在准确,然后自己多去尝试.最后感谢一位大佬对我的指点.

参考链接

svn官网

SVN分支/合并原理及最佳实践使用SVN界面工具整理

android studio中svn的使用(关联svn、svn提交代码,分支管理等)

svn 冲突的产生与解决

你可能感兴趣的:(SVN分支管理)