在linux上搭建svn服务器
创始人
2025-05-31 20:24:06
0

背景

将部署在windows上的svn服务器迁移到linux

准备工作

linux服务器安装svn

yum -y install subversion

windows导出dump文件

svnadmin dump 项目地址 > 项目名.dump

linux创建版本库

svnadmin create /var/svn/test

linux导入dump文件

svnadmin load /svndata/项目名 < 项目名.dump

配置文件对照表

文件名功能windowslinux
svnserve.confsvn服务配置svnserve.confsvnserve.conf
authz账号权限管理VisualSVN-SvnAuthz.iniauthz
passwd密码配置文件htpasswdpasswd
根目录authz所有库账号公共权限管理VisualSVN-GlobalWinAuthz.ini根目录authz
groups.confsvn用户群组信息groups.conf根目录authz

配置文件修改

svnserve.conf

anon-access = none (none匿名不可访问)
auth-access = write
password-db = /var/svn/passwd (修改为根目录的passwd)
authz-db = /var/svn/authz (修改为根目录的authz)

authz

[groups]
dev = dayi123,dayi# windows
[/]
# linux (需要带根目录下的项目名)
[test:/]
test= rw

httpd支持

为了能通过web访问,以及兼容windows visualsvn的htpasswd,需要使用httpd服务

# 下载httpd和mod_dav_svn模块
yum install -y mod_dav_svn
yum install -y httpd

增加httpd的svn配置
vim /etc/httpd/conf.d/svn.conf


#开启svnDAV svn
#指定父目录位置,以后所有版本库都将存放在该目录下SVNParentPath /var/svn/
#开启svn版本库父目录功能SVNListParentPath On
#指定授权模式AuthType Basic
#登陆窗口标题显示提示文字AuthName "Authorization Realm"
#指定访问版本库的账户和密码存放文件,该文件需要用apache的htpasswd命令创建AuthUserFile /var/svn/htpasswd
#指定访问版本库的用户和组的权限控制文件AuthzSVNAccessFile /var/svn/authz
#要求验证有效的用户才能访问Require valid-user

开启httpd服务

systemctl enable httpd
systemctl start httpd

如果不想使用httpd的默认端口80或者该端口被占用,则可以修改/etc/httpd/conf/httpd.conf中的默认端口

兼容windows的htpasswd
首先查看htpasswd文件中密码的格式
test:$apr1$uer$1txKFt7mXE/EV1ouN4xWK1

对比httpd官网给的几种加密方式:

bcrypt
$ htpasswd -nbB myName myPassword
myName:$2y$05$c4WoMPo3SXsafkva.HHa6uXQZWr7oboPiC2bT/r7q1BB8I2s0BRqCMD5
$ htpasswd -nbm myName myPassword
myName:$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/SHA1
$ htpasswd -nbs myName myPassword
myName:{SHA}VBPuJHI7uixaa6LQGWx4s+5GKNE=CRYPT
$ htpasswd -nbd myName myPassword
myName:rqXexS6ZhobKA

可以看出使用的是MD5加密

使用htpasswd增加新用户

htpasswd -nbm myName myPassword
=> myName:$apr1$i/YRWA8N$sHsoGDljceyyIj5KTQJw/.

将其拷贝到httpd文件中,测试能否登陆svn即可

启动svn服务

基本命令

svnserve -d -r /var/svn/
killall svnserve

设置为systemctrl服务

[Unit]
Description=svn-server
After=network.target[Service]
Type=forking
ExecStart=/usr/bin/svnserve -d -r /var/svn
ExecStop=/usr/bin/killall svnserve 
PrivateTmp=true
Restart=always
RestartSec=1min[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable svn
systemctl start svn

更换svn库地址

右键=》TortoiseSVN=》重新定位

其它一些功能

添加提交时强制写日志功能
首先拷贝hooks下面的pre-commit.tmpl为pre-commit(windows下为’pre-commit.bat’ or ‘pre-commit.exe’) 并增加执行权限
chmod -R u+x,g+x,o+x hooks

代码

REPOS="$1"
TXN="$2"# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)if [ "$LOGMSG" -lt 10 ]; thenecho -e "\n Log message can't be empty! you must input change log. " 1>&2
exit 1
fi

在这里插入图片描述

增加备份功能

遇到的一些问题

svn could not begin a transaction svn 提交文件报错
在这里插入图片描述
原因是在svn服务器上创建仓库时使用了root身份登录服务器, 导致文件没有足够的写权限, 需更改仓库的组权限
chown -R apache:apache /var/svn

[Error output could not be translated from the native locale to UTF-8.] hooks里面有中文报错
在这里插入图片描述

经过查询是1.8之后才会解决的一个bug,可以升级到1.8以上的版本测试下下面的方法
vim /etc/httpd/conf/httpd.conf


# Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb
SVNUseUTF8 On

重启httpd

参考

svn 从windows迁移到linux 记录

相关内容

热门资讯

“男子持刀入室盗窃”视频引发关... 近日,一段疑似“小偷”入室盗窃被业主家中监控拍下的视频在网上引发关注。11月21日晚,“翠屏公安”微...
绝不允许日本军国主义幽灵复活!... 2025年11月7日,日本首相高市早苗宣称,如果中国大陆对台湾出动军舰并使用武力,可能会构成“存亡危...
【解决】AI法律助手荣获202... 2025全球数字经济大会启幕,搭建国际数字合作高端平台 经国务院批准,由北京市人民政府、国家互联网信...
嘉兴男子与妻争吵,突然将行李箱... 近日,浙江嘉兴一对夫妻因琐事发生争吵,丈夫突然将装满衣物的行李箱从6楼扔到楼下,引发关注。11月22...
三地107家律所齐聚丰台,京津... 11月22日,京津冀律师驿站举办“党建业务深度融合 促进行业规范发展”主题活动,发布“百千万行动计划...
家装预付资金安全困局如何破解,... 家装预付资金安全困局如何破解 专家提出:建立“先验收后付款”装修资金存管制度 预交数万元甚至数十万元...
工行安康解放路支行积极开展《反... 为深入贯彻落实《国家金融监督管理总局安康监管分局办公室关于开展<反有组织犯罪法>宣传活动的通知》要求...
重庆公布育儿补贴制度实施方案 原标题:每孩每年3600元 重庆公布育儿补贴制度实施方案 11月21日,记者了解到,市卫生健康委、市...
十五运会组委会在深总结本届赛事... 深圳新闻网2025年11月22日讯(深圳报业集团记者 林炜航)11月21日,十五运会组委会在深圳市民...