没有版本控制?
代码管理混乱
备份多个版本,占用磁盘空间大
解决代码冲突困难
容易引发BUG
难于追溯问题代码的修改人和修改时间
难于恢复至以前正确版本
无法进行权限控制
项目版本发布困难
什么是版本控制?
版本控制(Revision control)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。
SVN简介
Svn(Subversion)是近年来崛起的版本管理工具,在当前的开源项目里(J2EE),几乎95%以上的项目都用到了 SVN。Subversion 项目的初衷是为了替换当年开源社区最为流行的版本控制软件 CVS,在 CVS的功能的基础上有很多的提升同时也能较好的解决 CVS 系统的一些不足。
SVN服务器运行方式
独立服务器方式
svnserve
借助Apache方式
mod_dav_svn
SVN版本数据存储方式
BDB (Berkeley DB)
数据库方式
FSFS
文件方式 (推荐)
Subversion:是一种开放源码的全新版本控制系统。是新一代的版本控制工具,由于其优于CVS的一些特点,得到了越来越多人的关注和使用,支持可在本地访问或通过网络访问的数据库和文件系统存储库。不但提供了常见的比较、修补、标记、提交、恢复和分支等功能,而且Subversion 还增加了追踪移动和删除的能力。此外,它支持非 ASCII 文本和二进制数据,所有这一切都使 Subversion 不仅对传统的编程任务非常有用,同时也适于 Web 开发、图书创作和其他在传统方式下未采纳版本控制功能的领域。
Subversion 组件
服务器组件 (管理员使用)
svnadmin:用来调整和修正svn档案库的工具
svnserve:一个独立的服务器程序, 可以作为服务器行程执行, 或是被 SSH 启动; 另一个让你的档案库在网络上可供其它人存取的方法.
客户端组件(用户使用)
svn:命令行客户端程序,这是用来管理数据的主要工具。
SVN 工作的的基本思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。由仓库管理员统一管理这些源程序.这样,就好象只有一个人在 修改文件一样.避免了冲突.每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用 SVN 命令进行提交,由 SVN仓库管理员统一 修改.这样就可以做到跟踪文件变化,冲突控制等等。
Subversion建立仓库
建立svn仓库
命令svnadmin create 仓库名称,如:
svnadmin create F:\software\repository\svn\itcast
Subversion启动
svn服务器启动
cmd命令行启动
svnserve -d –r 文档仓库路径
-d 后台执行
-r 版本库的根目录
Windows服务自动启动
利用xp、2000 以上的系统自带的工具service control,执行文件是sc.exe
sc create SVN-Service binpath= “F:\software\svn\bin\svnserve.exe –service -r F:\software\repository\svn” displayname= “SVN-Service” start= auto depend= Tcpip
Subversion权限配置
svn 仓库权限配置
svnserve.conf 定义所有认证和授权政策
passwd 存放项目成员帐户信息
authz 主要是做复杂的群组权限控制
Svnserve.conf
anon-access
指明仓库匿名用户访问的权限,可选值(none:不能访问;read:匿名可读;write:匿
名可写),一般设置为none,避免匿名访问,出非你的项目为开源项目。
auth-access
指明被授权通过的用户的权限,可选值同上。
password-db
指定了被授权用户的用户名及密码的文件,可以在passwd 文件中设置用户名与密码。
authz-db
实现了以路径为基础的授权,也就是判断用户是否有操作对应路径的权限,在
Subversion 1.3 之后,svnserve 和Apache 一样都可以使用“authz-db”文件。
passwd
默认在[users]下有两个被注释了的用户信息,可通过去掉注释或自
己增加一行用户信息。例如:
itcast = lengyu (前面是用户名,后面是密码)
Subversion客户端命令
svn常用命令
svn checkout -从版本库取出一个工作拷贝
svn commit -将改动的文件提交到版本库
svn update -更新你的工作拷贝
svn add-向版本库中添加新文件
svn delete-从版本库中删除文件
svn revert-取消所有的本地编辑
svn info-显示本地或远程条目的信息
svn list-列出版本库目录的条目
svn status-查看当前工作区状态
svn help-获取帮助信息
对于每一个更新的项目开头都有一个表示所做动作的字符,这些字符有下面的意思:
A添加
D删除
U更新
C冲突
G合并
Subversion目录规范
创建三个顶级目录
/trunk 存放开发的“主线”
/branches 存放支线副本
/tags 存放标签副本
Subversion 提供了主线、分支管理技术,使得在软件开发中可以更方便、灵活的对项目的进度、版本的发布、版本的维护、软件功能的拓展与定制进行管理。
主线(trunk):一个项目建立时就存在,并伴随着项目的成长而不断的成长,直到项目完全结束。
分支(branch):一般是指功能分支,例如:我们的某个项目要添加一个模块,但这个模块又比较复杂,实现难度比较大。为了不影响主线的稳定,我们就可以创建一个功能分支来专门开发这个模块,当这个模块开发完成以后,并通过测试部门的各项测试,再合并到主线中去。再比如,我们的交警 GPS 项目已经开发完成了,但是这个项目是给泉州交警做的,现在我们又接到了一个交警项目,不过是要给厦门交警大队的。现在厦门交警大队要求我们给他们定制一些功能。我们又不想再主线上进行修改,这个时候,我们也可以创建一个分支,并在这个分支上开发,这时是不会对主线造成影响的。等给厦门开发完成了以后,我们发现,他们要求的有些功能其实很好,以后别的地方可能也需要同样的功能。这个时候我们就可以根据我们的需要,将有用的模块有选择的合并到主线中来。
标签(tag):标签和分支一样,也是一个目录,不过这个目录中一般存放的是发布的信息(当然我们也可以只用分支,但是用标签更清楚明了一些)。还是拿我们的交警项目来举个例子:我们的交警项目开发完成了以后,要拿给泉州交警大队用了,也就是要发布(release),假设这个版本叫做1.0.2。这个时候,我们就要创建一个标签,当泉州交警大队用了三个月,发现了一个 BUG,我们只需要签出这个标签中的代码(它和我们刚提供给泉州交警大队时候的是一模一样的),进行调试,并修正这个 BUG。然后再发布一个版本,假设叫做1.1.0,这个时候我们就在创建一个 1.1.0的标签……
要注意,标签目录里面的代码,要进行严格的控制,除了修正 BUG 外,不能做任何其他的事情。
Tortoisesvn介绍
TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,不需要为使用它而付费。
TortoiseSVN是 Subversion 的 Windows 扩展。它使你避免接触 Subversion 枯燥而且不方便的 Command Line。它完全嵌入 Windows Explorer,使用时只需在正常的窗口里右键操作就可以了。
注意事项
注意:.svn这个隐藏目录记录着两项关键的信息: 工作文件的基准版本和一个本地副本最后更新的时间戳。千万不要手工修改或删除这个 .svn隐藏目录和里面的文件!!! 否则将会导致你本地的工作拷贝 (静态视图)被破坏,无法再进行操作。
SVN与Eclipse整合
SVN与Eclipse整合
下载SVN插件(http://subclipse.tigris.org)
我们使用版本eclipse_svn_site-1.6.5.zip
解压到一个文件夹中
进入eclipse 安装目录中dropins目录并创建一个subclipse.link 的文本文件(文件名任意)。内容为:path=解压缩路径
1、从官网下载site-1.6.13.zip文件,网址是:subclipse.tigris.org,2、从中解压出features与plugins文件夹,复制到E:\MyEclipse\myPlugin\svn里面,其它的*.xml文件不要。3、在E:\MyEclipse\MyEclipse8.5\dropins下新建文件svn.link,内容是:path=E:\MyEclipse\myPlugin\svn 保存。4、删除E:\MyEclipse\MyEclipse8.5\configuration\org.eclipse.update文件夹5、重启myeclipse就一切正常了。
SVN与Apache整合
SVN与Apache整合
下载Apache(http://httpd.apache.org/download.cgi)
安装apache_2.2.14-win32-x86-no_ssl.msi
打开Apache安装目录下Apache2.2\conf\httpd.conf 配置文件:
将下列2行前方的#移除(第83 行):
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
并同时在上面两行下面增加以下两行(一定放在这个位置)
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
找到Subversion 安装目录下的以下两个文件
bin/mod_authz_svn.so
bin/mod_dav_svn.so
复制到Apache 安装目录下modules 目录中。
SVN与Apache整合
使用Apache 安装目录下的bin/htpasswd.exe 可执行文件来生成授权文件,第一次生成使用-cb 参数:
htpasswd -cb [filename] [username] [password]
例如:htpasswd -cb passwd.apache 用户名 密码 (其中用户名需为svn中添加的用户名)
将生成的passwd.apache 文件移动到SVN版本库中\conf 目录下
apache 安装目录下的conf\httpd.conf 文件的最后面加入:
配置虚拟目录
引用远程访问模块
DAV svn
项目版本库路径
SVNPath F:/software/repository/svn/itcast
授权文件
AuthzSVNAccessFile F:/software/repository/svn/itcast/conf/authz
所有用户都需要身份验证
Satisfy Any
Require valid-user
验证方式
AuthType Basic
项目的名称
AuthName “itcast”
用户文件
AuthUserFile F:/software/repository/svn/itcast/conf/passwd.apache
访问方式:
“http://localhost/svn/itcast”
使用SVN我们应该?
经常更新:降低冲突的可能性
提交前需在本机测试通过:降低将问题代码传到版本库
提交时一定写备注:方便其他员工查看和自己以后恢复
对于不需要提交的文件不要提交到版本库
CVS 简介
CVS - Concurrent Versions System(并发版本管理系统)是一个版本控制管理系统,它是SVN出现之前最为广泛使用的一个版本控制系统。 CVS的优点就不多说了,总之没有它,早期的软件工程就基本无法实现,就无法凝聚广大程序员的力量。它在软件工程中的作用实在是无可比拟的。 一直到现今的版本控制的主流SVN出现之后,它才慢慢的逐步淡出我们的视线。
CVSNT 界面说明
Server Information,用于查看服务器信息及一些简单的统计信息;
Respository configuration,配置CVS仓库,包括添加、删除等;
Server Setting,配置服务器运行的一些参数,诸如端口、加密、压缩等选项;
Capatiblity Options,有关兼容性的选项,在这里主要配置一个兼容非cvsnt客户端的版本响应为cvs 1.11.2;
Plugins,插件配置,安装完成可以不用管的~;
Advanced,安装完成后也不用管了;
About,在这里可以管理cvsnt服务的状态,停止或启动cvsnt和cvsnt lock服务。
CVSNT 仓库
创建仓库(Ropository)
安装完成后,打开 “开始”菜单——>“程序”——> “CVSNT”——> “CVSNT Control Panel” 程序 ,打开cvs管理窗口,选择“Ropository configuation”选项卡,单击“add”按钮添加仓库,location为仓库文件夹存放路径。选择一个预先存在的目录路径。Name会自动改为“/目录文件夹”! 这个名子也可以修改(仓库访问别名)。点击OK按钮,它会提示你“这个文件夹不是cvs仓库,是否初始化?”的英文提示。点击“是“。创建仓库完毕。
CVSNT 用户
使用WIN系统帐户
CVSNT默认用户为windows系统用户,即在服务器上创建WIN系统用户(注意权限安全)即可,这样每个仓库都可以使用服务器的系统用户登录管理。
CVS 客户端使用
Eclipse中的使用
subversion软件下载安装
http://subversion.tigris.org
我们使用版本Setup-Subversion-1.6.5.msi
Tortoisesvn下载安装
http://tortoisesvn.net/downloads
360安装卫士软件宝库
我们安装版本TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi
下载CVS服务器
网址为:http://www.cvsnt.com/cvspro/,下载CVSNT 并安装,当前教学所使用的版本号为:
cvsnt-server-2.5.04.3510.msi