《使用SVN进行版本控制.ppt》由会员分享,可在线阅读,更多相关《使用SVN进行版本控制.ppt(75页珍藏版)》请在金锄头文库上搜索。
1、使用SVN进行版本控制 李洋 摘要 一 Subversion简介二 版本控制的基本知识三 Subversion常用功能四 客户端工具TortoiseSVN五 SVN使用中常见问题 一 Subversion简介 版本控制是管理信息变更的一门艺术版本控制工具早已经成为许多程序员的主要工具之一版本控制软件的用途并不仅限于软件开发的领域 只要人们使用计算机来管理经常变更的信息 就需要使用版本控制工具协同工作 大大提高团队工作效率及时了解团队中其他成员的进度资料共享记录每个文件从诞生到最终完成全过程的每步细节 什么是Subversion Subversion是一个自由的 开放源码的版本控制系统它可以管理
2、各个时刻的文件和目录Subversion将文件存放在repository库中 这个仓库非常类似于一个普通的文件服务器 只是它还可以记录文件和目录曾经做过的每一次变更Subversion允许你数据恢复到早期版本 或者是检查数据修改的历史 可把版本控制系统比作一种 时间机器 什么是Subversion Subversion的仓库可以通过网络来访问 允许不同的用户在不同的计算机上使用 不同的使用者可以进行协同工作 而且所有工作都是有记录的 如果有错只要撤销就可以 Subversion只是版本控制系统 不是软件配置管理系统 SCM 它是一个通用系统 可以管理任何类型的文件集它是一个通道 可以管理任何计
3、算机中的文件系统 Subversion的历史 CVS有明显的局限性和功能上的不足 2000年开始 CollabNet公司就开始着手开发新的版本控制系统来代替CVS KarlFogel和JimBlandy是CVS开发者 加入到开发subversion当中 他们让Subversion来使用CVS的特性 并且保留相同的开发模型 但是避开CVS的那些明显的缺陷 Subversion于2001年8月进入 自测 阶段 Subversion的特色 目录控制CVS只能跟踪单个文件的历史 而Subversion实现了一个 虚拟 的受控文件系统 可以跟踪整个目录的变更 真正的版本历史由于CVS只限于记录文件的版本
4、信息 像文件复制 重命名这样的操作它就不支持 在Subversion中我们可以添加 删除 复制和重命名文件和目录 Subversion的特色 原子化提交一个变更集要么完整地被提交到仓库中 要么不做任何改变 从而避免发生不完整地提交变更的情况 受控元数据每一个文件和目录都有一个与其对应的属性集 可选的网络层Subversion仓库的存取是一个抽象概念 有利于其他人实现新的网络访问机制 Subversion可以作为一个外部模块插入到ApacheHTTP服务器中 Subversion的特色 一致的数据处理Subversion使用一种二进制的比较算法来表示文件之间的区别 高效的分支和标记分支和标记所带
5、来的开销与项目的规模并没有直接的关系 Subversion在创建分支和标记时使用类似 连接 的方式来复制项目 扩展能力它是由一组设计良好的APIs实现的 包含在C的共享库中 这使得它很容易维护 也很容易被其他应用程序或语言使用 Subversion的体系结构 Subversion的体系结构 典型的client server模式结构在系统的一端是存放着所有受控制数据的Subversion仓库 另一端是Subversion的客户端程序 管理着受控数据的一部分在本地的映射 称为 工作副本 在这两端之间 是通过各种仓库存取层 RepositoryAccess RA 的多条通道 这些通道中 有些要使用计
6、算机网络 再通过用来访问Subversion仓库的服务器 而有些则完全绕过了网络 直接对仓库进行操作 Subversion的组件 Svn一个命令行的客户端程序Svnversion报告本地工作副本状态 当前档案的修订版本号表示 的程序Svnadmin用来创建或者是修复仓库的工具svndumpfilter过滤资源库程序 Subversion的组件 mod dav svnApache服务器的一个插件模块 用来使其他人可以通过网络访问这个仓库svnserve一个定制的 独立的Subversion服务程序 可作为一个驻留进程运行或者是由SSH调用 是使仓库可以被别人通过网络访问的另一种方法常用的组件是s
7、vn和svnadmin 有图形化客户端来实现svn和svnadmin功能 访问资源库的几种方式 样式存取方式file 直接从本地磁盘上访问仓库http 通过WebDAV协议访问Apache服务器而访问仓库https 和http 相同 但使用SSL来作加密svn 通过svnserve服务自定义的协议svn ssh 和svn 相同 但通过SSH封装 资源库的URL解析 所有被Subversion管理的目录 文件有唯一路径支持的协议有http https svn svns filehttp 59 66 96 188 svn kexie proj account trunk protocol host
8、 repository directory SVN服务器端数据目录 dav目录 提供给Apache与mod dav svn使用的目录 存储内部数据db目录 所有版本控制的数据存放文件hooks目录 放置hook脚本文件的目录locks目录 用来放置Subversion文件库锁定数据的目录 用来追踪存取文件库的客户端format文件 一个文本文件 记录文件库配置的版本号conf目录 是这个仓库的配置文件 仓库的用户访问帐号 权限等 二 版本控制的基本知识 仓库 TheRepository 版本控制模型实际工作中的subversionsubversion cvs vss比较 仓库 TheRepos
9、itory Subversion是一个集中式的系统 它的核心是一个用来存放数据的中心仓库 中心仓库使用典型的文件和目录层次结构 树状结构来存储信息 许许多多的客户端可以连接到中心仓库 然后读取或者写入文件 客户端通过写文件来使其他人共享 也可以读取其它客户端所写入的文件 典型的客户端 服务器系统模型 如图所示 仓库 TheRepository 仓库 TheRepository 仓库就是一种文件服务器 只是不是通常的那种 Subversion仓库可以记录写入仓库的每一次更改 这些更改包括对每一个文件的每一次修改 甚至是对目录本身的修改 例如添加文件 删除文件和对文件和目录的重新编排 这些特性使得
10、Subversion仓库与一般的文件服务器相比较为特殊 客户端同样可以读取文件和目录以前某个时刻的状态 版本控制系统的核心 记录和跟踪数据的修改历史 版本控制模型 版本控制系统的核心任务是使得数据可以协作处理和共享 但是不同的系统使用不同的策略来达到这个目标 文件共享的问题 怎样让系统允许用户共享信息 而不会让他们因意外而互相干扰 锁定 修改 解锁 方案 复制 修改 合并 方案 锁定 修改 解锁 方案 许多版本控制系统都使用 锁定 修改 解锁 模型来解决这个问题 诸如 VSS在这样一个系统中 仓库在一个特定的时刻只允许一个人对某个文件进行修改 这种方案的问题是它有一点过于严格了 经常会阻塞用户
11、的使用 锁定可能会带来管理问题 锁定可能导致不必要的串行工作 锁定可能导致错误的安全状态 文件可能相互依赖 复制 修改 合并 方案 Subversion CVS以及其他一些版本控制系统使用 复制 修改 合并 模型来代替锁定 每一个用户的客户端软件从中央仓库创建出一份个人的工作副本 仓库中文件和目录的本地映射 用户就可以并行工作 修改手中的私有副本 这些私有副本合并成为一个全新的版本 版本控制系统常常需要合并 但是最终 操作者本身必须负责让合并工作正确进行 冲突 conflict 复制 修改 合并 模型会带来冲突的问题用于解决冲突的时间远远少于锁定系统所带来的时间浪费 没有系统可以强制用户完美的
12、交流 没有系统可以检测语义上的冲突解决冲突的关键是用户交流 模型选择 锁定 修改 解锁 模型被认为不利于协作 但有时候锁定会更好 拷贝 修改 合并 模型假定文件是可以根据上下文合并的 就是版本库的文件主要是以行为基础的文本文件 例如程序源代码 但对于二进制格式 例如图片或声音 在这种情况下 十分有必要让用户轮流修改文件 如果没有线性的访问 有些人的许多工作就最终要被放弃 SVN也支持 锁定 修改 解锁 模型 实际中的Subversion 工作副本WorkingCopies修订版Revision混合型修订版 工作副本 一个Subversion的工作副本其实就是本地系统中的一个普通的文件目录树 可
13、以使用任何方式来编辑这些文件 如果是源代码文件的话 你也可以像通常情况那样去编译它们 工作副本是你的私人工作区 如果你不明确的要求 Subversion绝不会合并其他人的修改 也不会让其他人看到你做的修改 工作副本 在你已经修改完工作副本中的文件 并且确信修改正确后 就可以将这些修改公开给同一个项目中的其他工作人员 Subversion提供了将文件写入仓库的命令 工作副本中也包含一些额外的文件 它们是由Subversion创建和维护的 用来辅助完成这些命令 最典型的情况是 每一个目录都包含一个叫做 svn的子目录 该目录也被称为 工作副本管理目录 一个Subversion的仓库会包含几个项目
14、而每一个项目都是仓库的目录的一个子目录 这样 用户的工作副本也就对应于仓库中一个特定的子目录 SVN的修订版 一个svncommit操作可以将任意数量的文件和目录的修改发布作为一个单独的原子事务来处理 在仓库中 每一次提交都被作为一个原子事务来对待 每当仓库接受一次提交 仓库中的文件系统目录都会创建一种新的状态 叫做一个修订版 每一个修订本都被赋予一个唯一的自然数 并且每一个修订版的数字都比前一个要大 刚刚建立的仓库的初始的版本是0 只包含一个空的根目录 Subversion的修订版编号是针对整个目录树的 而不是某一个独立的文件 如图所示 修订版 设想一个修订版编号的数列 从0开始 从左延伸到
15、右 每一个修订版编号都对应一个画下面的目录树 而每一个目录树就是在每一次提交之后的仓库的 快照 混合型修订版 一般的原则上 Subversion努力使自己尽可能的灵活 一个典型的灵活性的体现就是允许工作副本中包含有混合的修订版编号的能力 在完成向仓库的提交之后 刚刚提交的文件和目录就拥有了最新的修订版编号 而其他文件没有 subversion cvs vss比较 三 Subversion常用功能讲解 基本术语主要讲解SVN客户端工具的常用命令通过本部分的学习 可以操作所有任务在日常使用subversion版本控制系统 术语 基本修订版 revision 存储库接受的每一次修改产生新的修订版HE
16、AD 存储库中最新版本BASE 工作拷贝中一个条目的修订版本号 如果这个版本在本地修改了 则 BASE版本 就是这个条目在本地未修改的版本 分支 branches 标记 tags 合并 merging Subversion客户端工具 命令行工具通过命令行方式 主要命令包括 svn 基本svn命令svnadmin 存储库管理svnlook 存储库查看TortoiseSVN与windows资源管理器集成subclipse与eclipse集成 Subversion常用操作 import将本地目录导入存储库checkout从存储库创建目录树的本地工作拷贝update将存储库中文件同步到本地工作拷贝中commit本地工作拷贝中文件修改提交到存储库中add将本地文件加入到存储库中remove从存储库中删除一个文件 保留历史记录 move在存储库中讲一个文件移到另一个位置 Subversion推荐目录结构 存储库项目名trunk 主版本branches 分支版本 独立版本 tags 标记版本 比如发行版v1 0 v2 0等等 工作拷贝 存储库同步的状态 Svn常用命令介绍 HelpImportChe