1.安装svn
命令:yum install subversion
2.创建svn目录
命令:mkdir /var/svn
3.使用svnadmin创建一个项目仓库,并进行配置
命令:svnadmin create /var/svn/project1/
命令:ls /var/svn/project1 列举出文件列表
输出:conf db format hooks locks README.txt
目录说明:
conf目录:是这个仓库配置文件(仓库用户访问账户,权限)
format目录:是一个文本文件,里边只放了一个整数,表示当前文件库配置的版本号
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
命令:ls /var/svn/project1/conf 列举出conf文件夹下所有文件
输出:authz hooks-env.tmpl passwd svnserve.conf
使用svn内置的认证机制可以有效的增强客户端访问版本库的安全性,当客户端访问版本库服务器时,服务器会根据版本库目录下的conf/svnserve.conf文件中定义的认证与授权策略实现权限的控制,此文件核心配置说明:
anon-access= none #设置拒绝匿名账户访问,此处可以设置为none、read、write
auto-access = write #经过认证的账户权限为可写
password-db = passwd #指定账户名称与密码的存放文件名,该文件在conf目录下
authz-db=authz #指定基于路径的访问控制文件名(可以对文件或目录设置权限)
real = My First Repository #设置版本库域,如果两个版本库的认证域相同,它们将使用相同的密码数据
只需将以上5行最前面的#删除掉,使其生效,其他不用管
passwd文件需要设置账户信息:
规则是用户名=密码
新加一个管理员用户和两个普通用户
user1=123456
user2=123456
user3=123456
authz文件设置访问控制权限
admin=user1
user=user2,user3
[/var/svn/project1/] #svn项目仓库路径
@admin=rw
@user=r
其中
admin=user1 创建admin组,组成员为:user1
user=user2,user3 创建用户组,用户成员:test2和user3
[test:/] 赋予根权限,为了便于管理和权限的控制,可以把权限细化到版本库中相应的目录
@admin = rw admin组有读写的权限
@user = r user组只有读的权限
*= 表示除了上面设置的权限用户组以外,其他所有用户都设置空权限,空权限表示禁止访问本目录,这很重要一定要加上。
权限的主体可以是用户组,用户或者*,用户组在前面要以@开头,*表示全部用户
权限分为:r ,w, rw和null ,null空表示没有任何权限。
auhtz配置文件中的每个参数,开头不能有空格,对于组要以@开头,用户不需要。
4.启动服务
开启服务命令:svnserve -d -r /var/svn/
停止服务命令:killall svnserve
5.连接svn:
我这里使用windows系统svn客户端软件连接:‘
6.常见问题:
1:Error: Can't connect to host '192.168.179.134': 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
解决方案:先telnet看3690端口通不通,如果不通,先把服务器上防火墙关掉测试下,如果关掉防火墙就ok的话,在开启防火墙设置例外
telnet 192.168.179.134 3690
正在连接192.168.179.134...
这样就是不通
( success ( 2 2 ( ) ( edit-pipeline svndiff1 accepts-svndiff2 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay inherited-props ephemeral-txnprops file-revs-reverse list ) ) )
跳出这样的文字就是通的
操作防火墙命令:
systemctl unmask firewalld #执行命令,即可实现取消服务的锁定
systemctl mask firewalld # 下次需要锁定该服务时执行
systemctl start firewalld.service #启动防火墙
systemctl stop firewalld.service #停止防火墙
systemctl reloadt firewalld.service #重载配置
systemctl restart firewalld.service #重启服务
systemctl status firewalld.service #显示服务的状态
systemctl enable firewalld.service #在开机时启用服务
systemctl disable firewalld.service #在开机时禁用服务
systemctl is-enabled firewalld.service #查看服务是否开机启动
systemctl list-unit-files|grep enabled #查看已启动的服务列表
systemctl --failed #查看启动失败的服务列表
2:认证配置无效:
1.可能原因之一:服务端conf目录下的两个文件authz和passwd中可能存在重复的用户名或者组名(随着时间的推移,由于用户组和用户多了,就极可能存在重复),而导致客户端认证配置无效。
2.可能原因之二:svnserve.conf文件里,除上面说的5行取消注释外,还有其他的行也被取消注释了,也有可能导致这个问题
3.其它可能原因:比如存在多余空格,中文标点,中文字符,权限不对,路径不对,组名不对,用户名不对,等等。需要仔细逐行排查。
签出成功后的签入等操作就不写了
linux下签出:
命令:svn co svn://127.0.0.1/project1 mime2
将这个svn签出到mime2文件夹
列举出svn下目录:
命令:svn ls svn://127.0.0.1/project1