TortoiseSVN教程
1 引言
? ? ? ?
团队开发?
修改文件而他人也在改?你修改的内容丢失? 保存了文件可又后悔了?想得到几天前的版本? 发现了bug,想知道bug何时引入的?
这些问题都遇到了?那就使用TortoiseSVN吧。TortoiseSVN是Subversion的客户端。Subversion是针对CVS的不足而开发的版本控制系统。这些提升主要包括以下的一些方面:
1.目录、文件以及改名等元数据的版本化
不同于 CVS 只关心文件的内容以及文件是否存在,所有文件、目录的相关操作都是被版本化的,例如文件的改名、拷贝等等; 2.提交操作是真正的原子操作 在 Subversion 中,提交操作是不可分割的,修订版本号是基于每次提交操作而非文件。提交日志被附加在每个修订版本中,而不是像 CVS 一样冗余的进行存储;
3.可通过 Apache 服务器提供基于 WebDAV/DeltaV 协议的支持,该功能可使 Subversion 通过 Apache Web 服务器使资源库更加灵活的在网上进行共享,使其在互操作性上大大优于 CVS; 4.可独立运行。当你不想使用 Apache 2.x 时候,你也可以使用 Svnserve,它可以以守护进程或者是Windows 下的服务方式独立运行; 5.分支(Branching)与标签(Tagging)操作是轻量级的; 6.客户服务器端分层库结构设计; 7.资源库可以采用数据库(BerkeleyDB)或者是使用特定格式的文件进行存储;
8.更有效的对二进制文件进行处理。
2 基本概念
2.1 版本库Repository
Subversion是版本管理的后台系统,其核心是保存数据的版本库-repository。 版本库用分层的“文件-目录”文件系统数来存储数据。连接到版本库的客户能读写数据。版本库是源码的集中存放处,记录了你的每一次修改!客户端可以从版本库中取到过去的版本。
图2.1. 典型服务器/客户机模型
版版版版版版版版版版版版版版版版版版版版版版版版版版版版版版版
2.2 版本模型Versioning Models
基本问题:共享数据而不相互覆盖?
2.2.1 文件共享的问题
在合作开发中文件共享的问题是显而易见的。
图 2.2. 要避免的问题
两个用户读同一个文件两个用户开始编辑文件
RepositoryAReadReadRepositoryAAHarryASallyA'HarryA\SallyHarry首先发布版本Sally意外覆盖了Harry的版本RepositoryA'WriteRepositoryA\WriteA'HarryA\SallyA'HarryA\Sally
2.2.2 锁定-修改-解锁Solution
Visual SourceSafe采用的就是这种模型。
Figure 2.3. 锁定-修改-解锁方案
Harry锁定文件,然后拷贝进行编辑Repository ARead当Harry进行编辑时,Sally读文件失败Repository ALockXRead AHarrySallyA'HarrySallyHarry发布版本并解锁Repository这样Sally能够对文件进行加锁,拷贝及编辑Repository A\ReadA'UnlockWriteLockA'HarrySallyA'HarryA'Sally
问题:
? 锁定可能引起管理问题: 如忘记解锁别人无法使用。 ? 锁定造成不必要的串行作业。 ? 锁定可引起安全问题。
2.2.3 拷贝-修改-合并解决方案
Subversion和CVS等采用拷贝-修改-合并模型。项目成员从版本库读取个人的工作拷贝,所有项目成员并行地在工作拷贝上工作,然后合并在一起形成新的版本(version)。
图 2.4. 拷贝-修改-合并方案