关于DVCS

来源:互联网 发布:filesaver.js保存文件 编辑:程序博客网 时间:2024/05/20 04:30

开发过程中一般都使用VCS工具,最普遍的工具就是svn,但是在使用过程中还是会存在一些问题。

假设一个场景
一个项目要进行开发,

  • A是底层核心功能开发人员,他要对底层进行开发,并且在第一时间所有的人都要获取他的代码
  • B是功能开发人员,进行一个runqian1的开发
  • C,D是功能开发人员,进行另外一个runqian2的开发
  • runqian1和runqian2要公用部分代码,比如同一个接口文件,并对他进行修改

假如我们用svn进行开发,这里面是有一个问题的,因为A的存在,runqian1和runqian2的开发并不能完全分开,而在开发阶段 B,C,D三个人都不能随意的提交代码,否则runqian1和runqian2都会相互影响。如果他们真的都是分开的功能也没问题,但是因为C,D是同一个功能的负责人,他们之间必须要进行代码交换,而因为svn是集中式开发,那么他们应该,必须,也只能通过svn进行代码交换。
如果

  1. C提交代码,要求D更新代码
  2. A提交代码,要求所有人更新代码
  3. D获取代码,A和C的,是正确的代码
  4. B获取代码,死菜了,因为C的代码是他不需要的,会影响他的工作,甚至都无法编译通过

这个是一个很普遍的场景,尤其是对人数多一些的小组。那么我们应该如何避免这种情况的发生呢?答案是使用DVCS系统,也就是分布式代码管理系统,例如bzr,hg等。

DVCS的出现可以方便的解决这类问题。与svn等传统VCS系统不同,DVCS并不需要一个中心服务器,每个人的开发工作区都可以认为是中心服务 器。DVCS的基础是分支,每需要一个开发工作区,都是基于已有的某个开发工作区创建一个分支,然后开发,然后进行分支的代码merge。因为这种特 性,DVCS的分支操作代价非常小。当然对于管理,发布等等我们还是需要一个中心服务器的,那么我们只要一个放在中心服务器的分支就足够了,使用完全相同 的技术和下面的各个开发工作区进行代码交换。从技术上,他们的地位是完全等同的。
根据这些,我们再使用DVCS假设一下上述的开发场景

  1. 在中心服务器创建技术开发版本
  2. A,B,C,D分别根据中心服务器创建自己的开发分支
  3. A进行开发,每个阶段,B,C,D基于A提供的代码进行merge,比如A自己架设一个(临时的)ftp
  4. C进行开发,每一阶段,D基于C提供的代码进行merge,相对D的开发来说,情况一样。他们的开发完全不影响B的开发
  5. 最终都开发完成,一并merge回中心服务器

这就非常顺利的避免了上面遇到的问题。而且,DVCS因为是把自己的工作区认为是代码仓库(repository),所以可以随时的提交代码,随时 记录自己的开发变更。而这个在svn当中有时就比较头疼,如果一个feature要开发时间比较长,那么中间的每一个小阶段的代码就很难记录了。

当然了,你可以说,我在svn当中采用给每个人开分支的方法解决这个问题。没错,但是,这已经就是DVCS的思想了,那么为什么不用一个现成的DVCS工具呢?

原创粉丝点击