SVN分支管理

SVN分支管理

目录

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

分支

使用svn客户端进行分支

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

分支图
  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

X@A.png
  • 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

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

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

然后点击Merge,合并完成。

解决冲突

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

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

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


svn解决冲突的界面 (盗的图)

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

20160318153417964.png

接下来:目录冲突。

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

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

最后

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

参考链接

svn官网

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

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

svn 冲突的产生与解决

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容