首页 > 代码库 > SVN使用
SVN使用
Commit:提交(将本地的源码更新内容提交至服务器,将自己的代码更新至服务器供别人使用)
Check Out:检出(把整个项目源码下载到本地)
Update:更新(将本地的源码更新为服务器上的最新版本;将别人的代码更新至自己的代码库)
Repository:文档仓库(每个项目组都有自己的仓库)
不使用SVN的缺点:
1、代码管理混乱
2、备份多个版本,占用磁盘空间大
3、解决代码冲突困难
4、容易引发BUG
4、难于追溯问题代码的修改人和修改时间
5、难于恢复至以前正确版本
6、无法进行权限控制
7、项目版本发布困难
版本控制:
版本控制(Revision control)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。
SVN服务器运行方式:
独立服务器方式:svnserve
借助Apache方式:mod_dav_svn
SVN版本数据存储方式:
BDB (Berkeley DB):数据库方式
FSFS:文件方式 (推荐)
Subversion 组件:
服务器组件 (管理员使用)
svnadmin:用来调整和修正svn档案库的工具
svnserve:一个独立的服务器程序, 可以作为服务器行程执行, 或是被 SSH 启动; 另一个让你的档案库在网络上可供其它人存取的方法。
客户端组件(用户使用)
svn:命令行客户端程序,这是用来管理数据的主要工具。
svn使用步骤:
1、安装Subversion
2、验证svn是否安装成功:svnadmin --version
3、在服务端创建一个文档仓库:svnadmin create D:\Repository\svn\itcast
(先创建文件夹存储文档仓库,再创建文档仓库,路径为D:\Repository\svn,itcast为文档仓库的名称)
4、启动svn服务:
单仓库启动方式:svnserve -d -r D:\Repository\svn\itcast(文档仓库路径)
-d:后台执行 -r:版本库的根目录
多仓库启动方式:svnserve -d -r D:\Repository\svn(启动该目录下的所有仓库,推荐使用)
5、验证svn服务启动是否成功:netstat -an查看3690端口是否被占用(因为svn占用的是3690端口,停止服务:Ctrl + C)。
6、客户端检出文件:
单仓库启动服务检出文件:
svn checkout svn://192.168.10.107 .
多仓库启动服务检出文件:
svn checkout svn://192.168.10.107/itcast .
最后面的.代表检出到当前目录;在检出前一定要记得切换目录。cd 切换目录
检出文件时易出错:出现目标计算机积极拒绝,无法链接;(服务未开启)
7、将本地文件纳入版本控制:svn add fileName:
在提交新的文件之前,需要添加关联,告诉服务端你需要提交这个文件,也就是纳入版本控制。
8、提交文件:svn commit -m “message” fileName:
注意提交之前看提交用户有没有权限,如果没有权限,可以设置服务器存储文档仓库中conf文件夹下的svnserve.conf文件,让匿名可以提交文件,也就是设置anno-access = write,但是不建议这样做,不安全(svnserve.conf文件中的#是注释的意思)。
文件提交成功后的保存方式:
文件提交成功后不是以与FTP上传方式类似的方式原样保存数据的,而是通过二进制形式以自己的方式进行保存的,所以不可能在服务器上找到原样数据,如果需要,就通过checkout检出数据至自己电脑。
9、客户端更新文件:svn update [fileName]
如果update后加文件名,代表更新单个文件,不加文件名,则更新所有文件。
10、客户端删除文件:svn delete fileName(文件名)
11、客户端恢复文件:svn revert fileName
注意:revert命令只能恢复未提交的操作(也就是delete之后,commit之前的操作,一旦delete之后,发生过commit,则不能用revert来恢复)
Subversion客户端常用命令:
svn checkout -从版本库取出一个工作拷贝
svn commit -将改动的文件提交到版本库
svn update -更新你的工作拷贝
svn add-向版本库中添加新文件
svn delete-从版本库中删除文件
svn revert-取消所有的本地编辑
svn info-显示本地或远程条目的信息
svn list-列出版本库目录的条目
svn status-查看当前工作区状态
svn help-获取帮助信息
svn服务器ip变化问题:
当svn服务器ip发生变化后,客户端需要更新或者提交数据时,应该重新检出再操作,也可以在.svn中修改关联的ip,但是理论上不建议这么做。
注意:用dos命令行中来开启的服务,在关闭命令行的时候,该服务也会关闭。
为了避免以上情况的发生,我们可以将svn的服务注册到windows系统服务中。
将svn服务注册为windows系统服务:
sc create SVN-Service binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\Repository\svn" displayname= "SVN-Service" start= auto depend= Tcpip(windows7系统必须以管理员身份运行)
SC:用于与服务控制管理器通信的命令行程序。
sc create:sc注册服务命令
SVN-Service: 是服务注册时的键名
binpath : 是服务加载程序启动文件的路径和命令参数
displayname :是服务显示名
depend :传输依赖的协议
start :是否自动启动
删除已有服务:sc delete SVN-Service
Subversion目录:
创建三个顶级目录:
/trunk:存放开发的“主线”。
/branches 存放支线副本。
/tags 存放标签副本。
Tortoisesvn介绍:
TortoiseSVN是Subversion版本控制系统的一个免费开源客户端(主要用在客户端);是 Subversion 的 Windows 扩展;它避免了 Subversion 枯燥而且不方便的 Command Line。完全嵌入 Windows Explorer,使用时只需在正常的窗口里右键操作就可以了(安装完成后需要重启电脑)。
提交文件时注意权限问题:
一、修改svnserve.conf文件:
1、设置匿名用户权限为none:anno-access = none
2、设置授权用户权限为 write:auth-access = write
3、启用passwd文件:取消password-db = passwd注释
4、启用authz文件:取消authz-db = authz注释
二、修改passed文件:
添加用户和密码:
zhangsan = 123
lisi = 456
wangwu = 123456
lijie = aini521
三、修改authz授权文件:
[groups]是分组授权
1、添加分组:
gjdlGroup = zhangsan,lisi
以上就是将zhangsan和lisi添加到gjdlGroup组中,这里在加入之前必须保证zhangsan和lisi在passwd文件中存在。
2、进行授权:
[/] 进行授权的文件夹;这里的[/]表示是给根目录授权,也就是给gjdl这个文档仓库文件夹授权,如果是给里面的子文件夹授权,就用[/trunk]...
@gjdlGroup = rw gjdlGroup前面加@表示它为组名,也就是给组授权
wangwu = rw 直接写变量名,是给个人授权,rw是读写权限
* = 这里的*表示给在passwd文件中出现且没有在authz文件中出现的用户授权;=后没有内容,表示没有任何权限。
将自己创建好的目录导入svn服务器文档仓库:
使用TortoiseSVN的Import方法
导出服务器上所有源码(不含.svn隐藏文件夹):
使用TortoiseSVN的Repository Browser(仓库浏览器),打开所有源码,再选中该服务器的路径,右击Export导出所有文件。
设置TortoiseSVN使客户端提交版本时必须添加描述信息
在电脑空白处单击鼠标右键 -> TortoiseSVN -> Properties ->打开Properties ->点击new —>在Property name :后的下拉框中选择 tsvn:logminsize,然后设置Property value(这里的value为整型数据,代表客户端提交版本时必须添加的描述信息的字符个数),这样在客户提交数据时就必须满足这个条件,否则不能提交信息。
文件提交时发生冲突:
如果当前文件不是服务器文件的最新版本,那么有用户在这个版本下进行修改后提交将会引发这种冲突。
发生这种冲突后的解决方案:
选中冲突文件,鼠标右击 ->TortoiseSVN ->Edit conflicts(编辑冲突),右击红色区域,选择解决方案,一般选最后两个中的任意一个就可以;选择好之后点击保存,然后再退出。退出之后右击冲突文件->TortoiseSVN ->Resolved(表示问题已解决,重新标识文件) ->点击OK,最后再提交。
给文件加锁:
为了避免并发问题,我们可以给加锁,确保在同一个时刻只有一个人在操作此文件;选中需要加锁的文件右键 ->TortoiseSVN ->Properties -> new;然后在Property name:后选择svn:needs-lock;最后设置Property value为true;代表需要为此文件加锁。
在svn中不仅仅是修改文件内容算修改文件,修改属性等也算修改文件;修改后一定要提交,那样才会生效。
给文件加锁后此文件下的对号会以灰色显示,这时候不让修改此文件,如果需要修改选中此文件右键 ->SVN Get lock(获得锁),这时文件下的小图标会发生改变,这时就可以进行修改了(此锁在同等时间内只能供一人拿到,直到此人修改信心完成,并且commit以后,此锁才会释放,其他人才有机会拿到锁);如果用户拿到锁之后发现没有需要修改的信息,这个时候就不能进行提交代码,那么就可以手动释放锁,选中文件右键 ->TortoiseSVN ->Release lock;这样就可以不提交代码释放锁。
注意:.svn这个隐藏目录记录着两项关键的信息: 工作文件的基准版本和一个本地副本最后更新的时间戳。千万不要手工修改或删除这个 .svn隐藏目录和里面的文件!否则将会导致你本地的工作拷贝 (静态视图)被破坏,无法再进行操作。
在svn客户端删除信息时应该注意先断开与服务器svn的连接。
与svn相关的操作都在Team中,选中服务器地址右键 ->Team ->断开连接
新建项目共享至服务器,使用户以后再此基础上进行修改
创建好项目后,选中此项目右击 ->Team ->Share Project ->SVN ->Next ->选择路径 ->Next ->Finish;这个时候文件只是纳入版本控制,并没有提交至服务器,选中此项目,然后commit;这是文件才真正上传到了服务器。
与资源库同步:
找出本地项目资源与服务器上最新文件的差异,自己可以进行对比。
Team ->分支/标记:存储每个版本的信息
Team ->Update to Version:更新至特定版本
如果想比较历史版本:可以同时选中多个文件,右击比较。
SVN与Apache整合:
将SVN配置至Apache服务中:
1、打开Apache安装目录 -> conf -> httpd.conf配置文件
2、将下列2行前方的#移除(第83 行):
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、找到Subversion 安装目录下的以下两个文件,复制到Apache 安装目录下modules 目录中。
bin/mod_authz_svn.so
bin/mod_dav_svn.so
5、使用Apache 安装目录下的bin/htpasswd.exe 可执行文件来生成授权文件,只有第一次生成需要使用-cb 参数(以后均不用,否则会覆盖之前的授权):
htpasswd -cb [filename] [username] [password]
例:htpasswd -cb passwd.apache 用户名 密码 (用户名必须为svn中添加的用户名);将生成的passwd.apache 文件移动到SVN版本库中\conf 目录下。
6、在Apache 安装目录下的conf\httpd.conf文件的最后加入:
#配置虚拟目录#
<location /svn/itcast>
#引用远程访问模块
DAV svn
#项目版本库路径#
SVNPath D:/Repository/svn/itcast
#授权文件#
AuthzSVNAccessFile D:/Repository/svn/itcast/conf/authz
#所有用户都需要身份验证#
Satisfy Any
Require valid-user
#验证方式#
AuthType Basic
#项目的名称#
AuthName "itcast"
#用户文件#
AuthUserFile D:/Repository/svn/itcast/conf/passwd.apache
</location>
添加结束后,必须重启Apache服务才可以进行访问
访问方式:http://localhost/svn/itcast
CVS简介:
CVS - Concurrent Versions System(并发版本管理系统)是一个版本控制管理系统,它是SVN出现之前最为广泛使用的一个版本控制系统。
CVS连接:
在用户连接CVS时,输入的Host为服务器的ip地址,Repository path:就是CVS的名称(/CVS),Authentication下的User与Password为CVS所在的那台服务器的操作系统的系统账号和密码。
CVS创建账户:
CVS中创建的账户是依赖CVS所在的服务器的操作系统的系统账户和密码而存在的,如果操作系统的用户名和密码发生改变,那么CVS的账户也将失效。
1、设置cvsroot:
在dos命令行中输入:set cvsroot=:pserver:zhaoqx@127.0.0.1:/CVS
2、使用系统用户绑定到当前的CVS项目上
在dos命令行中输入:cvs login
登录并输入系统用户密码:
cvs passwd -a -r zhaoqx zhangsan
cvs passwd -a -r zhaoqx lisi