Linux 下使用 SVN 服务

简介: 安装CentOS 系统yum install -y subversionubuntu 系统sudo apt-get install subversion创建对应目录使得/data/svn作为svn项目的一个根目录

安装


CentOS 系统

yum install -y subversion


ubuntu 系统

sudo apt-get install subversion


创建对应目录



使得/data/svn作为svn项目的一个根目录


mkdir -p /data/svn
svnadmin create /data/svn/myproject


SVN 推荐最小信息



svn服务配置文件:/data/svn/myproject/conf/svnserve.conf


该文件仅由[general]和[sasl]配置段组成。

[general]
# force-username-case = none
#控制非鉴权用户(匿名用户)访问版本库的权限。可以是read、write,none,默认为read. 这里为了安全权限, 可以设为none
anon-access = none
# 控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。缺省值:write
auth-access = write
# 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。缺省值:passwd
password-db = passwd
# 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。缺省值:authz
authz-db = authz
# 【可选】指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。 缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)
# realm = My First Repository
[sasl]


配置用户和密码 :/data/svn/myproject/conf/passwd


[users]配置段的配置行格式如下:


<用户名> = <口令>

[users]
zhangsan  = 123456
lisi      =            666
wangwu =            789


这里我发现 等号的两侧可以通过空格进去分割。为了排版可以通过空格进行格式控制。


配置用户组和权限:/data/svn/myproject/conf/authz


[groups]配置段中配置行格式如下:


<用户组> = <用户列表>


用户列表由若干个用户组或用户名构成,用户组或用户名之间用逗号","分隔,引用用户组时要使用前缀"@"(如:引用用户组"all"要使用字符串"@all")。


注意: 用户列表中的用户是要在用户密码文件中定义的用户


版本库路径权限段的段名格式如下:


[<版本库名>:<项目/目录>]


其中,方框号内部分可以有多种写法:


[/],表示根布幕及以下,根目录是svnserve启动时指定的,我们指定为/application/svndata,[/]就是表示对全部版本库设置权限


[repos:/],表示对版本库repos设置权限


[repos:/sadoc] 表示对版本库repos中sadoc目录设置权限


如版本库abc路径/tmp的版本库路径权限段的段名为"[abc:/tmp]"。


可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。


如:段名为"[/tmp]"的版本库路径权限段设置了所有引用该权限配置文件的版本库中目录"/tmp"的访问权限。


版本库路径权限段中配置行格式有如下三种:


<用户名> = <权限>


@<用户组> = <权限>


= <权限>


其中,"*"表示任何用户;权限的取值范围为''w"、'r'和'rw'和空,空表示对该版本库路径无任何权限,'r'表示具有只读权限,'rw'表示有读写权限。

#用户组
[groups]        
# 用户组admin 包含 zhangsan 和 lisi 两位成员,这里仅作为演示
admin = zhangsan,lisi
# 使用[/]代表svn服务器中的所有资源库
[/]  
# 用户组权限
@admin = rw        
# 非用户组权限也设置读写权限,避免 wangwu 有意见
* = rw


启动 SVN 服务

svnserve -d -r /data/svn
# 或为避免E000013出现权限问题 sudo svnserve -d -r /data/svn ,


--listen-port 可以加在尾部表示自定义端口号


若没有任何提示就说明启动成功了. 不写的话默认端口为 3690


客户端则可以尝试使用svn co命令检出项目

svn checkout svn://127.0.0.1/myproject /data/svn/svnrepos --username root --password 123456


停止 svn 服务


killall svnserve


一台svn服务器上同时运行多个版本库有2种方案:



  • 在SVN服务器上创建多个版本库,同时运行多个svnserve进程,分别监听不同的端口。客户端连接此服务器不同端口即可连接不同的版本库。


  • 现在/data/svn_data下建立多个repo1,repo2等多个版本库, 分别配置各自信息
    单版本库起动 svnserve -d -r /data/svn_data/repo1。访问地址则是127.0.0.1/
    多版本库起动 svnserve -d -r /data/svn_data/ (推荐此种用法)启动到父目录的等级更加方便。访问地址则是127.0.0.1/repo1, 127.0.0.1/repo2, ...


总结


  • SVN管理员可以通过这3个配置文件设置 SVN 服务的用户名口令以及对版本库路径的访问权限。这些配置文件保存后就立即生效,不需要重启svnserve服务。


  • 一般情况下会禁用非认证用户的任何权限
    anon-access = none


出现的问题和解决方法


  1. 在修改配置authz后,如果authz包含错误,那么会在客户端提示Invalid authz configuration。在客户端并没有显示问题的详细原因,但是在服务器端有一个工具可以检查authz的语法 svnauthz-validate  使用方法如下:


$ svnauthz-validate /srv/svn/conf/authz


  1. SVN报错:svn: E000013: Can't open file '/data/svn/myproject/db/txn-current-lock': Permission denied 解决方法


问题出现在一开始的地方,一开始的时候svn的安装是root用户进行安装的(sudo apt-get install subversion),所以在进行svn服务的启动的时候也要相应的采取root的权限进行启动,不然就只有read的权限而没有write的权限,所以,分析完上面的问题以后,我们只需要先停止现有的svn服务,然后再以root的权限开启svn服务就可以。shell命令如下:

killall svnserve
sudo svnserve -d -r /var/svn (这边你要换成你自己svn的所在目录)


SVN 常用命令



SVN 常用命令 - 简书


https://www.jianshu.com/p/f190bfdfdcb9


参考



【SVN】1. SVN 安装部署-xiexiaojun-51CTO博客


https://blog.51cto.com/xiexiaojun/2049665



目录
相关文章
|
11天前
|
Linux
Linux安装svn并启动
Linux安装svn并启动
48 10
|
22天前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
98 19
|
21天前
|
监控 Linux
Linux systemd 服务启动失败Main process exited, code=exited, status=203/EXEC
通过以上步骤,可以有效解决 systemd 服务启动失败并报错 `Main process exited, code=exited, status=203/EXEC` 的问题。关键在于仔细检查单元文件配置、验证可执行文件的有效性,并通过日志分析具体错误原因。确保可执行文件路径正确、文件具有执行权限,并且可以独立运行,将有助于快速定位和解决问题。
224 7
|
6月前
|
Linux
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
|
3月前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
58 5
linux系统服务二!
|
3月前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
73 3
linux系统服务!!!
|
3月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
537 3
|
3月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
230 3
|
4月前
|
Ubuntu Linux 网络安全
Linux中服务管理问题
【10月更文挑战第4天】
42 2
|
4月前
|
应用服务中间件 Linux Shell
Linux 配置 Nginx 服务的详细步骤,绝对干货
Linux 配置 Nginx 服务的详细步骤,绝对干货
157 0