SVN的使用,合并、冲突详解

前言:

  作为团队开发,SVN这样的版本控制工具势必是不可少的,前些日子,因为同事对SVN的使用不规范,导致了很多不必要的麻烦,然后我在QQ空间里吐槽了下,还引发了好多人的争论,不乏技术大牛也说出了自己的观点“规则优于配置”,不过作为使用者,弄清楚各种情景的原理还是很有必要的,这样利于自己利于他人。

情景一:单人操作文件

  示意图:

  第一个故事是这样的:

   靠谱哥想开个店子,迎娶白富美,走上人生巅峰!于是他动手了(比你强哦,好歹他行动了,哈哈)

   1.首先靠谱哥,他准备些资料,如上图在SVN上做了配置,文件基础版本为:V01.properties.

2.靠谱哥后来想修改下配置文件,想增加一些内容所以他做了如下操作

      Step1:从SVN上取到基础版本V01.properties到本地;

      Step2:在本地基于V01.properties修改资料,修改完保存到本地,本地命名为:K02.V01.properties。(SVN则认为这将是V01.properties升级版,在本地叫K02.V01.properties,其中K=kaopu(靠谱),02=01的下个版本,V01=基于V01版本修改而来)

      Step3:靠谱哥先update一下,未发现SVN上比本地的基础版本V01.properties更新的版本,所以SVN不用处理合并;

      Step4:commit资料,SVN在库上形成新的正式版本:V02.properties.

  3.靠谱成功完成了一次资料修改

第一个故事描述了一次完整的SVN从  下载基础版本-->本地基于基础版本修改文件-->提交前检查SVN库上是否有新版本-->提交修改的文件,并在SVN库生成正式新版本。

情景二:两人操作同一文件

  示意图:

      

第二个故事是这样的:

  靠谱哥想开个店子,迎娶白富美,走上人生巅峰!他一个人干觉得没意思,所以叫来了呆逼朋友哉哥来一起合作(靠谱还真是呆逼,自己要亏就算了,还拖基友下水,不靠谱)

      Step0:时空倒转,反正就是回到了SVN库上只有一个版本的时候,如上图:靠谱准备好了一些资料(怎么这么奇怪的资料,嘻嘻不告诉你们);

  靠谱想:“恩,这一次要设计个牛B点的URL,URL就是统一资源定位,很重要的,不能和上次一样,嗯?我为什么要说上一次,不是时空倒转了么,嗯,不管了(多傻逼的靠谱)”

  话不多少,靠谱哥操作(历史总是惊人的相,丫的操作居然又来一次):

      Step1:从SVN上取到基础版本V01.properties到本地;

      Step2:在本地基于V01.properties修改资料,修改完保存到本地,命名为:K02.V01.properties。

      Step3:靠谱哥先update一下,未发现SVN上比本地的基础版本V01.properties更新的版本,所以SVN不用处理合并;

      Step4:commit资料,SVN在库上形成新的正式版本V02.properties.

哉哥也是个呆逼,上班一天回来累死累活,看片的时间都不够,居然最后还是答应了靠谱哥一起弄什么破店子。

哉哥哉时空倒转后的第一时间就检查了SVN库(这特么就是职业病),好歹这也是目前唯一的资产了,结果看到基础版本里的店子居然是靠谱哥,哉哥大怒,于是一气呵成

  如下操作:

      Step1:从SVN上取到基础版本V01.properties到本地;

       Step2:在本地基于V01.properties修改资料,修改完保存到本地,命名为:Z02.V01.properties;

       Step3:哉哥先update一下,居然发现SVN上存了在比本地的基础版本V01.properties更新的版本V02.properties,所以SVN需要做点什么;

SVN的思考:哉哥基于V01.properties修改是不合理的,哉哥应该基于V02.properties来修改,但是他都已经修改完了,看来只有我来帮他合并了

第一行:没有问题,大家都没改;

第二行:靠谱哥没改,那就按哉哥的来改吧;

第三行:哉哥都不知道有第三行的存在,那我就给他加上吧;

