搭建企业级SVN版本服务器
第一节、环境
1.1主机详情
主机名 | ip | 操作系统 | 备注 |
---|---|---|---|
svnServer | 192.168.2.103 | CentOS Linux release 7.4.1708 | svn服务器 |
client | 192.168.2.122 | CentOS Linux release 7.4.1708 | 客户端 |
1.2安装前操作
[root@svnserver ~]# systemctl stop firewalld
[root@svnserver ~]# systemctl disable firewalld
[root@svnserver ~]# setenforce 0
[root@svnserver ~]# sed -i 's/SELINUX=disabled/SELINUX=disabled/g' /etc/selinux/config
第二节、安装
2.1安装svn、httpd
[root@svnserver ~]# yum install -y httpd subversion mod_dav_svn
2.2创建SVN仓库
[root@svnserver ~]# mkdir /var/svn
[root@svnserver ~]# cd /var/svn/
[root@svnserver svn]# svnadmin create project
[root@svnserver svn]# ls
project
[root@svnserver svn]# ls project/
conf db format hooks locks README.txt
[root@svnserver svn]# chown -R apache:apache project
2.3修改svnserve.conf文件,取消如下行前的注释并改成相应的值
[root@svnserver svn]# cd project/conf/
[root@svnserver conf]# vim svnserve.conf
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
2.4将默认的passwd文件改名,创建htpasswd格式的用户名密码文件passwd
[root@svnserver conf]# htpasswd -cm passwd jluo //其中-c应该是表示创建passwd文件
New password:
Re-type new password:
Adding password for user jluo
[root@svnserver conf]# htpasswd -m passwd jack
New password:
Re-type new password:
Adding password for user jack
[root@svnserver conf]# cat passwd
jluo:$apr1$Esrvm6z5$eWzX/3DrOFoUmlj3H0Nf80
jack:$apr1$v47pHeYE$KEtgFAQfbmL3Qy6m9OmDX/
2.5修改authz文件,配置用户和组对仓库下各目录的访问权限,文件内容示例如下
[root@svnserver conf]# vim authz
[groups]
project = jluo,jack //这里是定义一个组及其用户
[/]
@project = rw // 为一个组指定相关权限,读写
[/system]
@project = rw
[/vnetoss]
@project = r
jluo = rw
第三节、添加httpd配置文件
3.1配置http文件
[root@svnserver ~]# cd /etc/httpd/conf.d
[root@svnserver conf.d]# vim svn.conf
<Location /project>
DAV svn
#SVNParentPath /var/lib/svn
SVNPath /var/svn/project
# Limit write permission to list of valid users.
#<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /var/svn/project/conf/passwd
AuthzSVNAccessFile /var/svn/project/conf/authz
Satisfy all
Require valid-user
#</LimitExcept>
</Location>
3.2开启http
[root@svnserver ~]# systemctl start httpd
[root@svnserver ~]# systemctl enable httpd
[root@svnserver ~]# ss -tunlp | grep httpd
tcp LISTEN 0 128 :::80 :::* users:(("httpd",pid=3058,fd=4),("httpd",pid=3057,fd=4),("httpd",pid=3056,fd=4),("httpd",pid=3055,fd=4),("httpd",pid=3054,fd=4),("httpd",pid=3053,fd=4))
3.3开启SVN服务
[root@svnserver ~]# svnserve -d -r /var/svn
[root@svnserver ~]# ss -tunlp | grep svn
tcp LISTEN 0 7 *:3690 *:* users:(("svnserve",pid=3118,fd=3))
3.4初始化project
[root@svnserver ~]# mkdir /test
[root@svnserver ~]# cd /test
[root@svnserver test]# echo "test data" > test.txt
[root@svnserver test]# svn import . file:///var/svn/project -m "init Data"
正在增加 test.txt
提交后的版本为 1。
第四节、Linux客户端测试
[root@client ~]# mkdir /test
[root@client ~]# cd /test/
[root@client test]# svn --username jluo --password 123456 co http://192.168.2.103/project code
保存未加密的密码(yes/no)?yes
A code/test.txt
取出版本 1。
[root@client test]# ls
code
[root@client test]# ls code/
test.txt
[root@client test]# cat code/test.txt
test data
[root@client test]# cd code/
//挑选任意文件修改其内容
[root@client code]# echo test >> test.txt
//将本地修改的数据同步到服务器
[root@client code]# svn ci -m "modify test"
//将服务器上新的数据同步到本地
[root@client code]# svn info http://192.168.2.103/project
//查看版本仓库的日志
[root@client code]# svn log http://192.168.2.103/project
//本地新建一个文件
[root@client code]# echo 'test' > test.sh
//提交失败,该文件不被svn管理
[root@client code]# svn ci -m "new file"
//将文件或目录加入版本控制
[root@client code]# svn add test.sh
//再次提交,成功
[root@client code]# svn ci -m "new file"
//创建子目录
[root@client code]# svn mkdir subdir
//使用svn删除文件
[root@client code]# svn rm test.txt
//提交一次代码
[root@client code]# svn ci -m "delete test.txt"
//任意修改本地的一个文件
[root@client code]# echo 123455 >> test.sh
//查看所有文件的差异
[root@client code]# svn diff
Index: test.sh
===================================================================
--- test.sh (版本 3)
+++ test.sh (工作副本)
@@ -1 +1,2 @@
test
+123455
//仅查看某一个文件的差异
[root@client code]# svn diff test.sh
Index: test.sh
===================================================================
--- test.sh (版本 3)
+++ test.sh (工作副本)
@@ -1 +1,2 @@
test
+123455
//查看服务器文件的内容
[root@client code]# svn cat http://192.168.2.103/project/test.sh
test
//删除文件所有内容,但未提交
[root@client code]# sed -i 'd' test.sh
//还原tmp.mount文件
[root@client code]# svn revert test.sh
已恢复“test.sh”
//任意删除若干文件
[root@client code]# rm -rf *.sh
[root@client code]# ls
subdir
//还原
[root@client code]# svn update
正在升级 '.':
已还原“test.sh”
版本 4。
[root@client code]# ls
subdir test.sh
//修改本地副本中的代码文件
[root@client code]# echo 1111 >>test.sh
//提交代码
[root@client code]# svn ci -m "modify test.sh"
正在发送 test.sh
传输文件数据.
提交后的版本为 5。
//将文件从版本5还原到版本3
[root@client code]# svn merge -r5:3 test.sh
--- 正在反向合并 r5,经由 r4,到 “test.sh”:
U test.sh
--- 记录反向合并 r5,经由 r4,到“test.sh”的信息:
U test.sh
--- 正在从 'test.sh' 删除合并信息:
U test.sh
[root@client code]# cat test.sh
test
- svn命令列表
命令 | 作用 |
---|---|
add | 添加文件 |
commit(ci) | 提交更新 |
checkout(co) | 检出代码 |
cat | 查看代码文件内容 |
del | 删除文件 |
diff | 文件对比 |
info | 查看版本信息 |
list | 查看文件列表 |
log | 查看版本历史 |
update | 更新 |
mkdir | 创建目录 |
第五节、windows客户端使用
- TortoiseSVN下载
https://tortoisesvn.net/downloads.html
-
中文包
-
安装
傻瓜式安装,跟着点就OK -
汉化
鼠标右键->TortoiseSVN->settings
-
下载代码
进入相应目录->鼠标右键->SVN Checkout
svn版本备份和恢复注意事项
svn备份常用命令
1、完全备份和增量备份svn。
#完全备份/svn/project/www这个版本库,并另存为full.svn.bak
svnadmin dump /svn/project/www > full.svn.bak
svn如何获取当前仓库的版本号
svn info svn[http]://uri_to_trunk_path
#以增量把版本库8转存到svn.bak.1
svnadmin dump /svn/project/www -r 8 --incremental > svn.bak.1
- 参数介绍:
-r [--revision] :指定版本ARG(或X:Y范围)
--incremental :以增量方式进行转存
--deltas :在转存输出中使用差异
-q [--quiet] :在标准错误输出不显示进度(仅错误)
2、dump备份还原。
svnadmin create /svn/project/test #创建一个新的版本库
svnadmin load /svn/project/test < full.svn.bak #现还原完全备份
svnadmin load /svn/project/test < svn.bak.1 #再还原增量备份的内容
3、热拷贝
#热拷贝www这个版本库,可以直接拿来用
svnadmin hotcopy /svn/project/www /root/backup.svn.www/
注意事项
- 1、进行SELINUX相关设置
如果开启了SELINUX,则需执行如下两条命令:
chcon -R -t httpd_sys_content_t devops
setsebool httpd_unified=1
注:setsebool httpd_unified=1这个设置可以解决这样的错误:Can’t open file ‘/var/lib/svn/devops/db/txn-current-lock’: Permission denied
- 2、如果开启防火墙,则输入如下命令
firewall-cmd --permanent --add-service=http
firewall-cmd --reload