首页 > 代码库 > 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