RSS

DVCS学习笔记

13 Jan

一直都对DVCS很感兴趣,但是又不是很理解它的概念,最近学习了一下DVCS的东西,写下来以备自己查看。

DVCS,顾名思义,Distributed Version Control System,也就是一个分布式的版本控制系统,此类系统的代表软件有Mercurial,Git等等。简言之,和CVCS不同,DVCS并没有一个统一的中央版本库,而是所有的版本库等等都是存储在开发者本地的,所有的改动都不是commit到中央服务器上面,而是选择性地与其他开发者的本地版本库进行分享,典型配置如下面的图示:

CVCS配置情况                    DVCS配置情况

              CVCS配置示例                                                                         DVCS配置示例

如上所示,在CVCS中,只有一个服务器,只有一个完整的版本库,所有的开发者都要和这个版本库来进行同步,而在DVCS中,所有的开发者都在本地维护着一个自己的版本库,这个版本库可以有选择地提交变动给指定的其他的开发者,并且也可以有选择地来获取自己感兴趣的来自其他开发者的变动。

这样的配置有如下的几个好处:

1. 增加了项目开发过程中版本库的鲁棒性

在传统的CVCS中,一旦中央版本库崩溃将会导致整个项目的灾难,所有的工作都不得不停止下来以至于一般的项目开发中,都会设有一个备份的中央版本库。但是在DVCS中,就算有一个人的版本库崩溃了,可以立即从邻近的开发者获取到相应的版本库,虽然不能完全恢复自己的工作,但是至少只是影响一个人的工作,不至于会导致整体开发的停滞。

2. 开发者在没有网络的情况下也可以进行工作,速度快

由于每个开发者在自己的本地上有开发需要的所有信息,所以在很多情况下都是不需要接入网络的,可见DVCS对于小步开发是友好的,每一次微小代码的改动都可以很方便地存储到本地的库里面,一次大的更新再选择push到感兴趣的开发者的库里面,或者由感兴趣的开发者来自由选择接收,这样对于开发者本地开发很友好,开发效率比较高,也方便,省却了很多等待commit以及get的时间。

3. 每个人的开发进度可以自行管理,merge进度可以自己管理

对于非串行的开发线,开发者可以自由地选择merge的对象,因此在这个的基础上来对解决冲突,对于开发的进度可以自己自由管理,并且也不会因为冲突而导致了整个项目进度的停滞,给了开发者更大的自由,对于项目的开发更加灵活。例如:

phase1 phase2 phase3

上图中,Client 1 2 3 分别负责part 1 2 3,现在Client 1 和 Client 2 分享变更,然后发现冲突,2个人协同解决冲突,这时Client 1 再与Client 3 分享变更,没有confilct很好,继续各自的工作,完成以后大家的本地库的状态如第三幅图所示。这样对于非串行的3个任务part 1 2 3,3个开发者可以一起开发,自由地管理冲突,并且也不会因为part 1 和 2 的冲突导致了Client 3 的任务不能进行,甚至在解决part 1 和 2 的冲突的时候,工程整体进度其实还是在前进的。

4. 仍然可以设置一个中央版本库来进行发布版本的管理

对于发布版本,其实也可以设置一台Client来代替CVCS中的中央库的角色,也就是所有的开发者都push自己的变更到这个库上面来,这样,这个库就保证了自己的最新性,而merge中的conflict由各自的开发者在各自的版本库中发现并且协商解决再次push到作为中央库的那个客户机的本地库中。因此,也可以实现release版本的管理。

但是弊病也有:

1. 权限问题

大家都说DCVS的权限管理是很弱的,基本上都不是工具的管理,而是依靠现实中的社会层次来管理,通常在CVCS中,一个变动的commit都是需要审核的,或者说是需要高权限的管理员来进行审核验证以后才放入到中央的版本库供大家get的,但是在DVCS中就没有这样的角色,而且对于别人负责part的访问都是需要权限的,而在本地的库似乎权限就不是那么明显,没有一个authority来进行管理。不知道我理解得对不对。

2. 对于项目经理来说把握项目开发进度混乱

这也是我的疑问,在项目开发的过程中,项目经理在什么地方跟踪项目的进度呢?大家都有自己的版本库,都按照自己的本地库来观察项目整体的进度,因此,缺少一个很好的跟踪整体项目进度的方法,即便是设置一个本地库来让大家都提交变动,但是这样的未经审核的变动往往都是不稳定的,项目经理还是很难从从这样的一个库里面来估量整体项目开发的进度,只能从每个人的库来估算整个项目开发的进度。

Advertisements
 
Leave a comment

Posted by on January 13, 2011 in Technical notes

 

Tags: , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: