bst svn专项培训
TRANSCRIPT
BST-SVNBST-SVN 相关知识专项培训相关知识专项培训
平台技术部 - 配置管理部
施景顺 20110706
主要内容主要内容
几个版本控制工具的比较几种不同开发模式的区别SVN 常用功能和命令介绍svn 常见问题分享介绍Q&A
几个版本控制工具的比较几个版本控制工具的比较CVS、 SVN、
Git 、 ClearCase、 VSS 等SVN vs CVS :集中式版本控制系统SVN :专为解决 CVS 的不足而开发Svn对 cvs 的增强
◦全局性的版本编号◦目录的版本控制◦原子性提交◦更好的二进制文件处理与网络传输控制◦高效、快捷的创建分支与基线◦。。。◦不需要花费资源记录每次的提交文件列表◦分支、基线的创建与合并更加灵活方便
CVS¶Ô±ÈSVN
CVS与 SVN 的对比比较项目 CVS SVN
权限控制
是否依赖系统帐号 依赖 不依赖
可否对分支授权 否 是
是否支持 LDAP认证 否 是
图形化帐号管理 否 是 (集中管理平台 )
用户可否获取忘记口令,修改口令 否 是 (集中管理平台 )
目录,文件名变更 否 是
分支管理
创建分支时间 耗时 * 快分支可见、查询 难 易
二进制文件
二进制优化 否 是二进制文件标识 手工 自动
二进制文件(图形文件)被破坏 易破坏 不易破坏
事物处理
原子提交 否 是修改提交说明 单个文件 是
换行符
可否指定换行符类型 否 是
检查换行符设定,避免跨平台开发带来的混乱 否 是
功能扩展 CVSROOT hooks 脚本
网络带宽
网络带宽占用 高 低脱机命令 否 部分
Git与 Svn 比较Git 相对于 SVN 的优点
◦ 采用了分布式版本库的方式,不必服务器端软件支持。适应分布式的开发环境 本地资源库是远程资源库的完整克隆 每个人都有一个完整的资源库,可以发布自己的分支 使用本地资源库进行版本控制,需要时可以将指定的
修改推送到远程资源库,并能保持完整的版本历史
◦更好的分支合并跟踪能力。◦优越的性能
Git与 Svn 比较Git 相对于 SVN 的不足
◦Git 的使用比 SVN 稍复杂,较难理解◦Git 只适用于 Linux / Unix 平台,没有
Windows 版本◦ Git 缺少集中式的权限管理和控制
git-svn◦目前没有特别的需求场景,个别开发作为兴趣
和习惯在使用
为什么要使用 SVN
成熟的工具
简单实用,满足需求
大部分的使用习惯
基于 svn 的大量二次开发运用
主要内容主要内容
几个版本控制工具的比较几种不同开发模式的区别SVN 常用功能和命令介绍svn 常见问题分享介绍Q&A
几种不同开发模式的区别几种不同开发模式的区别分支开发主干开发Version 开发
分支开发(分支开发( 使用场景 使用场景 ))
单主干多分支 - 并行开发模式◦你的系统只有一个版本发布给最终用户;◦你的维护方式是让客户不断升级到下一个
版本;◦所有对系统的修改都必须包含在下一个版
本中;◦需要频繁的修改前一个发布版本的 bug ,
以及不断开发新的版本。◦网站、 CRM、 ASC 的广告应用等大多数
java的web 应用程序
分支开发(分支开发(图例图例))
分支开发(分支开发(结构模式结构模式))
分支名称 源分支 开发方式 对应版本
trunk 无 主干冻结,不允许开发
当前已经发布的版本 -R
tags trunk 测试和发布专用分支,该分支代码不允许任何形式的修改
当前正在测试的版本 -Test当前已经发布的版本 -R
branches trunk 开发专用分支 当前正在开发的版本 -Dev
主干开发(主干开发( 使用场景 使用场景 ))单主干 - 串行开发模式
◦你的系统只有一个版本发布给最终用户;◦你的维护方式是让客户不断升级到下一个
版本;◦所有对系统的修改都必须包含在下一个版
本中;◦已发布版本的 bug 是可控的,极少存在进
行下一个版本开发过程中进行上一版本bug 的修复工作。
◦ASC-算法,内容平台等 c++ 应用,平台技术部的公用类库和应用开发
主干开发(主干开发(图例图例))
主干开发(主干开发(结构模式结构模式))
分支名称 源分支 开发方式 对应版本trunk 无 项目开发人员主
要分支 ,其他人员无需使用该分支
当前正在开发的版本 -Dev
tags trunk 测试和发布专用分支,该分支代码不允许任何形式的修改
当前正在测试的版本 -Test
当前已经发布的版本 -R
branches ─ ─ ─
versionversion 开发(开发( 使用场景 使用场景 ))
多主干 -串行开发模式 (主干开发的变体 )
◦你的系统有多个版本发布给最终用户;◦每个版本的维护都是独立进行的,只在需
要的时候才进行各版本的合并维护;◦已发布版本的 bug 是可控的,极少存在进
行下一个版本开发过程中进行上一版本bug 的修复工作。
◦采取主干开发的理论上都可以采取 version开发模式,例如 BT 的需求
versionversion 开发(开发(图例图例))
VersionVersion 开发(开发(结构模式结构模式))分支名称 源分支 开发方式 对应版本
trunk 无 主版本的开发分支
当前正在开发的版本 -Dev
version Trunk/version
维护版本的开发分支
当前正在开发的版本 -Dev
tags trunk 测试和发布专用分支,该分支代码不允许任何形式的修改
当前正在测试的版本 -Test
当前已经发布的版本 -R
branches ---- ----- ---
主要内容主要内容
几个版本控制工具的比较几种不同开发模式的区别SVN 常用功能和命令介绍svn 常见问题分享介绍Q&A
Svn 的使用客户端工具
◦Eclipse插件 Subclipse :稳定、快速 Subversive :模仿 CVS风格
◦TortoiseSVN 与Windows 系统集成,方便易用
命令行方式
SvnSvn 常用命令常用命令1、将文件 checkout到本地目录svn co path( path 是服务器上的目录)例如: svn co
http://svn.alibaba-inc.com/repos/ali_asc/CSA/MLR/trunk/ MLR
2、往版本库中 add新的文件svn add file例如: svn add test.php(添加 test.php ) svn add *.php(添加当前目录下所有的 php 文件 )
3、将改动的文件 commit到版本库svn ci -m “LogMessage“ PATH例如: svn ci -m “add test file for my test“ test.php
Svn 常用命令常用命令4 、更新 update到某个版本svn up -r m path例如: svn up如果后面没有目录,默认将当前目录以及子目
录下的所有文件都更新到最新版本。
5、查看文件或者目录状态 statussvn st path (目录下的文件和子目录的状态,正常状态不显示)【 ?:不在 svn 的控制中;M :内容被修改; C :发生冲突; A :预定加入到版本库; K :被锁定】
6 、删除文件svn rm path -m “delete test fle“例如: svn rm test.php 然后再 svn ci -m ‘delete test file‘
Svn 常用命令常用命令7 、查看文件详细信息svn info path例如: svn info test.php
8、查看日志svn log path例如: svn log test.php -v (显示这个文件的所有
修改记录,及其版本号的变化)Svn log --stop-on-copy
http://svn.alibaba-inc.com/repos/ali_asc/SYS/imatch2cn/branches/20110511_43459_1 -v(查看某个分支从创建版本开始显示的修改信息 ,创建版本号对分支合并非常关键,获取送测版本的初始版本 )
Svn 常用命令常用命令9 、比较差异svn diff path( 将修改的文件与基础版本比较 )例如: svn diff test.phpsvn diff -r m:n path( 对版本m和版本 n比较差异 )svn diff -r 200:201 test.php
10、将两个版本之间的差异合并到当前文件svn merge -r m:n path例如: svn merge -r 200:205 test.php (将版本 200与
205之间的差异合并到当前文件,如果产生生冲突,需要手工处理一下)
11、 SVN 帮助svn helpsvn help ci
Svn merge 机制svn merge -r m:n path这个命令是包括三个参数的 : 1. 初始的版本树 2. 最终的版本树 3. 一个接收区别的工作拷贝。
合并的过程中发生的所有事 :首先两个版本库树的比较,然后将区别应用到本地拷贝 .
如果 n>m ,则是增加内容合并如果m<n ,则是回滚操作
主要内容主要内容
几个版本控制工具的比较几种不同开发模式的区别SVN 常用功能和命令介绍svn 常见问题分享介绍Q&A
http://b2b-doc.alibaba-inc.com/pages/viewpage.action?pageId=29899979
svn 常见问题分享介绍
Svn 的未来1.7 Early of 2012
◦网络协议的性能提升◦客户端文件系统格式升级
类似 Git 的数据格式 提升客户端性能 大大减少文件数量,降低空间占用
Q& AQ& A
谢谢!