用 svn 进行源代码管理
DESCRIPTION
周敏 (0734061009) [email protected]. 用 svn 进行源代码管理. 本文档归暨南大学计算机系 open talk 组版权所有 遵循 Creative Commons Attribution 2.5 协议. 摘要. 为什么我们需要源代码管理 ? 什么是 svn? svn 的基本概念与常用命令 分支与合并 怎么使用 svn 客户端 ? 怎么建立自己的源代码库 ? 怎么把 svn 建立在网页上 ?. 为什么我们需要源代码管理 ?. 代码回归 多人协作开发 版本发布 发布新版本时 , 不中止开发进程 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/1.jpg)
用 svn 进行源代码管理
周敏 (0734061009)
本文档归暨南大学计算机系 open talk 组版权所有
遵循 Creative Commons Attribution 2.5 协议
![Page 2: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/2.jpg)
摘要
为什么我们需要源代码管理 ? 什么是 svn? svn 的基本概念与常用命令 分支与合并 怎么使用 svn 客户端 ? 怎么建立自己的源代码库 ? 怎么把 svn 建立在网页上 ?
![Page 3: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/3.jpg)
为什么我们需要源代码管理 ? 代码回归 多人协作开发 版本发布
发布新版本时 , 不中止开发进程有特殊版本时 , 可以创建分支
不同版本具有相同的 bug 时,进行修复 追踪变化 自动构建
![Page 4: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/4.jpg)
什么是 svn? svn(Subversion) 是个自由、开源的版本控
制系统 svn 的版本库可以通过网络访问 svn 不是软件配置管理 (SCM) 系统,而是一
个通用系统
![Page 5: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/5.jpg)
svn 结构
![Page 6: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/6.jpg)
版本库版本库是 svn 文件共享的核心,它储存所有的数据。按照文件树形式存储数据——包括文件和目录。
![Page 7: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/7.jpg)
版本模型从版本 0 开始,版本库的快照。
![Page 8: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/8.jpg)
文件共享的问题所有的版本控制系统都需要解决这样一个基础问题:怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰? 版本库里意外覆盖别人的更改非常的容易。
我们有两个共同工作者, Harry 和 Sally ,他们想同时编辑版本库里的同一个文件。如果首先 Harry 保存他的修改,过了一会, Sally 凑巧用自己的版本覆盖了此文件。而 Harry 所有的修改不会出现在 Sally 的文件中,所以Harry 的工作还是丢失了。
![Page 9: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/9.jpg)
文件共享:锁定-修改-解锁方案(1)
![Page 10: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/10.jpg)
文件共享:锁定-修改-解锁方案(2) 锁定可能导致管理问题
如果 Harry 锁住文件后忘了此事 , 则 Sally 僵住。 锁定可能导致不必要的线性开发
Harry 编辑一个文件的开始 , 而 Sally 编辑此文件的结尾。本来不冲突,修改后合并即可。
锁定可能导致错误的安全状态如果 Harry 锁住 A , Sally 锁住 B ,而两文件
相互依赖,则两文件不能很好地工作。
![Page 11: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/11.jpg)
文件共享:拷贝-修改-合并方案(1)
![Page 12: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/12.jpg)
文件共享:拷贝-修改-合并方案(2) 合并模型假定文件是可以根据上下文合并的
文本文件例如程序源代码。
对于二进制文件,可以采用锁定模型如艺术品或声音,有必要采用锁定让用户轮流
修改文件。如果没有线性的访问,有些人的工作最终要被放弃。
svn 两种模型都支持
![Page 13: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/13.jpg)
svn 操作基本流程 (1) 取出版本库到本地工作拷贝
svn checkout
更新你的工作拷贝 svn update
做出修改 svn add svn delete svn copy svn move
![Page 14: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/14.jpg)
svn 操作基本流程 (2)检验修改
svn status svn diff svn revert
合并别人的修改到工作拷贝 svn update svn reslove
提交你的修改 svn commit
![Page 15: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/15.jpg)
其它操作命令检视历史记录
svn log svn diff svn cat svn list
清除 svn cleanup
导入 svn import
![Page 16: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/16.jpg)
分支与合并 (1) 什么是分支 使用分支
创建分支在分支上工作分支背后的关键概念
在分支间拷贝修改拷贝特定的修改合并背后的关键概念合并的最佳实践
![Page 17: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/17.jpg)
分支与合并 (2) 常见用例
合并一条分支到另一条取消修改找回删除的项目常用分支模式
转换工作拷贝标签 分支维护
![Page 18: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/18.jpg)
svn 客户端
![Page 19: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/19.jpg)
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
![Page 20: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/20.jpg)
Windows 客户端 (2)
![Page 21: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/21.jpg)
在 eclipse 中使用 svn
![Page 22: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/22.jpg)
配置 svn服务器 (1)
安装 Subversion 建立版本库
通过命令行 (svnadmin create)通过 GUI(tortoiseSVN)
启动 svn服务apache svnserve
![Page 23: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/23.jpg)
配置 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
![Page 24: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/24.jpg)
配置 svn服务器 (3)
访问权限分配初次导入
svn import
![Page 25: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/25.jpg)
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>
![Page 26: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/26.jpg)
Apache(2)
![Page 27: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/27.jpg)
参考网址 暨南大学计算机系 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/
![Page 28: 用 svn 进行源代码管理](https://reader035.vdocuments.pub/reader035/viewer/2022081501/56813187550346895d97fc33/html5/thumbnails/28.jpg)
Any Question?