23
www.zhlwish.com Subversion 简简简简 www.zhlwish.com

Subversion简明教程

  • Upload
    liang

  • View
    4.633

  • Download
    12

Embed Size (px)

DESCRIPTION

An simpe

Citation preview

www.zhlwish.com

Subversion 简明教程

www.zhlwish.com

www.zhlwish.com

Subversion 简述• 简称 SVN

• 流行的开源版本控制系统

• CollabNet 公司 2000 年创建用于替代 CVS

• Subversion 被贡献给了 Apache ,成为 Apache 的一个子项目

www.zhlwish.com

Subversion 安装• Ubuntu

– apt-get install subversion

• Windows– Windows GUI 客户端:

• http://tortoisesvn.net

– Subversion for Windows ( 控制台程序 )• http://sourceforge.net/projects/win32svn/

www.zhlwish.com

Subversion 安装• 设置环境变量

– 将 C:\Program Files\Subversion\bin 加入环境变量

www.zhlwish.com

对版本控制的需求• 协作:合作开发时能共享代码并及时集成• 历史:能追踪改变,能还原之前的版本

• Subversion 并不是一个只能用于管理源代码的系统,它是通用的,可以管理任何类型的文件集(电影、账单)

www.zhlwish.com

版本控制的原理• Subversion 的版本库实质是一种文件服务

器,核心功能是:– 共享文件

• 在共享文件的过程中,会记录每一次改变– 文件的改变(修改)– 目录树本身的改变(删除、忽略)

www.zhlwish.com

共享文件时存在的问题

www.zhlwish.com

方案一:锁定 - 修改 - 解锁• 问题:

– “ 死锁”:• Harry 锁定文件后忘记解

锁– 非线性开发:

• 如果 Harry 锁定一个文件修改其头部, Sally 需要修改其尾部,不得不等

– 死锁:• Harry 编辑 A 文件,依赖

B 文件,但是 Sally 在修改 B 文件,依赖 A 文件

www.zhlwish.com

方案二:拷贝 - 修改 - 合并

www.zhlwish.com

方案二解释• 冲突

– Sally 和 Harry 的修改交迭了(修改了同一行代码)– Subversion 并不能解决冲突,只能依赖人的智商– 手动解决冲突后,将合并的版本再次提交到版本库

• 锁定– 有时候是必须的– Subversion 支持锁定

www.zhlwish.com

Subversion 术语• 版本库 URL

http://ei.hust.edu.cn:9000/svn/efile/trunk

协议 服务器地址 端口 路径 分支

• Working Copy– 电脑上的一个普通目录– 每个文件夹下有个 .svn 文件夹(记录变更)– 里面的文件在版本控制之下

• 不能使用系统命令删除与重命名• 需要使用 Subversion 提供的命令将其从版本库中删除和重命名

www.zhlwish.com

Subversion 术语• Checkout

– 从代码仓库中下载源代码,并建立本地的 Working Copy

• Commit– 对本地 Working Copy 修改后,提交到代码仓库

• Update– 远程代码仓库修改后,同步本地 Working Copy 到最新

状态

www.zhlwish.com

Subversion 术语• Revision

– 版本库收到一个新的提交后,版本库进入一个新的状态,被称为一个 Revision ,用一个唯一的数字标识,初始为 0 ,每提交一次 +1

• Merge– 合并

• Conflict– 冲突

• Repository– 仓库

www.zhlwish.com

Subversion 的组成• svn

– 命令行客户端,用于 checkout 、 commit 、 update

• svnversion– 查看 Working Copy 的版本

• svnlook– 查看远仓库的情况

• svnadmin– 创建、设置、修改版本仓库

• svnserve– 单独的服务器程序,可以作为 daemon 进程

• svnsync• ……( 请查阅相关资料 )

www.zhlwish.com

基本命令• 查看帮助

– svn help [command]

• 创建一个版本库– svnadmin create /path/to/repository

• 将已有的代码结构导入版本库– svn import /file/path /path/to/repository –m ‘comment’

www.zhlwish.com

基本命令• Checkout 代码

– svn checkout /path/to/repository

• 修改目录结构– svn add– svn delete– svn copy– svn move– svn mkdir

• 修改文件– 神马?不会修改文件?

www.zhlwish.com

基本命令• 看看修改了哪些

– svn diff– svn status

• 取消修改– svn revert

• 解决冲突 ( 标记为冲突已经被解决 )– svn resolved

• 提交修改– svn commit –m ‘comment’

www.zhlwish.com

基本命令• 更新 Working Copy

– svn update

• 查看历史– svn log –r 5:19– svn log –r 5– svn log main.c– svn diff –r 5:19 main.c

• 浏览版本库– svn cat– svn list

www.zhlwish.com

基本命令• 获得旧的版本

– svn checkcout –r 5– svn update –r 9

• 忽略不需要版本控制的文件– svn propset svn:ignore /path/to/file– 涉及 SVN高级用法:属性,请参阅相关文档

• 锁定– svn lock /path/to/file –m ‘comment’– svn unlock /path/to/file

• 遇到问题– svn cleanup

www.zhlwish.com

一些关键字• 可以认为是宏:

– HEAD :最新版本– BASE : Working Copy 修改前的版本

• 推荐的版本库布局/project name

/trunk 主枝 /branches 开发分支 /tags 标记分支

www.zhlwish.com

高级知识• 分支

– svn copy /srcrepo /distrepo –m ‘comment’– svn checkout /distrepo

• 合并分支 ( 和文件的合并不同 )– svn merge

• 建立标记分支– svn copy /srcrepo /version_3_2_1

• 搭建一个 SVN 服务器并配置权限

www.zhlwish.com

进一步学习• Subversion自由图书

– Version Control with Subversion– http://svnbook.red-bean.com

• 实践出真知

• 不用仅仅使用 SNV 管理你的代码,他可以管理任何东西

www.zhlwish.com

www.zhlwish.com

Where there is a will there is a way.