改完了,保存在哉哥本地为Z03.V02.properties

      Step4:commit资料,SVN把哉哥本地的Z03.V02.properties提交到SVN库上形成新的正式版本V03.properties(),修改成功;

第二个故事讲完了,靠谱哥和哉哥两个人很默契的完成了一次对同一个文件的修改;

情景三:两人同时操作一个文件冲突

  示意图:

      

第三个故事是这样的:

  靠谱哥想开个店子,迎娶白富美,走上人生巅峰!他觉得两个人干钱不够,于是又把喜妹拖下了水。

    Step0:时空倒转,反正就是再次回到了SVN库上只有一个版本的时候,如上图:靠谱准备好了一些资料;

  哉哥还是想当店长,结果喜妹居然也有同样的想法

  哉哥操作如下:

    Step1:从SVN上取到基础版本V01.properties到本地;

     Step2:在本地基于V01.properties修改资料,修改完保存到本地,命名为:Z02.V01.properties。

     Step3:哉哥先update一下,SVN上的最佳版本依然V01.propertie,所以SVN不需要做点什么;

     Step4:commit资料,SVN把哉哥本地的Z02.V01.properties提交到SVN库上形成新的正式版本V02.properties(),修改成功

  喜妹操作如下:

    Step1:从SVN上取到基础版本V01.properties到本地;

    Step2:在本地基于V01.properties修改资料,修改完保存到本地,命名为:X02.V01.properties;

    Step3:喜妹先update一下,发现SVN的最佳版本不再是V01.properties而是V02.properties,所以SVN需要做点什么;

SVN又开始思考:喜妹基于V01.properties修改是不合理的,喜妹应该基于V02.properties来修改,但是他都已经修改完了,看来只有我来帮他合并了

第一行:没有问题,大家都没改;

第二行:哉哥居然改了(店长从 靠谱哥 --> 哉哥),喜妹也改了(店长从 靠谱哥--> 喜妹);

完了完了,到底怎么改,前任店长到底要把店铺钥匙交给谁????好把,看你们干的好事儿,做为SVN我也不管了。

    Step4:SVN给出了冲突的提示;

  第三个故事讲完了,故事里哉哥得知上一任店长是靠谱哥,并要求做下一任店长,同事喜妹也取到了基础版本,得知了上一任店长是靠谱哥,同样要求做下一任店长。结果两个人打起来了吧。SVN表示很为难,其实上一任店长靠谱哥也很为难;

  总结第三个故事:其实哉哥和喜妹同事获取到了上一任店长的信息,可惜哉哥有过第二个故事的经验(不是说好了时空倒转的么,毛的经验可谈啊...)及时修改了资料并及时提交,正常上位!喜妹还在基础版本上做修改,却不知道哉哥早就上位了,导致让太监(SVN)很为难,只能告诉你冲突咯,之前的修改算是白费了。当然喜妹修改前获取到的就是最新版本,只可惜手脚慢,被人先上了位,改了朝换了代,这个时候喜妹再拿着前朝的圣旨来上位,大家是不承认的,不过大家都是有素质的人,可不能直接霸蛮提交,这样哉哥上位的历史就被掩埋了。喜妹如果还想上位,就得先和现任店长商量好,如果哉哥同意了,喜妹就可以上位了。

情景四:故事好复杂...

  示意图:

    

听了这么多故事,最后这个故事就留给各位看官自己去讲吧。

第一次写博文总结

  文章有点乱,情节也很跳跃,道在于行,亲行之后,方才能得道,请轻点拍砖。下次要写得思路清晰些,欲知靠谱哥、哉哥、喜妹的后续故事,下回再解。

时间: 2024-10-22 07:04:24

SVN的使用,合并、冲突详解的相关文章

减少HTTP请求之合并图片详解(大型网站优化技术)

原文:减少HTTP请求之合并图片详解(大型网站优化技术) 一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在了前端上,其中大部分时间都在下载页面上的各种组件:图片,样式表,脚本,Flash等等. 减少组件数必然能够减少页面提交的HTTP请求数.这是让页面更快的关键.减少页面组件数的一种方式是简化页面设计.但有没有一种方法可以在构建复杂的页面同时加快响应时间呢?嗯,确实有鱼和熊掌兼得的办法. 这里我们就拿雅

