【docker】部署svn服务器,docker安装部署svn服务器

话不多说直接上步骤!

1.下载镜像,创建容器

# 下载镜像
docker pull elleflorio/svn-server
# 创建svn仓库目录,进入svn仓库目录
mkdir -p /var/svn
# 创建svn服务容器,把容器中的svn仓库映射到本机,并映射3690端口
docker run -d --name svn-server -p 3690:3690 -v "$PWD":/home/svn -v /var/www/html:/var/www/html elleflorio/svn-server

2.在服务器创建代码仓库

# 创建代码仓库
docker exec -t svn-server svnadmin create /home/svn/test

以上代码中,在容器中的/home/svn/test目录创建代码仓库,会同步到本机的/var/svn目录。我们先进行svn仓库配置。

SVN库中的配置目录 conf 有三个文件:

 authz 是权限控制文件passwd 是帐号密码文件svnserve.conf 是SVN服务综合配置文件

配置权限配置文件 authz

编辑 authz ,内容参考如下:

[groups]            
#用户组
admin = master,master  
#用户组所对应的目录
[/]                 
#库目录权限
@admin = rw         
#用户组权限
*=r第一种方式:单个添加:# 按账号分权限[test/]admin = rwtest = r第二种方式(后面采用此方式配置):用户分组,再设权限[groups]
# 按用户组分权限
admin = admin,admin1 # admin为用户组,等号之后的为用户
test = test1, test2 # test为用户组,等号之后的为用户[/] # 表示svn仓库目录(/var/svn/test),test: 对应前面配置的realm = test
@admin = rw # 表示admin组对仓库(/var/svn/test)目录有读写权限,r为读,w为写
@test = r # 表示test组的用户对对仓库(/var/svn/test)目录只有读的权限[/test1] # 表示test1目录(/var/svn/test/test1)
@test = rw # 表示test组对test1目录有读写权限
* =备注:版本库的目录格式如下:[<版本库>:/项目/目录]@<用户组名> = 权限<用户名> = 权限其中[]內容有許多写法:[/],表示根目录及其一下的路径,根目录是svnserver启动时指定好的,上述实例中我们指定为:/svn/svndata([/]=/svn/svndata).[/]就是表示对全部版本设置的权限[test:/],表示对版本库test设置权限;[test:/svnadmin],表示对版本库test中的svnadmin项目设置权限;[test:/svnadmin/second],表示对版本库test中的svnadmin项目的目录设置权限;权限的主体可以是用户组,用户或者*,用户组在前面要以@开头,*表示全部用户权限分为:r ,w, rw和null ,null空表示没有任何权限。auhtz配置文件中的每个参数,开头不能有空格,对于组要以@开头,用户不需要。

配置账号密码文件 passwd

编辑 passwd ,内容参考如下:

[users]
# harry = harryssecret
# sally = sallyssecret
master = master
admin = admin

配置 SVN 服务综合配置文件 svnserve.conf

编辑 svnserve.conf ,内容参考如下:

[general]
# force-username-case = none
# 匿名访问的权限 可以是read、write,none,默认为read
anon-access = none
#使授权用户有写权限
auth-access = write
#密码数据库的路径
password-db = passwd
#访问控制文件
authz-db = authz
#认证命名空间,SVN会在认证提示里显示,并且作为凭证缓存的关键字
realm = /var/svn/test
[sasl]

3.同步代码到服务器项目目录

(1)在PC上将代码上传到svn仓库(PC上必须安装SVN)

# 将仓库中的代码pull到本地,下面的123.123.123.123代表的是服务器IP地址,以下过程可能会需要输入svn账号和密码
svn checkout svn://123.123.123.123/test
# 进入代码目录
cd test
# 创建示例文件
echo "hello" >> test.txt
# 提交代码到SVN仓库
svn add test.txt
svn commit test.txt -m 'test'

(2)服务器同步代码

# 将代码同步到项目目录
docker exec -t svn-server svn checkout svn://127.0.0.1/test /var/www/html/test --username master --password master --force --no-auth-cache

(3)自动同步代码
实际上,如果我们用于开发的PC每一次向服务器提交一次代码,服务器都需要手动执行一下同步命令,本地代码才会同步到服务器的项目目录。想必很麻烦,于是我们可以使用SVN提供的钩子去实现代码自动更新。

