1.引言
在本篇博客中主要记录一下SVN如何使用。SVN是一个集中式的版本控制工具。在学习SVN的时候一定要注意与Git的区别。SVN在服务器有一个中央仓库。SVN的优点是可以进行很好的权限控制。
2.安装SVN(项目中一定是安装在服务器)
首先我们在服务器安装我们的SVN软件,需要注意的是,我们一定要在服务器安装SVN软件(在此篇博客中,服务器和客户端都在本地)。
SVN的下载地址为:SVN服务器端软件下载
2.1 双击SVN安装软件
- 我们将SVN软件安装在服务器的路径为:
2.2 测试SVN是否安装成功
- 在控制台面板输入命令
svnserve --version
,若出现一下界面便安装成功
2.3 在服务器创建仓库
- 假设我们将所有的仓库都储存在
D:\svn
(目前文件夹是空,文件夹可以存储多个仓库)
- 执行命令创建SVN仓库(仓库名称叫做SVNTest)
//注意一点:我此处命令使用的是相对路径,所以首先要进入svn文件夹
svnadmin create SVNTest
此时已经有一个仓库叫做SVNTest
2.4 将SVN命令注册为window系统服务
- 执行命令(注意:管理员登陆控制台窗口)
sc create SVN-Service binpath= "D:\Program Files (x86)\Subversion\bin\svnserve.exe --service -r D:\svn" displayname= "SVN-Service" start= auto depend= Tcpip
binpath:代表SVN安装路径中svnserve.exe的路径
-r:代表SVN存储仓库的地址,这里配置的是多仓库
displayname:代表的服务名称,此处服务名称是(SVN-Service)
- 我们可以在服务窗口看到我们新建的命令
- 默认服务是没有启动的,右击启动
- 假设想要删除服务
sc delete SVN-Service
2.5 SVN仓库目录介绍
我们看一下我们新建的SVNTest仓库目录
3.设置SVN的权限问题
在上面我们在服务器创建了一个仓库,但是我们大家应该注意一点:并不是谁都可以在我们服务器的仓库下载东西,也并不是谁都可以上传东西到我们的服务器仓库。在这里,我们就设置一下谁可以访问我们的仓库。
- 我们将匿名用户的权限设置为none(不登陆不可以操作我们的仓库)
- 授权用户为write权限(登录用户具有操作仓库的权限)
- 指定用户的认证文件为passwd文件(此文件包含我们的用户名密码信息)
- 指定用户的授权文件为authz(更加具体的认证授权信息)
- 添加了两个用户user1,user2(password文件)
- 复杂的授权设置(authz文件)
设置一个组,组内有user1,user2两个用户
设置SVMTest仓库 对于svn_group组内的人有读写权限
*=代表其他用户没权限
如果这样写:
[SVNTest:/doc] 关于改仓库的doc目录设置权限
user1 = r 只有user1有读的权限
* =
4.SVN的简单命令
在F盘新建两个文件夹,user1,user2分别代表两个用户。
4.1 将项目下载到客户端(checkout )
svn checkout svn://localhost/SVNTest ./ --username=user1
- svn代表svn协议
- 如果在服务器localhost需要填写服务器的ip地址,SVN默认的端口号是3690,此处不需要写端口号,SVN协议默认是3690端口号
- –username 代表用户名是user1登录
4.2 将文件上传到服务器仓库
- 创建一个a.txt(内容为a)
- 将文件上传到版本库(注意版本号,SVN版本号代表SVN仓库的修改的次数)
//将文件送到暂存区
svn add a.txt
//将文件上传到服务器
svn commit -m "add a.txt"
- 假设svn add file出错,可以加上force参数
4.3 误删文件,还原版本(update)
- 假设我们误删了a.txt,那么我们执行svn update 同步版本库
svn update
4.4 版本回退(已经提交到版本库)
- 修改文件a.txt
commit
提交文件(注意这里没有add,因为file已经添加到版本控制了)
- 此时我们发现版本2出错了,想回到版本1(首先查看版本号)
//查看版本号
svn info
//将版本2回退到版本1,注意2是当前版本,1是回退到1版本
svn merge -r 2:1 a.txt
- 重新提交,成为了版本3
4.5 版本回退(未提交到版本库)
注意此命令和update的区别(update是删除文件之后用的)
//对单个文件回退
svn revert a.txt
//对文件夹回退版本
svn revert -R trunk
4.6 SVN创建分支
- trunk:存放开发的主线
- branches:一般是处理bug
tags:存放代码的稳定版本
首先先创建一个项目文件夹
OA
(文件夹里面有三个文件夹trunk
,branches
,tags
)
- 将OA文件夹上传到服务器
提交之后的目录为:
SVNTest
trunk
tags
branches
4.7 删除服务器的文件
svn delete a.txt
svn commit -m "delete a file"
4.8 将开发稳定版本trunk转移到tags里面
- 首先在我们的trunk下创建一个项目叫做myproject,文件夹下面有一个b.txt文件
- 远程将project项目拷贝到tags下面
svn copy svn://localhost/SVNTest/trunk/myproject svn://localhost/SVNTest/tags/v1.0 -m "v1.0"
- 将文件下载下来看看对不对(没问题)
svn checkout svn://localhost/SVNTest/tags/v1.0 ./
此时我们的项目目录为:
SVNTest
trunk
myproject
b.txt
tags
v1.0
b.txt
branches
4.9 SVN合并分支
需求是这样的,如果稳定版本v1.0出现了bug,我们应该先在branches分支拷贝备份,然后修改bug,修改完bug之后,在主分支合并分支。
- 首先将v1.0拷贝到branches分支
svn copy svn://localhost/SVNTest/tags/v1.0 svn://localhost/SVNTest/branches/v1.0fix -m "fix bug"
此时我们的项目目录为:
SVNTest
trunk
myproject
b.txt
tags
v1.0
b.txt
branches
v1.0fix
b.txt(内容为aaa)
修改bug之后提交文件
此时我们的项目目录为: SVNTest trunk myproject b.txt tags v1.0 b.txt branches v1.0fix b.txt(内容为aaabbb)
此时我们去除tags1.0版本合并分支
//去除分支
svn checkout svn://localhost/SVNTest/tags/v1.0 ./
//合并分支(注意这是在主分支上执行的命令(tags))
svn merge svn://localhost/SVNTest/branches/v1.0fix
- 名称修改为v1.1(注意这里用的是import),合并之后不要提交,不然v1.0内容也会发生改变
svn import svn://localhost/SVNTest/tags/v1.1 -m "have fixd bugs"
此时我们的项目目录为:
SVNTest
trunk
myproject
b.txt
tags
v1.0
b.txt(aaa)
v1.1
b.txt(aaabbb)
branches
v1.0fix
b.txt(内容为aaabbb)
5.总结
在本篇博客中主要介绍了一下几点
- 如何在服务器安装SVN
- SVN的命令行的常用命令
- 真实环境中如何控制权限