SVN与TortoiseSVN实战:冲突详解(一)

硬广:<SVN与TortoiseSVN实战>系列已经写了三篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支>重点介绍了标签和分支的概念及实际操作演示. 在写到SVN分支合并时,有评论中也提到合并后发生冲突的问题,相信关于冲突的知识也是开发人员的痛点. 关于冲突的知识,重点介绍以下几个方面: 1.什么情况会产

svn branch and merge(svn切换分支和合并)详解

下文的实践主要是参考了TortoiseSVN的帮助文档和Subversion的在线文档,Subversion的在线文档:http://svnbook.red-bean.com/en/1.5/svn-book.html 先说说什么是branch.按照Subversion的说法,一个branch是某个development line(通常是主线也即trunk)的一个拷贝,见下图: branch存在的意义在于,在不干扰trunk的情况下,和trunk并行开发,待开发结束后合并回trunk中,在bran

SVN与TortoiseSVN实战:冲突详解(二)

硬广:<SVN与TortoiseSVN实战>系列已经写了四篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支>重点介绍了标签和分支的概念及实际操作演示,关注人数较多. 上一篇提到关于冲突的知识,其中已经说明了第1点: 1.什么情况会产生冲突? 2.冲突发生时产生的三个文件是什么含义? 3.怎样使用TortoiseSVN解决冲突? SVN是根据同时对相同位置上内容的修改来判断冲突的

解决Eclipse SVN文件冲突详解

在使用Eclipse SVN插件进行团队开发的过程,假设开发人员A和B都获取了同一个文件的最新版本(假如版本号为8),并都对其进行了改动,成员A已经提交了自己所作的改动(版本号变为9),如果此时成员B想要提交自己的改动,就极有可能与成员B已经提交的改动产生冲突. 如下图所示,在Eclipse SVN同步视图中的Test.java就是一个产生了版本冲突的文件,那么我们该如何解决SVN的文件冲突呢? 1.解决简单的文件版本冲突 对于产生版本冲突的文件,如果两个人改动的不是同一处位置,例如成员A只改动

SVN版本控制软件-图片含义详解

自定义SVN图标显示风格 SVN的图标是可以自定义风格的 右键 -> TortoiseSVN -> Settings 可以根据自己的喜好设置图标的显示风格 各个图标的显示含义 1.同步图标 当服务器端的文件内容和客户端的文件内容完全同步时 2.冲突图标 当服务器端的文件内容和客户端的文件内容有冲突时 3.删除图标 当服务器端中的文件已经删除时,客户端就显示该图标 4.添加图标 当客户端的文件已添加到提交队列时,客户端显示该图标 5.无版本控制图标 当客户端的文件没有添加到提交队列时,客户端显示

eclipse中svn的各种状态图标详解

- 已忽略版本控制的文件.可以通过Window → Preferences → Team → Ignored Resources.来忽略文件. A file ignored by version control. You can control what resources will be ignored by going to Window → Preferences → Team → Ignored Resources. - 未纳入版本控制的文件,一般是新增,尚未提交的文件. A file

php中array_merge合并数组详解

如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的).如果数组是数字索引的,则键名会以连续方式重新索引. 注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引. 代码如下 复制代码 <?php$a=array(3=>"Horse",4=>"Dog");print_r(array_merge($a));?> 将一个或多个数组的单元合并起

SVN创建资源与分支详解

创建分支的意义: 简单说,分支就是用于区分开发版本与当前发布版本的. 1. 主干负责新功能的开发 2..分支负责修正当前发布版本的bug(对于可以放入下个发布版本的改进性bug可以直接在主干上开发) 3..分支上修改的bug,经常性merge到主干上,尽量及时merge(避免大面积红色区域). 4..只能分支往主干靠拢(merge),不能反向! 5..直到下个新版本发布,该分支停止修改 1.为什么要用VisualSVN Server,而不用Subversion? 回答: 因为如果直接使用Subv