SVN 知识

            SVN基本使用

SVN 提供了一套非常 秀的版本控制方案。在 里我把官方的文档和自己 实际 使用中遇到的一些常 问题 列在 里,以后 陆续 更新。

版本控制有哪些方案

所有的版本控制系统都需要解决这样一个基础问题 : 怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?版本库里意外覆盖别人的更改非常的容易。

文件共享的问题

考虑这个情景,我们有两个共同工作者, Harry Sally ,他们想同时编辑版本库里的同一个文件,如果首先 Harry 保存它的修改,过了一会, Sally 可能凑巧用自己的版本覆盖了这些文件, Harry 的更改不会永远消失 ( 因为系统记录了每次修改 ) Harry 所有的修改不会出现在 Sally 的文件中,所以 Harry 的工作还是丢失了—至少是从最新的版本中丢失了—而且是意外的,这就是我们要明确避免的情况!

 

2.2. 需要避免的问题

  锁定 - 修改 - 解锁 方案

许多版本控制系统使用锁定 - 修改 - 解锁这种机制解决这种问题,在这样的模型里,在一个时间段里版本库的一个文件只允许被一个人修改。首先在修改之前, Harry 要“锁定”住这个文件,锁定很像是从图书馆借一本书,如果 Harry 锁住这个文件, Sally 不能做任何修改,如果 Sally 想请求得到一个锁,版本库会拒绝这个请求。在 Harry 结束编辑并且放开这个锁之前,她只可以阅读文件。 Harry 解锁后,就要换班了, Sally 得到自己的轮换位置,锁定并且开始编辑这个文件。

 

2.3. 锁定 - 修改 - 解锁 方案

 

锁定 - 修改 - 解锁模型有一点问题就是限制太多,经常会成为用户的障碍 :

锁定可能导致管理问题。有时候 Harry 会锁住文件然后忘了此事,这就是说 Sally 一直等待解锁来编辑这些文件,她在这里僵住了。然后 Harry 去旅行了,现在 Sally 只好去找管理员放开锁,这种情况会导致不必要的耽搁和时间浪费。

锁定可能导致不必要的线性化开发。如果 Harry 编辑一个文件的开始, Sally 想编辑同一个文件的结尾,这种修改不会冲突,设想修改可以正确的合并到一起,他们可以轻松的并行工作而没有太多的坏处,没有必要让他们轮流工作。

锁定可能导致错误的安全状态。假设 Harry 锁定和编辑一个文件 A ,同时 Sally 锁定并编辑文件 B ,如果 A B 互相依赖,这种变化是必须同时作的,这样 A B 不能正确的工作了,锁定机制对防止此类问题将无能为力—从而产生了一种处于安全状态的假相。很容易想象 Harry Sally 都以为自己锁住了文件,而且从一个安全,孤立的情况开始工作,因而没有尽早发现他们不匹配的修改。

 

复制 - 修改 - 合并 方案

Subversion CVS 和一些版本控制系统使用复制 - 修改 - 合并模型,在这种模型里,每一个客户读取项目版本库建立一个私有工作副本—版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。

这是一个例子, Harry Sally 为同一个项目各自建立了一个工作副本,工作是并行的,修改了同一个文件 A Sally 首先保存修改到版本库,当 Harry 想去提交修改的时候,版本库提示文件 A 已经过期,换句话说, A 在他上次更新之后已经更改了,所以当他通过客户端请求合并版本库和他的工作副本之后,碰巧 Sally 的修改和他的不冲突,所以一旦他把所有的修改集成到一起,他可以将工作副本保存到版本库。

2.4. 复制 - 修改 - 合并 方案

2.5. 复制 - 修改 - 合并 方案 ( )

但是如果 Sally Harry 的修改重叠了该怎么办?这种情况叫做冲突,这通常不是个大问题,当 Harry 告诉他的客户端去合并版本库的最新修改到自己的工作副本时,他的文件 A 就会处于冲突状态 : 他可以看到一对冲突的修改集,并手工的选择保留一组修改。需要注意的是软件不能自动的解决冲突,只有人可以理解并作出智能的选择,一旦 Harry 手工的解决了冲突 ( 也许需要与 Sally 讨论 ) ,他就可以安全的把合并的文件保存到版本库。

复制 - 修改 - 合并模型感觉是有一点混乱,但在实践中,通常运行的很平稳,用户可以并行的工作,不必等待别人,当工作在同一个文件上时,也很少会有重叠发生,冲突并不频繁,处理冲突的时间远比等待解锁花费的时间少。

最后,一切都要归结到一条重要的因素 : 用户交流。当用户交流贫乏,语法和语义的冲突就会增加,没有系统可以强制用户完美的交流,没有系统可以检测语义上的冲突,所以没有任何证据能够承诺锁定系统可以防止冲突,实践中,锁定除了约束了生产力,并没有做什么事。

有一种情况下锁定 - 修改 - 解锁模型会更好,也就是你有不可合并的文件,例如你的版本库包含了图片,两个人同时编辑这个文件,没有办法将这两个修改合并, Harry Sally 会丢失他们的修改。

Subversion 怎么做?

Subversion 缺省使用复制 - 修改 - 合并模型,大多数情况下可以满足你的需求。然而, Subversion 1.2 后还是支持锁定,如果你有不可合并的文件,或者你只是想实行强制管理策略, Subversion 仍然会提供你需要的特性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值