搭建企业级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客户端使用

image

  • 中文包
    image

  • 安装
    傻瓜式安装,跟着点就OK

  • 汉化
    鼠标右键->TortoiseSVN->settings
    image

  • 下载代码
    进入相应目录->鼠标右键->SVN Checkout
    image

image

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
posted @ 2023-01-05 14:31  jluo123  阅读(159)  评论(0编辑  收藏  举报