linux svn服务器的搭建及配置

今天学习了一下svn服务器的搭建过程,在这记录如下:

检测svn是否安装:

rpm -qa subversion   #检查现有版本,如果输入命令后没有提示的话,表明没有安装
yum remove subversion  #如果有安装,可以通过该命令卸载旧版本的svn服务
yum -y install subversion  #执行安装

创建svn目录:

mkdir /home/svn  #以后新的svn仓库都在这个目录下创建

创建一个svn版本仓库:

svnadmin create /home/svn/firstrepo  #在/home/svn下创建一个firstrepo版本库,执行命令后可以查看到该目录

查看该版本库下生成的文件夹:

创建一个版本库时,目录下会有以下文件夹,如下图


其中conf目录是对该svn版本库配置的目录,接下来需要对目录下的文件进行配置。

每创建一个svn版本仓库都会有这些文件

conf目录下各文件的介绍及配置方法

passwd文件svn用户信息文件,保存所有该版本库的所有svn用户,可以编辑该文件添加用户。

使用:添加格式为 用户名 = 密码,比如 root = 123456   =”两边都保留一个空格

在以后svn客户端检出或者更新的时候就可以使用这个文件里的用户名密码登录认证。

authz文件:配置每个用户所在组,所在组的权限(读或写),所在组指向的svn项目目录等。

如下图:

mygroup是组名,右边的 root是用户名,该用户名应该在passwd文件存在,如果有多个用户名以逗号分隔

下面指定该组对应的权限目录,及所拥有的权限

权限目录格式:[版本库名:拥有权限的目录],如 [firstrepo:/],/ 表示根目录,也可以是 [firstrepo:/xxx/xxx],表示多级子目录下有权限,另外,权限是可以继承的,比如某个组对某个目录有某种权限,那么他对该目录下的所有子目录文件都有该种权限。

权限类型:读r 写w 没有权限为空,如@mygroup = rw,表示mygroup组有读写权限,* = r 表示 除mygroup组外的其他所有用户有读权限,如果是 * = ,则表示除mygroup组外的其他所有用户都没有该目录的权限。


svnserve.conf文件:svn版本库的基本的全局配置。

vi svnserve.conf
打开下面的5个注释
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /home/svn # 认证空间名,版本库所在目录

启动svn服务:

ps -aux|grep svnserve  #查找该服务是否正在运行,如果运行的话先杀掉该服务
kill -9 ID号
svnserve -d -r /home/svn  #启动svn服务

注意:

  1. 启动服务时指定的目录很重要,该目录为根目录,相对于配置文件中指定的路径来说。
  2. 每次修改配置文件,前面三个文件的任意一个,都需要重新启动svn服务。

导入你的项目到svn仓库中:

格式:svn import 你本地的项目文件夹路径  file:///home/svn/svn项目文件夹名字 -m “版本说明”

举例:

svn import /home/testsvn file:///home/svn/firstrepo/mytest -m '导入第一个'

如上,首先 /home/testsvn 文件夹必须存在,是你本地的文件夹路径,即你想导入的项目路径,其次 mytest 是你svn版本库中的项目名,到时候你检出项目的时候svn地址后面跟的就是这个名字。 -m '导入第一个' 为该导入项目的注释。

服务器上测试检出该项目:

svn co svn://192.168.x.x/firstrepo/mytest   #中间跟的是你的服务器ip,后面是跟的版本库名和检出项目名

windows svn客户端检出项目:

首先安装svn客户端,比如 tortoise svn客户端,具体安装方式这里不介绍。

安装好之后,进入某个你想要放svn项目的目录下,右键 svn checkout


填上你的仓库项目地址,如:svn://192.168.x.x/firstrepo/mytest

检出到哪个目录下,如:E:\work\testsvn   testsvn目录可以不用先创建,会自动创建

点击ok,会提示你输入用户名,密码,就是前面authz文件中添加的用户名密码,如果此时没有提示你输用户名密码,直接就检出了或者检出失败,可能有以下几个原因:

  1. authz文件中,anon-access参数没有设置为none,要设置,即 anon-access = none。
  2. 没有重启svn服务。
  3. svn客户端没有清除用户密码的登录缓存信息,会用你以前的登录信息去验证,所以需要清除,清除方法:右键 》tortoisesvn 》settings,找到左侧菜单 saved data,右边找到 authentication data,然后点击 clear all,清除保存。然后再次检出,就会发现需要登录成功检出了。

以上介绍的方式建立的是svn独立服务器,访问方式为 svn://ip地址/xxx/xxx 这样的格式来查看检出项目的

如果想要以 http://ip地址/xxx/xxx 方式来检出访问项目,需要配置svn服务器的http支持,具体需要安装apache服务器,把svn作为apache的一个模块来运行,怎么安装及配置下一章再说。

问题总结:

svn import或者 svn commit命令操作成功后,为什么在服务器svn仓库目录下找不到导入或者上传的原始文件?

SVN服务器端不是简单将上传的文件一个一个存放起来的;
SVN服务器端默认采用的FSFS格式是将每次commit的内容增量方式存放的,每个增量包存成1个文件,这个增量包中包括了这次commit的全部数据。
也就是说你不可能在服务器端存放该版本库的文件夹下找到你上传的某个文件。

SVN在服务器端的存储方式和客户端是不一样的,所以在服务器端是看不到源文件的。服务器端有两种存储方式FSFS和BDB,目前默认都是FSFS。

svn客户端如何设置登录时需要用户名密码?

修改svnserve.confanon-access = none,不允许匿名访问,保存,重启svn服务。
svn不支持中文路径得解决方法?
见文章:https://blog.csdn.net/clever101/article/details/17960241
svnserve启动参数-r所指定的目录对authz配置文件有什么影响?
见文章:https://blog.csdn.net/linuxin/article/details/2783835

猜你喜欢

转载自blog.csdn.net/wz947324/article/details/80168080