# 进入钩子配置文件目录
cd /var/svn/test/hooks
# 复制钩子文件
cp post-commit.tmpl post-commit

我们将post-commit.tmpl钩子文件的后缀名去掉即可生效,于是我们复制一份。接下来我们编辑post-commit文件,注释掉发送邮件的代码。然后在下面加上两行代码即可,如下:

REPOS="$1"
REV="$2"
TXN_NAME="$3"#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
# 设置编码
export LANG="en_US.UTF-8"
# 更新代码到项目目录
svn update --username master --password master /var/www/html/test

编辑完成配置文件之后,我们只需要保存即可,自动生效。此时在PC上修改项目内容,再次提交到代码仓库,服务器会自动同步到服务器的项目目录。不再需要手动执行svn checkout指令

使用svn小乌龟连接时,注意url:svn://ip/项目名

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/27259.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-单例模式

面向对象语言讲究的是万物皆对象。通常流程是先定义可实例化类&#xff0c;然后再通过各种不同的方式创建对象&#xff0c;因此类一般可以实例化出多个对象。但是实际项目开发时&#xff0c;我们还是希望保证项目运行时有且仅包含一个实例对象。这个需求场景的出发点包括但不限…

Unity游戏源码分享-射击游戏Low Poly FPS Pack 3.2

Unity游戏源码分享-射击游戏Low Poly FPS Pack 3.2 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88057717

循环退出语句break、continue,有什么区别?

目录 一、break语句二、continue语句三、break、continue语句有什么区别&#xff1f; 一、break语句 在Java中&#xff0c;break语句用于终止当前循环或switch语句的执行&#xff0c;并跳出该结构。当break语句被执行时&#xff0c;程序将会跳出包含该break语句的最内层的循环…

前端学习记录~2023.7.15~CSS杂记 Day7

前言一、介绍 CSS 布局1、正常布局流2、display 属性3、弹性盒子&#xff08;1&#xff09;设置 display&#xff1a;flex&#xff08;2&#xff09;设置 flex 属性 4、Grid 布局&#xff08;1&#xff09;设置 display&#xff1a;grid&#xff08;2&#xff09;在网格内放置元…

杨辉三角 II

给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1] 示例 2: 输入: rowIndex 0 输出: [1] 示例 3: 输入: rowIndex 1 输出: [1,1]…

C++中的“三重”

博文内容&#xff1a;重载、重定义&#xff08;隐藏&#xff09;&#xff0c;重写&#xff08;覆盖&#xff09; 三重区别及联系 概念联系及区别1、作用域2、函数要求 概念 重载 函数名相同,函数的参数列表不同(包括参数个数和参数类型)&#xff0c;至于返回类型可同可不同。 …

【ABAP】数据类型(八)「表类型」

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较…

h5最新mtgsig1.1成品

h5最新mtgsig1.1成品 千锤百炼&#xff0c;方得始终

印刷企业如何利用MES管理系统实现智能计划排产

在数字化时代&#xff0c;印刷企业面临着日益激烈的市场竞争和不断攀升的成本压力。为了提高生产效率和质量&#xff0c;印刷企业需要采用先进的生产管理系统。其中&#xff0c;MES生产管理系统已成为实现智能计划排产的重要工具。本文将探讨如何利用印刷MES管理系统实现印刷企…

「深度学习之优化算法」(十四)麻雀搜索算法

1. 麻雀搜索算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   麻雀搜索算法(sparrow search algorithm)是根据麻雀觅食并逃避捕食者的行为而提出的群智能优化算法。提出时间是2020年,相关的论文和研究还比较少,有可能还有一些正在发表中,受疫情影响需要论…

session 生命周期和经典案例-防止非法进入管理页面

文章目录 session 生命周期和Session 经典案例-防止非法进入管理页面session 生命周期Session 生命周期-说明代码演示说明 Session 的生命周期创建CreateSession2创建ReadSession2 解读Session 的生命周期代码示例创建DeleteSession Session 经典案例-防止非法进入管理页面需求…

【25】SCI易中期刊推荐——神经网络科学(中科院4区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…