• 1. 版本控制之道使用SubVersion进行版本控制 Monday, October 15, 2018
  • 2. 概要Subversion实施项目的目的和意义 版本控制和SVN简介 SVN项目仓库管理 如何使用SVN工作 工作介绍及成果演示 进一步计划
  • 3. 版本控制和SVN简介版本控制基本概念
  • 4. 版本控制和SVN简介CVS逐渐失去优势 首先,它实际上仅能处理 ASCII 文件。Unicode 文件会令 CVS 严重混乱。 此外,CVS 存储库更改起来极为困难。设置 CVS 存储库时,您必须非常谨慎地为每个文件选择准确的位置,因为在设置之后,您几乎就要一直使用这个位置了。 特别是 CVS 只能满足老式 C 程序员的 ASCII 需求,而对 Web 开发人员和其他非传统用户来说,CVS 实际上根本不起作用。在您开始考虑存储整个 Web 站点时,在 CVS 中,将文件从一个目录移动到另外一个目录是关键考虑事项 CVS 已经不再适合现代开发, 这一点越来越明显。
  • 5. 版本控制和SVN简介什么是SVN? Subversion的简称, 是一个自由、开放源码的版本控制系统。 它是一 个通用系统 ,可用来管理任何类型的文件,其中包括程 序源码。 支持可在本地访问或通过网络访问的数据库和文件系统存储 库。 不但提供了 常见的比较、修补、标记、提交、回复和分支功能性,Subversion 还增加了追踪移动 和删除的 能力。 此外,它支持非 ASCII 文本和二进制数据,所有这一切都使 Subversion 不仅对传统的编程任务非常 有用,同时也适于Web开发、图书创作 和其他在传 统方式下未采纳版本控制功能的领域。
  • 6. 版本控制和SVN简介CVSSVN基于RCS的普通ACSII文本文件,处理二进制文件只能将所有副本都保存起来 小文件数量大增加系统负担,备份需要大量时间包括unicode,二进制文件等任何文件,保存在数据库中,单一数据库文件,在内部都是以二进制差异比较算法来表示文件的更新部分。所有的文件在文件库中都是以差异的形式储存。文件有单独版本号(缺点:不利于保证项目版本的完整)全局性的版本编号(缺点:查看单个文件的更改历史会比CVS慢) 本地Cvs目录中不保存文件原始副本 本地SVN目录保存原始副本,可离线显示本地更新和细节,移除更新等,连线提交时只传送差异。实现双向的差异化传输 在文件内放置“冲突标记” 但容易被忽略 让冲突更明确地标示出来。处于冲突的状态中的文件,除非用户执行了“svn resolved”命令,否则不允许用户提交分支和标记的操作不便于使用一个标记就是项目的一份新的拷贝,在此拷贝上作提交就成为一个分支,方便快捷。
  • 7. 版本控制和SVN简介CVSSVN保证每个文件提交的原子性(优点:可单独提交之前失败的文件,缺点:可能导致部分文件提交不全。)提交操作的原子性,保证每次提交操作为一个完整单位(优点:能保证每次提交的所有文件要么全被提交,要么一个都不提交。缺点:部分文件提交失败后要重新提交所有文件,影响速度。但SVN只传输改动部分,本身但文件的提交速度就快于CVS)无对重命名、删除文件的支持 可对目录进行改名,移动等操作,而不丢失更改历史纪录权限和安全管理不清晰基于Apache的http和SSL连接,用户认证,可对目录授权。也可使用独立的SVN 或SVN+SSH协议进行授权连接本地文件与库可以多对多一个库可以有多个工作目录,但一个工作目录只能对应一个库无用户可以将任何的资料附加到文件与目录上。这些资料被称为属性。
  • 8. 版本控制和SVN简介SVN历史 2000年6月 – 开始编写代码 2001年8月 – Subversion开始支持自身开发 2002年 – 第一个版本发布 2004年2月 – 1.0.0版发布 2006年9月 – 1.4.0版发布 2007月12月20日 – 1.4.6版发布 Subversion 开发者: 140万 版权 Apache/BSD-style open source license. 由CollabNet组织开发
  • 9. SVN项目仓库管理丰富的客户端支持 Tortoise SVN,Subclipse等 三种项目仓库连接方式 http方式,通过Apache2 Svnserve 本地 两种数据存储方式 FSFS(推荐) 性能良好,速度快 支持NFS,windows共享 易于维护 Berkeley DB
  • 10. SVN项目仓库管理“trunk”是项目的开发主线 “branches”是放置分支的地方, 通过特性分支或客户修改分支来隔离发布或维护分支 “tags”指明你创建了一个时间点的快照 习惯,也可以通过钩子脚本或授权规则进行强制 tags与分支的区别就是tags一旦创建不能修改 你也可以将标签目录叫做”releases” 、 ”snapshots”、 ”baselines”等 注:Subversion本身没有特别的目录或名称用来代表 trunk 或branches,他们只是文件系统的普通目录,这依赖于你给 这些目录名和结构的一种意义。
  • 11. SVN项目仓库管理SVN项目仓库结构 一库单项目Vs.一库多项目 trunk branches Tags ProjectA trunk branches tags ProjectB trunk branches tagstrunk ProjectA ProjectB branches ProjectA ProjectB Tags ProjectA ProjectB
  • 12. SVN项目仓库管理SVN项目仓库结构 多库多项目 不同的项目仓库有自己的版本号,使用复杂性高 安全性好 维护成本高 无法在库与库之间拷贝 一库多项目 使用统一的版本号 每个项目都有自己的分支和标签 安全性差 可维护性好 结构并非一成不变, 可以使用svn move和 svn mkdir重新布置!
  • 13. SVN项目仓库管理SVN权限管理 认证 用户名+密码 授权 基于路径的授权 使用钩子脚本来做访问控制,比如: 提交新版本时邮件通知项目组成员 提交新版本时强制写日志1、直接修改配置文件 2、使用SVNManager
  • 14. SVN项目仓库管理备份命令 svnadmin dump 把项目仓库的内容抽取到一个可拿走的备份文件中 svnadmin load 取出备份文件的内容,并把它载入到一个项目仓库中 svnsync 实现一个版本库同另一个版本库的同步(单向),可实现版本库的备份或镜像(1.4支持) 备份方式 全量备份 默认 增量备份 –incremental –revision指定版本范围 备份脚本 Perl语言 定时备份,作为系统计划任务
  • 15. SVN项目仓库管理数据迁移——从CVS到SVN 原理——抽取、转换、加载 使用cvs2svn工具 Python语言 一次性转换 使用svn-importer工具(推荐) Java语言 完整模式,将源VCS的版本库数据全部导出; 增量模式,在第一次的完整模式之后,导出新增加的数据; 列表模式,将要导出的数据显示出来,不实际导出。
  • 16. SVN项目仓库管理管理员职责 选择项目仓库类型 定期备份 配置联网服务进程 建立访问控制机制 管理员要求 深入了解Subversion内部工作机制 编写脚本,使用Python,perl等语言
  • 17. 如何使用SVN工作使用Eclipse集成SVN 对于 Eclipse,需要安装 Subclipse 插件。 在 Eclipse 中使用 Subversion 插件的基本功能,如更新、提交、同步、分支等等 1、在 Eclipse 中,选择 Help Software Updates | Find and Install...。 在向导的第一个面板中,单击 Search for new features to install 单选 按钮,并单击 Next。 2、在向导的第二个面板中,单击 New Remote Site。输入 Subclipse 作为 名称,输入 http://subclipse.tigris.org/update_1.0.x 作为 URL。然后单击 Finish。 3、这将启动另外一个小的向导。下一个对话框应为您提供一个可安装的特性 —— Subclipse。选中它并单击 Next。 4、接受许可协议,完成安装。
  • 18. 如何使用SVN工作SVN工作周期svn checkout svn update 获取内容svn add svn move svn delete作出改动svn status -u 检查同一时间中仓库发生的变化svn update更新本地工作拷贝svn diff svn resolved合并改动,解决冲突svn commit提交改动105100106项目仓库
  • 19. 如何使用SVN工作例:导入一个项目 svn import . http://svnserver/projectname/trunk -m”- Import Message” The Subversion “import”-command. The directory from where we import the whole tree. You can use a complete path if you like. The repository URL. The option to define the commit message. The message itself limited by double quotes.
  • 20. 如何使用SVN工作常用命令 svn checkout 从项目仓库签出一个工作拷贝,也称作svn co svn status 打印工作拷贝中文件和目录的状态 svn commit 把改动从你的工作拷贝发送到项目仓库 svn log 显示一些版本或者文件的日志信息 svn add 把文件以及目录的名称添加给版本控制系统,它们会在下次 提交时被添加到项目仓库之中去 svn mkdir 创建版本控制下的新目录 svn delete 从版本控制系统中移除文件或者目录 svn move 移动或者重命名工作拷贝或者项目仓库中的文件或者目录 svn copy 在工作拷贝或者项目仓库中制造包括历史在内的复本 svn diff 显示两个路径之间的差异 svn revert 恢复工作拷贝中的文件(撤销最新的本地修改) svn import 提交一个无版本的文件或者树到项目仓库
  • 21. 如何使用SVN工作高级主题 锁策略 标签 分支 冲突合并
  • 22. 工作介绍及成果演示工作过程 Week 1:Apr.7-Apr.11 预研 搭建本机环境,安装Subversion服务器端和客户端 Week 2:Apr.14-Apr.18 在windows server 2003平台上搭建Apache2+Subversion 开始使用cvs2svn迁移原CVS数据 在Solaris平台上搭建Svnserve方式的Subversion服务 Week 3: Apr.21-Apr.25 使用cvs2svn迁移大部分原CVS数据 增加权限管理 Week4: Apr28,29 使用svn importer迁移biz,oa,sol等CVS数据
  • 23. 进一步计划Trac研究 Trac 是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。 Trac 以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件。 http://10.1.2.174/trac/proj_test/ http://10.1.2.174/svn/
  • 24. 进一步计划支持SVN的其他工具研究 SVNControl,SVNNotify,StatSVN等 编程访问Subversion 高级项目仓库管理 分割项目仓库 合并项目仓库
  • 25. 参考资料Subversion官方网站,http://subversion.tigris.org Subversion官方文档, http://svnbook.red-bean.com 《版本控制之道——使用SubVersion,第二版》 Subversion开源培训 http://www.polarion.org/index.php?page=overview&project=subtrain