用 svn 进行源代码管理

Post on 01-Jan-2016

42 views 9 download

description

周敏 (0734061009) coderplay@gmail.com. 用 svn 进行源代码管理. 本文档归暨南大学计算机系 open talk 组版权所有 遵循 Creative Commons Attribution 2.5 协议. 摘要. 为什么我们需要源代码管理 ? 什么是 svn? svn 的基本概念与常用命令 分支与合并 怎么使用 svn 客户端 ? 怎么建立自己的源代码库 ? 怎么把 svn 建立在网页上 ?. 为什么我们需要源代码管理 ?. 代码回归 多人协作开发 版本发布 发布新版本时 , 不中止开发进程 - PowerPoint PPT Presentation

Transcript of 用 svn 进行源代码管理

用 svn 进行源代码管理

周敏 (0734061009)

coderplay@gmail.com

本文档归暨南大学计算机系 open talk 组版权所有

遵循 Creative Commons Attribution 2.5 协议

摘要

为什么我们需要源代码管理 ? 什么是 svn? svn 的基本概念与常用命令 分支与合并 怎么使用 svn 客户端 ? 怎么建立自己的源代码库 ? 怎么把 svn 建立在网页上 ?

为什么我们需要源代码管理 ? 代码回归 多人协作开发 版本发布

发布新版本时 , 不中止开发进程有特殊版本时 , 可以创建分支

不同版本具有相同的 bug 时,进行修复 追踪变化 自动构建

什么是 svn? svn(Subversion) 是个自由、开源的版本控

制系统 svn 的版本库可以通过网络访问 svn 不是软件配置管理 (SCM) 系统,而是一

个通用系统

svn 结构

版本库版本库是 svn 文件共享的核心,它储存所有的数据。按照文件树形式存储数据——包括文件和目录。

版本模型从版本 0 开始,版本库的快照。

文件共享的问题所有的版本控制系统都需要解决这样一个基础问题:怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰? 版本库里意外覆盖别人的更改非常的容易。

我们有两个共同工作者, Harry 和 Sally ,他们想同时编辑版本库里的同一个文件。如果首先 Harry 保存他的修改,过了一会, Sally 凑巧用自己的版本覆盖了此文件。而 Harry 所有的修改不会出现在 Sally 的文件中,所以Harry 的工作还是丢失了。

文件共享:锁定-修改-解锁方案(1)

文件共享:锁定-修改-解锁方案(2) 锁定可能导致管理问题

如果 Harry 锁住文件后忘了此事 , 则 Sally 僵住。 锁定可能导致不必要的线性开发

Harry 编辑一个文件的开始 , 而 Sally 编辑此文件的结尾。本来不冲突,修改后合并即可。

锁定可能导致错误的安全状态如果 Harry 锁住 A , Sally 锁住 B ,而两文件

相互依赖,则两文件不能很好地工作。

文件共享:拷贝-修改-合并方案(1)

文件共享:拷贝-修改-合并方案(2) 合并模型假定文件是可以根据上下文合并的

文本文件例如程序源代码。

对于二进制文件,可以采用锁定模型如艺术品或声音,有必要采用锁定让用户轮流

修改文件。如果没有线性的访问,有些人的工作最终要被放弃。

svn 两种模型都支持

svn 操作基本流程 (1) 取出版本库到本地工作拷贝

svn checkout

更新你的工作拷贝 svn update

做出修改 svn add svn delete svn copy svn move

svn 操作基本流程 (2)检验修改

svn status svn diff svn revert

合并别人的修改到工作拷贝 svn update svn reslove

提交你的修改 svn commit

其它操作命令检视历史记录

svn log svn diff svn cat svn list

清除 svn cleanup

导入 svn import

分支与合并 (1) 什么是分支 使用分支

创建分支在分支上工作分支背后的关键概念

在分支间拷贝修改拷贝特定的修改合并背后的关键概念合并的最佳实践

分支与合并 (2) 常见用例

合并一条分支到另一条取消修改找回删除的项目常用分支模式

转换工作拷贝标签 分支维护

svn 客户端

Windows 客户端 (1)

Revision 23/tags/xlands0.4/asguard/src/com/xlands/asguard/OutputWriter.java

Revision 21/trunk/src/com/xlands/asguard/OutputWriter.java

Revision 20/tags/xlands0.4/asguard/src/com/xlands/asguard/OutputWriter.java

Revision 17/trunk/src/com/xlands/asguard/OutputWriter.java

Revision 3/trunk/src/com/xlands/asguard/OutputWriter.java

Windows 客户端 (2)

在 eclipse 中使用 svn

配置 svn服务器 (1)

安装 Subversion 建立版本库

通过命令行 (svnadmin create)通过 GUI(tortoiseSVN)

启动 svn服务apache svnserve

配置 svn服务器 (2)

建立 windows服务sc create svn

binpath= "e:\Subversion\bin\svnserve.exe

--service

-r f:\code\svn"

displayname= "Subversion Server"

depend= Tcpip

start= auto

删除windows服务sc delete svn

配置 svn服务器 (3)

访问权限分配初次导入

svn import

Apache(1)

修改 http.confLoadModule dav_module modules/mod_dav.so

LoadModule dav_svn_module modules/mod_dav_svn.so

<Location /repos>

DAV svn

SVNPath /absolute/path/to/repository

</Location>

<Location /svn>

DAV svn

SVNParentPath /usr/local/svn

</Location>

Apache(2)

参考网址 暨南大学计算机系 open talk 组

http://code.google.com/p/jnucsot/ http://subversion.tigris.org/ http://tortoisesvn.tigris.org/ http://subclipse.tigris.org/ http://svnbook.red-bean.com/ http://httpd.apache.org/

Any Question?