一、SVN
SVN服务器下载地址:https://subversion.apache.org/
1.什么是版本控制:版本控制是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订系统的系统。
2.没有版本控制会发生哪些糟糕的情况:
(1)代码管理混乱
(2)备份多个版本,占用磁盘空间的大
(3)解决代码冲突困难
(4)容易引发bug
(5)难于追溯问题代码的修改人和修改时间
(6)难于恢复到以前正确的版本
(7)无法进行权限控制
(8)项目版本发布困难
3.SVN简介:SVN(Subversion)是今年来崛起的版本控制工具,在当前的开源项目中(J2EE),几乎95%以上的项目都用到了SVN。Subversion项目的初衷是为了替换当年开源社区最为流行的版本控制系统CVS,在CVS的功能的基础上有很多的提升同时也能很好的解决CVS系统的一些不足之处。
4.SVN工作原理示意图
5.SVN服务器的工作方式
(1)独立服务器方式:svnserve
(2)借助Apache方式:mod_dav_svn
6.SVN版本数据存储方式:
(1)BDB(Berkeley DB):数据库方式
(2)FSFS:文件系统方式(推荐)
7.Subversion(SVN)组件
(1)服务器组件
* svnadmin:用来调整和修正SVN档案库的工具
* svnserve:一个独立的服务器程序,可以作为服务器行程执行,或是被SSH启动;另一个让你的档案库在网络上可供其他人存取的方法。
(2)客户端组件
* svn:命令行客户端程序,这是用来管理数据的主要工具
8.SVN基本交互流程示意图
二、SVN的使用
1.建立仓库:svnadmin create 仓库的路径,例:D: epertorysvn>svnadmin create ./kdyzm
该句命令的作用是在当前文件夹下建立仓库,名称为kdyzm,具体路径为:D: epertorysvnkdyzm
2.启动SVN服务器:
(1)单仓库启动方法:D: epertorysvn>svnserve -d -r ./kdyzm
该命令的作用是启动当前目录下的kdyzm仓库,注意,只启动这一个仓库。
-d:后台启动
-r:指定仓库的目录
启动仓库之后光标会不断闪烁,但是没有任何输出,如果想要关闭仓库,只需要将命令行窗口关闭即可。
(2)将所有仓库启动的方法:D: epertorysvn>svnserve -d -r D: epertorysvn
即不指定具体的仓库,但是将仓库上一级目录作为指定目录
。
3.将SVN写入windows服务的方法:
命令行中执行下面的命令:
sc create SVN-Service binpath= "D:ProgramFilesSVNinsvnserve.exe --service -r D: epertorysvn" displayname= "SVN-Service" start= auto depend= Tcpip
上面的命令中的红色部分表示需要根据实际情况进行修改的。
这样就将SVN写入windows服务中了,通过命令services.msc命令可以查看响应的服务。
如果想要删除该服务,则需要使用下面的命令:
sc delete SVN-Service
其中SVN-Service是服务名。
需要注意的是上面的命令不是SVN的命令,而是windows中的命令。
如果删除之后还想再创建一个新的服务,则可能会出现” 指定的服务已标记为删除。“的提示,出现这种提示的时候,将服务关闭掉这时候服务会自动删除,然后再使用该命令创建新服务即可。
4.仓库下的conf文件夹中三个文件的作用
(1)svnserve.conf :定义所有认证和授权策略
(2)passwd : 存放项目成员账户信息
(3)authz : 主要是做复杂的群组权限控制
5.Subversion客户端命令
客户端命令都使用snv命令完成
svn checkout 从版本库取出一个工作拷贝
svn commit 将改动的文件提交到版本库
svn update 更新你的工作拷贝
svn add 向版本库中添加新文件
svn delete 从版本库中删除文件
svn revert 取消所有的本地编辑
svn info 显示本地或者远程条目的信息
svn list 列出版本库目录的条目
svn status 查看当前工作区状态
svn help 获取帮助信息
6.Subversion目录规范
规定版本库中需要有三个顶级目录
/trunk 存放开发的“主线”
/branches 存放支线副本
/tags 存放标签副本
三、SVN命令行操作示例
1.创建版本库略,假设已经创建好,为/svn/kdyzm
2.客户端使用checkout命令从服务器上取出一份工作拷贝
svn checkout svn://localhost/kdyzm
注意,这里本来应当加上端口号3690,但是由于默认端口号就是它,而且使用的svn协议会自动试探该端口号,所以不加端口号也能够正常访问。
3.向版本库中添加文件
D:clientsvnkdyzm>svn add readme.txt
3.提交到服务器
D:clientsvnkdyzm>svn --message "提交readme.txt" commit
出错了,暂且修改服务器配置文件,使得匿名用户能够有rw的权限:
在svnserve.conf文件中修改配置:
anon-access = write
不需要重新启动服务器,直接重试,重试成功。
4.新建文件夹,在该文件夹中将版本库中的项目checkout出来,发现readme在其中。
5.update命令获取最新版本库内容
D:clientsvnqyzrkdyzm>svn update
6.delete命令删除指定的文件
D:clientsvnqyzrkdyzm>svn delete readme.txt
7.恢复删除的文件
D:clientsvnqyzrkdyzm>svn revert readme.txt
注意能恢复的前提是还没有提交,也就是说没有使用commit命令提交。
8.删除之后提交
这时候,如果再有用户检出,则不再有readme.txt文件
三、Tortoisesvn
1.Tortoisesvn是Subversion版本控制系统的一个免费开源客户端,不需要为使用它而付费。
TortoiseSVN是Subversion的Windows扩展。它使你避免接触Subversion枯燥而且不方便的Commond Line。它完全嵌入Winodws Explorer,使用的时候只需要在正常的窗口中右键操作就可以了。
2.TortoiseSVN下载地址:http://tortoisesvn.net/downloads.html
3.TortoiseSVN图标介绍:
4.注意事项:.svn这个隐藏目录记录着两个关键的信息:工作文件的基准版本和一个本地副本最后更新的时间戳。千万不要手工修改或者删除这个.svn隐藏目录和里面的文件!!否则将会导致你本地的工作拷贝(静态视图)被破坏,无法再进行操作。
四、SVN权限管理
1.为了强制用户登陆访问,必须对SVN进行权限管理
(1)在svnserve.conf文件中,将字段anon-access = read的注释去掉,并且改成anon-acess = none,表示匿名用户没有任何访问权限,包括checkout
(2)在svnserve.conf文件中,将字段auth-access = write的注释去掉,表示通过身份认证的用户有权限写入服务器。
(3)在svnserve.conf文件中,将字段password-db = passwd的注释去掉,表示passwd文件生效,并且作为用户认证的数据库。
(3)在svnserve.conf文件中,将字段authz-db = authz的注释去掉,表示authz文件生效,并且作为权限认证的数据库。
2.做完1的准备工作之后,在passwd文件中配置新用户
方法:键值对的方式,username=password
例如:zhangsan=root
lisi=root
这样就创建了两个用户,密码都是root
3.做完2的准备工作之后,在authz文件中配置权限
配置方法见示例。
主要分为用户组权限管理和针对一个用户的权限管理
还有针对某个文件或者目录的权限管理
4.如何取消保存的认证消息(重要)
右键->TortoiseSVN->settings->Saved data->Authentication Data->clear all(或clear)
五、Eclipse和SVN整合
1.SVN在Eclipse中的安装地址:http://subclipse.tigris.org/update_1.10.x
离线安装包下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
2.具体使用方法自行整理
六、SVN和Apache整合
整合的目的:能够在浏览器上访问版本库。并通过浏览器上的URL地址检出项目。
参考文章:http://blog.csdn.net/tcpipstack/article/details/8683961
1.首先安装好Apache软件,Apache软件下载地址:http://httpd.apache.org/,由于Apache已经不再提供.exe安装包,所以要在Apache官方网站推荐的网站下载指定版本的软件。
2.打开apache安装目录下的%Apache_HOME%/conf/httpd.conf配置文件,在该配置文件中进行修改
(1)首先将%SVN_HOME%/bin目录下的mod_dav_svn.so和mod_authz_svn.so 两个文件复制到Apache服务器下的modules文件夹下。
(2)修改%Apache_HOME%/conf/httpd.conf文件
将 LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
这两行注释放开
(3) 在文件末尾添加如下内容:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
(4)使用htpasswd命令(Apache目录下的bin文件夹中的命令)对用户名和密码加密并生成加密文件。
htpasswd.exe -cb passwd.apache zhangsan root
htpasswd.exe -b passwd.apache lisi root
这里添加了zhangsan和lisi两个用户并且都对密码进行了加密,加密后的内容在passwd.apache文件中。密码为root
将加密后的文件passwd.apache复制到版本库中的conf文件夹中。
(4)接着修改%Apache_HOME%/conf/httpd.conf文件,在文件最后添加如下内容
<location /svn> #虚拟目录设置 DAV svn #告诉Apache服务器哪个模块负责SVN的 SVNListParentPath on #列出SVNParentPath路径下的所有版本库 SVNParentPath D: epertorysvn #指出版本库所在的文件夹路径 AuthType Basic #使用基本验证方法,比如用户名、密码对 AuthName "Subversion repositories" #制定登陆提示内容 AuthUserFile D: epertorysvnkdyzmconfpasswd.apache #认证文件所在的位置 AuthzSVNAccessFile D: epertorysvnkdyzmconfauthz #权限管理文件所在的位置 Require valid-user #指示只有通过密码验证才能访问 </location>
(5)重启Apache服务器
(6)在浏览器上输入:http://localhost/svn访问
(7)注意事项:所有的配置都需要顶格写;最重要的配置在第(4)部分。
3.验证结果:
最后一张图显示了服务器上有两个版本库,名字分别是kdyzm和qyzr
七、CVS
该技术现在已经使用的不是很多,略。