前沿

版本控制让程序员更容易对项目进行管理,而且在已经发布的老项目中的bug可以轻松的定位并且进行修改。让程序员避免必要的风险。

svn是一种开放源码的版本控制系统,支持本地访问或者网络访问数据库或者文件系统存储库。

基本概念

svn是一种集中的分形数据的信息系统,它的核心是版本库(存储所有的数据)。任何数量的客户端可以连接版本库,并且读写这些文件,通过写,可以修改这些文件。通过读可以看到这些信息。

实际上,版本库是另一种文件服务器,而不是你常见的那一种。最特别的是svn 会记录每一次的更改,不仅针对文件也包括目录本身,包括增加、删除和重新组织文件和目录。

当一个客户端从版本库读取数据时,通常只会看到最新的版本,但是客户端也可以去看以前的任何一个版本。举个例子,一个客户端可以发出这样的历史问题“上个星期四的目录是怎样的?”或是“谁最后一个更改了这个文件,更改了什么?”,这些是每一种版本控制系统的核心问题:系统是设计来记录和跟踪每一次改动的。

所以版本库都需要解决一个基本问题,那就是系统怎么样让程序员共享这些信息,而且他们相互不干扰。假设有2个程序员Susan、Jerry。他们同时修改版本库里面的同一个文件。假设Susan修改好了,并保存到版本库中。后来Jerry又修改保存好了,这样会覆盖原来Susan保存的,但是Susan的修改不回消失。因为版本库保存了Susan的修改。但是Susan的修改不回出现在Jerry中,至少会失去Susan修改的部分,这就是版本库必须避免的地方。

方案1:版本库可以是“锁定 - 修改 - 解锁” 的机制解决这种问题。Susan要使用这个文件是,对它进行加锁,当Jerry也要修改这个文件时,版本库会拒绝Jerry的请求,直到Susan修改完并且解锁,那么Jerry才能对该文件进行加锁并且修改。看似解决了问题,其实限制太多。1、加锁会导致管理上面的问题,当Susan修改完文件忘记解锁了,那么Jerry想要再次使用会等待Susan解锁。2、加锁可能导致项目的开发变成线性化。3加锁可能会出现安全问题。假设Susan在修改A文件。而Jerry在修改B文件。而正好A和B两个文件相互依赖。Susan和Jerry以为是一种安全状态下修改。

方案2:拷贝 - 修改 - 合并这种模型就是程序员建立一个个人工作拷贝--版本库中的文件与目录中的文件进行映射。这样程序员可以并行工作,修改自己的工作拷贝。最终,各个私有的工作拷贝合并到版本库中形成最新的版本。举个例子,Susan和Jerry为同一个项目建立一个工作拷贝,并发工作,修改同一个A文件。Susan首先保存修改到版本库中。当Jerry提交A文件时,版本库会提示Jerry版本库已经过期需要更新最新的版本。Jerry可以通过请求合并版本库和他的工作拷贝。如果修改的与Susan不冲突,那么可以直接将工作拷贝拷贝到版本库中。但是如果Susan和Jerry的修改发生冲突了,需要手动修改冲突并与Susan讨论。但是冲突并不频繁,而且冲突所花的时间比解锁的时间要短。

 

 

posted on 2014-03-31 22:57  苏荷酒吧  阅读(211)  评论(0)    收藏  举报