在多人协同开发项目时,版本控制是非常重要的。
作为一个学习计划来学习SVN,主要的参考资料是《使用Subversion进行版本控制——针对Subversion1.4》,这个资料其实是网上比较流行翻译版本,原作者是Ben Collins-Sussman...。
本文是这个学习计划的开篇:-)。介绍SVN背后的一些知识。
SVN是一个版本控制系统,版本控制系统的核心任务是实现写作编辑和数据共享。
版本控制系统有两个模型:锁定-修改-解锁模型和拷贝-修改=合并模型。
SVN采用的是后者,拷贝-修改-合并模型使得用户可以并行的工作,不必等待别人。但是,这个模型可能会遇到“冲突”的情况,即多个用户对同一个文件进行了修改。在冲突发生时,需要用户交流(:-)交流的重要性!)后再手工更正。但幸运的是,冲突的发生并不频繁。所以,这种模型是很实用的。
图一表明了拷贝-修改-合并模型:
图一
Harry和Sally为同一个项目各自建立了一个工作拷贝,工作是并行的,修改了同一个文件A,Sally首先保存修改到版本库,当Harry想去提交修改的时候,版本库提示文件A已经过期,换句话说,A在他上次更新之后已经更改了,所以当他通过客户端请求合并版本库和他的工作拷贝之后,碰巧Sally的修改和他的修改不冲突,所以一旦他把所有的修改集成到一起,也可以将工作拷贝保存到版本库。
图二表明了拷贝-修改-合并模型下冲突发生:
图二
如果Sally和Harry的修改交迭(:-)对同一块代码进行了修改)怎么办?这种情况叫做冲突。当Harry告诉他的客户端去合并版本库的最新修改到自己的工作拷贝时,他的文件就会处于冲突状态;它可以看到一对冲突的修改集,并手工的选择保留一组修改。需要注意的是软件不能自动解决冲突,只有人可以理解并作出智能的选择,一旦Harry手工的解决了冲突(也许需要和Sally讨论),就可以安全的吧合并的文件保存到版本库。