`
xgn1128
  • 浏览: 13366 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多

            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 仍然会提供你需要的特性。

分享到:
评论

相关推荐

    SVN学习知识.pdf

    Svn技术的基础详细学习笔记,总结了Svn技术的各个知识点,可以用来复习以及对基础知识的巩固,对新人的学习很有帮助。

    svn-book.pdf

    Subversion1.5英文原版手册,包括版本库管理,分支和主干的合并,虽然不是最新的1.6版本,但是对于学习英文原版svn知识的朋友,在理解上可以增强很多,增加svn命令的理解以及与版本库的一些资源方面的理解!

    AnkhSvn操作手册

    目 录 1 AnkhSVN 概述4 2 背景知识5 2.1 什么是 AnkSVN? 5 2.2 什么是版本库浏览器?5 2.3 什么是工作拷贝浏览器?6 2.4 什么是未提交更改视图(the Pending Changes view)7 2.4.1 什么是本地文件更改视图(Local ...

    SVN使用手册中文版快速入门

    版本库基本知识 理解事务和修订版本 未受版本控制的属性 版本库数据存储 Berkeley DB FSFS 版本库的创建和配置 钩子脚本 Berkeley DB配置 版本库维护 管理员的工具箱 svnlook svnadmin svndumpfilter svnshell.py ...

    SVN使用手册中文版.chm

    版本库基本知识 理解事务和修订版本 未受版本控制的属性 版本库数据存储 Berkeley DB FSFS 版本库的创建和配置 钩子脚本 Berkeley DB配置 版本库维护 管理员的工具箱 svnlook svnadmin svndumpfilter svnshell.py ...

    SAN存储知识入门_svn_

    现在的计算机网络系统,基本都是以服务器为中心的处理模式,存储设备(包括磁盘阵列,磁带库,光盘库等)作为服务器的外设使

    svn 官方中文版说明书

    SVN 官方文档-中文版说明书 介绍了SVN的所有知识

    SVN用户使用指南 版本控制 源代码管理

    2. SVN基础知识1 2.1. SVN简介1 2.2. SVN特性1 2.3. SVN的架构3 3. SVN的基本应用4 3.1. 客户端的安装4 3.2. 版本库浏览 Repo-browser6 3.3. 版本库的基本操作8 3.3.1. Add file(folder)添加文件(文件夹)8 3.3.2. ...

    Android Studio配置与使用SVN

    Android Studio中配置和使用SVN,你会学到很多的知识。

    SVN安装客户端

    SVN安装在Windows上,以及简单的使用介绍。下载后里面还有其他知识点。

    版本管理与SVN学习总结

    学习总结,这是一篇关于版本控制知识 与 SVN 软件操作的学习总结

    SVN支持向量机

    SVN支持向量机虽然是机器学习中的知识,但是在深度学习中也会用到。

    svn-book SVN团队开发

    svn-book.rar 学团队开发的基础知识,使用svn!

    Tortoise SVN简明操作指南

    Tortoise SVN是我发现的非常好用的软件中的一个,它提供的功能让人兴奋,强烈推荐这一款版本管理工具软件。它是开源的,我希望它越做越好,同时也希望有更多人支持这一款软件的发展,发自内心的感谢开发者为我们带来...

    版本控制SVN和GIT笔记

    SVN GIT 版本控制,上课的笔记,非常详细,有了它版本控制这部分的知识就算通过了,这个笔记整理了两种版本控制的详细使用方式。

    知识点linux+apache+svn学案.pdf

    知识点linux+apache+svn学案.pdf

    svn安装方法

    本节介绍一下MyEclipse8.0下SVN插件如何使用问题,包括客户端和服务器端安装SVN插件等内容,在这里和大家分享一下,希望通过本文大家能够学到更多知识。下面是具体介绍。 svn(subversion)是近年来崛起的版本管理...

    Ankhsvn-2.1.7444.msi

    AnkhSvn 是一个Visual Studio 的 SVN 插件,最新2.0版本支持 Visual Studio 2008 和 2010.这个软件允许你在您的Microsoft Visual Studio IDE内执行共同的...你能在浏览你的知识库和你能插件式插入你的喜欢的不同的工具.

    配置管理-SVN

    软件项目经理不但要用管理知识管理整个项目,还要为他们的团队选择更好的技术实践。在软件开发的众多技术实践中,持续集成已经被越来越多的团队所采用。持续集成对于软件项目管理的各个领域的管理有着积极的作用。 ...

Global site tag (gtag.js) - Google Analytics