(一)版本管理意义
- 回溯对比--查找代码变更位置、更改人。对于原来没有、而突然出现的bug,可以重点查找变更代码,定位产生bug的代码段。
- 代码统计--统计时间段内小组成员的代码量(工作量)。
- 软件更新--针对以前发布的软件版本,如果使用最近代码进行重新编译发布,很可能产生运行错误(例如,使用的数据库结构有变动)。则可以从源代码库获得当时发布使用的源代码,在此基础上修订重新发布。
- 协同开发--多成员进行并行开发时,容易产生多人同时修改一个文件,提交后易互相覆盖修改的代码,使用管理工具可以进行代码对比合并。
- 代码安全--控制开发人员、管理人员、测试人员对源代码、设计文档等开发资料的不同访问权限,例如测试软件不能浏览代码,编码人员不能修改设计文档等。
(二)常用版本管理工具
- 常用的代码版本管理工具有:VSS、CVS、TFS、SVN
- VSS:
- 基于文件夹的权限管理,开发人员有了write的权限,就有了删除文件夹的权限,一个开发人员发飙,可以让整个小组的开发代码全废掉
- VSS 6.0版本也支持HTTP方式访问,可惜速度慢,估计是传输时没压缩吧
- 基于文件的版本控制,无法追踪文件夹的变更
- 文件更名后,文件的修改历史就断了,无法查询更名前的历史
- 文件可永久删除,会造成代码丢失
- TFS
- 是以SQLServer数据库作为存储后台
- 配置管理复杂、访问速度慢、运行时间长后占用空间大、备份迁移繁琐
- VSS的一些缺点也都继承过来了(文件更名后修改历史割裂)
- 支持代码签入审核
- CVS,就不多说(我也未正式用过),SVN的出现就是要替代它。
- SVN 下面详细介绍吧
- VSS:
(三)SVN简介
- SVN--Subversion简称,开源版本管理工具,有开源客户端工具与Ecllipse、VS2005等IDE集成。
- svn服务有2种运行方式:独立服务器和借助apache网络访问。
- 存储版本数据也有2种方式:BDB和FSFS,BDB是数据库管理方式,不推荐,因为长时间运行,会产生太多日志文件,占用磁盘空间,易产生数据库以外锁住,造成无法正常访问错误。
- 管理二进制版本时,节约空间。仅标记、保存二进制数据变化部分。
- 有多款插件支持,对其功能进行扩展。
(四)SVN服务端安装
- 下载地址:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100
- 我选的版本为Setup-Subversion-1.6.6.msi
- 双击进行安装,选择安装目录为:D:/Dev_Tools/Subversion/ 注意:不要安装到系统盘C:,避免系统出问题,格式化系统盘是损坏代码库
- 一路Next,完成服务端安装
(五)SVN客户端安装
5.1 TortoiseSVN
-
是常用Windows下的SVN客户端软件,以资源管理器进行集成,安装在服务器端,可以方便建库、浏览,避免使用命令行操作源代码库;
-
下载地址:http://tortoisesvn.net/downloads
- 我下载的版本:TortoiseSVN-1.6.7.18415-win32-svn-1.6.9.msi
- 中文帮助:http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/
- 一路Next安装吧(安装路径做好放在非系统盘)
- 在服务器端一要安装一个,可以方便对库的创建、管理
5.2 Ankhsvn
- 在VS中管理源代码的Subversion的插件
- 下载地址:http://ankhsvn.open.collab.net/servlets/ProjectProcess;jsessionid=F000341F5B3BCA49AC46DB550694E000?pageID=3794
- 我下载的版本: AnkhSvn-2.1.7756.392.msi
- 一路Next安装吧,没啥可设置的
(六)版本库管理
- 创建版本库 在服务器端,需要创建版本库的文件夹内点右键,在右键菜单中 TortoiseSVN-->Create repository here
- 导入源代码方式 1 ---- 借助TortoiseSVN
- 找到源代码目录,点右键,在右键菜单中 TortoiseSVN-->Import... 弹出对话框
- URL of Repository中填写为 file:///D:/Dev_Tools/Subversion/svnrepos/FGIS,也就是创建库的文件目录,最后点击 【OK】按钮,导入数据
- 注意: 导入数据目录下源代码无关文件(源代码编译时的中间文件)都删除,然后导入。例如:*.ncb、*.lib等
- 导入源代码方式 2 ---- 借助VS 2005的插件AnkSVN
- 打开VS2005,进入菜单 工具-->选项-->Source Control,修改为AnkhSVN
- 打开一个解决方案
- 在解决方案上点击右键,进入菜单 Add solution to Subversion,弹出对话框
- 填写项目名称,在版本库中创建新项目
(七)版本库访问
- 文件方式访问
- 在资源管理器中点右键,进入菜单 打开TortoiseSVN-->repo-browser,弹出版本库浏览对话框
- 在URL中填写路径: 类似:file:///D:/Dev_Tools/Subversion/svnrepos/FGIS
- 回车确认,对话框中列出此版本库中所有文件
- SVN服务方式访问
- 启动SVN服务
- 启动服务方式一(人工启动)
- 打开CMD窗口
- 输入 svnserve.exe --root D:/Dev_Tools/Subversion/svnrepos --daemon,回车确认
- 注意 1 --root D:/DevTools/Subversion/svnrepos 表示版本库的根路径,其下可以包含多个版本库;
- 注意 2 --daemon 使其以守护进程方式运行,用户不要关闭命令行界面,否则服务程序关闭
- 启动服务方式二(以windows服务方式自动启动)
- 打开CMD窗口
- sc create svnserve binPath= "D:/DevTools/Subversion/bin/svnserve.exe --service --root D:/DevTools/Subversion/svnrepos" displayname= "SvnReposserver" depend= Tcpip start= auto
- sc是windows自带的服务配置程序
- binPath表示svnserve可执行文件的安装路径
- --service参数表示以windows服务的形式运行
- --root指明svn repository的位置
- service参数与root参数都作为binPath的一部分,因此与svnserve.exe的路径一起被包含在一对双引号当中
- displayname表示在windows服务列表中显示的名字
- depend =Tcpip 表示svnserve服务的运行需要tcpip服务
- start=auto表示开机后自动运行
- 重启计算机,svnserve将以windows服务的方式自动启动,如果未能正常启动,手工设置服务为自动启动,并启动它。如果还是无法启动,检查一下路径是否正确,tcpip是否启动??(winxp系统,有时未必安装tcpip服务)
- 启动服务方式一(人工启动)
- 版本库浏览
- 在资源管理器中点右键,进入菜单 打开TortoiseSVN-->repo-browser,弹出版本库浏览对话框
- 在URL中填写路径: 类似:svn://localhost/FGIS
- SVN:后面是双线,与FILE方式访问的三线不同
- localhost出填写主机名或IP地址,也就是说,是以IP/TCP协议方式访问,可以再网络中访问其他机器的版本库
- FGIS,是相对路径,是在开启服务时设置的根路径下的目录
- 启动SVN服务
- SVN服务方式访问的权限设置
- 编辑版本库目录下的conf/authz、conf/passwd、conf/svnserve.conf三个文件,可以控制用户对版本库的访问
- conf/svnserve.conf 文件修改
[general]
anon-access = none 去除此行前的#,修改为=none,表示无法匿名访问版本库
auth-access = write 去除此行前的#,表示使用授权方式访问
password-db = passwd 去除此行前的#,表示当前路径下的passwd文件中描述了用户名、密码
authz-db = authz 去除此行前的#,表示当前路径下的authz文件中描述了目录方式控制用户访问版本的规则 - password-db = passwd 用户/密码文件修改
以如下方式添加用户名和密码:
[users]
emma = emma #测试人员 emma
eric = eric #开发人员 eric
carel = carel #开发人员 carel
lee = lee #管理人员 lee - authz 授权规则文件 将用户划分为组,将版本库的目录、子目录的访问权限分配给组
[groups]
admin_group = lee 管理组成员
dev_group = eric,carel 开发组成员
test_group = emma 测试组成员
[FGIS:/trunk]
@test_group = r 测试小组对版本库trunk目录有只读权限
@admin_group = rw 管理小组对版本库trunk目录有只读权限
@dev_group = rw 开发小组对版本库trunk目录有只读权限 - 重新启动SVN服务
- 以TortoiseSVN方式浏览,或者在VS2005中以AnkSVN插件打开,都要求输入用户名、密码验证