Linux Ubuntu 部署SVN

最近需要在ubuntu server上部署一个svn,记录

不需要特定版本

如果不需要特定版本,这样安装就是最简单的

sudo apt update

 然后开始安装

sudo apt install subversion

等到安装完成之后执行查看版本命令,如果正常输出那就没问题了

svnadmin --version

安装特定版本

这就需要手动下载包和安装依赖,我这边就用1.14.1举例了

sudo apt update

安装必要的依赖 

sudo apt-get install libapr1-dev libaprutil1-dev libsqlite3-dev zlib1g-dev liblz4-dev libutf8proc-dev

下载 Subversion 1.14.1 的源代码。在浏览器中打开 Apache Subversion 下载页面 并复制链接地址,然后在终端中使用 wget 命令下载:

wget https://archive.apache.org/dist/subversion/subversion-1.14.1.tar.gz

解压源代码:

tar -xzvf subversion-1.14.1.tar.gz

进入解压后的目录:

cd subversion-1.14.1

配置 
如果这个命令当中报错缺少什么包,就进行单独apt安装就行了(我这边缺的包在开头已经在第一步单独进行安装,但是不排除某些特殊版本可能依赖不一样)

./configure

编译:

make

安装

sudo make install

等待命令完成就可以执行版本命令检查是否安装正确

svnadmin --version

 如果报错

svnadmin: error while loading shared libraries: libsvn_fs_fs-1.so.0: cannot open shared object file: No such file or directory


就参考我这篇blog:
SVN手动下载安装包编译安装之后,执行svnadmin命令报错svnadmin: error while loading shared libraries: libsvn_fs_fs-1.so.0-CSDN博客

新建repo

创建一个新的 SVN 仓库:

svnadmin create /path/to/new/repository

将 /path/to/new/repository 替换为你希望创建仓库的路径。

如果你有个某个svn的备份文件dump,可以运行这个进行导入

svnadmin load /path/to/new/repository < your_dump_file

创建用户 

进入你的 SVN 仓库目录:

cd /path/to/new/repository

将 /path/to/new/repository 替换为你创建的 SVN 仓库路径。

创建一个新的 SVN 用户:

sudo vim conf/passwd

然后在里面添加你需要的用户名和密码 

 

配置 SVN 权限

打开 SVN 仓库的 conf 目录:           

cd /path/to/new/repository/conf

 编辑 svnserve.conf 文件:(ctrl+o保存,ctrl+x退出)

nano svnserve.conf

将 anon-access 和 auth-access 设置为 none,并确保 authz-db 行没有注释(去掉前面的 #):

anon-access = none
auth-access = write
authz-db = authz#anon-access = none:#意义:该配置项指定匿名用户(未经身份验证的用户)的访问权限。在这里,none 表示禁止匿名用户访问,他们无法读取或写入版本库。
#其他可能的值:
#read:允许匿名用户只读访问版本库。
#write:允许匿名用户读写访问版本库。
#auth-access = write:#意义:该配置项指定经过身份验证的用户的访问权限。在这里,write 表示身份验证用户具有读写访问版本库的权限。
#其他可能的值:
#read:身份验证用户只有读取版本库的权限。
#write:身份验证用户具有读写访问版本库的权限。
#authz-db = authz:#意义:该配置项指定用于访问控制的权限数据库文件的路径。在这里,authz 表示使用名为 authz 的文件作为权限数据库。
#默认情况下,authz 文件中定义了用户和组的权限规则,用于更精细地控制用户对特定路径的访问权限。

保存并关闭文件。

创建并编辑 authz 文件:

nano authz

在文件中添加用户权限配置,例如:

[groups]
developers = username[/]
@developers = rw

这将创建一个组 developers,其中包含名为 username 的用户,并为该组授予对仓库的读写权限。 

在 SVN 的 authz 文件中,你可以通过在 groups 部分为组添加多个用户,然后在权限部分为该组分配相应的权限。以下是一个示例,演示如何添加多个用户到组:

[groups]
developers = user1, user2, user3[/]
@developers = rw

在这个例子中,developers 组包含了三个用户:user1、user2 和 user3。然后,@developers 表示将权限赋予该组。这意味着 user1、user2 和 user3 都将具有对整个仓库的读写权限。

如果要为不同的目录或项目设置不同的权限,你可以在 authz 文件中添加更多的部分,例如:

[groups]
developers = user1, user2, user3[/project1]
@developers = rw[/project2]
@developers = r[project3:/]
user1= rw[project4:/]
* =

在这个例子中,/project1 目录对 developers 组开放读写权限,而 /project2 目录只开放读权限。

project3 只对user1开放读写,
project4任何人都没有权限

记得在修改 authz 文件后重新启动 SVN 服务器,以使更改生效。

关闭svn进程命令

sudo pkill svnserve

查看svn进程命令

ps aux | grep svnserve

然后保存并关闭文件。

启动 SVN 服务器

返回到 SVN 仓库的根目录:

cd /path/to/new/repository

启动 SVN 服务器:

svnserve -d -r /path/to/new/

-d 选项表示以守护进程(后台)模式运行,-r 选项指定 SVN 服务器的根目录。

然后拉取的url就是.(repository就是你项目的名字)

svn://vm_ip/repository

 配置SVN自启动

这边如果想要server启动的时候svn就自动启动,就需要配置service

打开文本编辑器,创建一个新的服务文件,例如 svnserve.service:

sudo nano /etc/systemd/system/svnserve.service

在编辑器中添加以下内容(替换 /path/to/new/repository 为你的 SVN 仓库路径):

如果不知道svnserve你vm中的路径,可以使用这个命令查看

which svnserve

 pkill 同理

which pkill

 

                                                               
[Unit]
Description=Subversion SVN Serve[Service]
Type=forking
ExecStart=/usr/local/bin/svnserve -d -r  /path/to/new/
ExecStop=/usr/bin/pkill svnserve
User=cortexDemo[Install]
WantedBy=multi-user.target

将 your_username 替换为运行 SVN 服务的用户名

保存并关闭文件。

重新加载 systemd 配置:

sudo systemctl daemon-reload

启用 SVN 服务,使其在系统启动时自动启动:

sudo systemctl enable svnserve.service

手动启动 SVN 服务:

sudo systemctl start svnserve.service

现在,SVN 服务将在系统启动时自动启动。你可以使用以下命令检查服务状态:

sudo systemctl status svnserve.service

确保在 Active 行中看到 running 表示服务正在运行。

查看具体log

sudo journalctl -f -u svnserve -n 100

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

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

相关文章

C++默认参数详解

目录 缺省参数/默认参数概念&#xff1a; 缺省参数的应用场景&#xff1a; 函数定义定义分离时的默认参数&#xff1a; 简单的编译链接&#xff1a; 缺省参数/默认参数概念&#xff1a; 缺省参数/默认参数&#xff1a;通俗点讲就是形参给的那个某个值 func(int a 0); //例…

汽车协议学习

ⅠOBD 1.OBD接口 OBD有16个引脚&#xff0c;每个引脚的电压不同&#xff08;可以对应不同的协议&#xff09; 车端&#xff1a; 16- 9 (短一点点的) 8-1 &#xff08;长一点的&#xff09; 2.基于OBDⅡ的通信协议 CAN &#xff08;ISO-15765&am…

Python-Flask 快学

flask是Python的一个轻型Web框架. 使用pycharm自动创建项目,也可以手动创建,以下是目录的结构: ├── app.py├── static└── templates 一、创建一个简单应用 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return "hello world &…

20240309-2-校招前端面试常见问题-NodeJS

校招前端面试常见问题【6】——NodeJS NodeJS Q&#xff1a;NodeJS 的 IO 模型特点是什么&#xff1f;与多线程同步 IO 有什么不同&#xff1f; NodeJS 的 IO 模型&#xff08;更准确的说是 js 的执行环境&#xff0c;也就是 v8&#xff09;的特点是“单线程异步非阻塞”。 …

Linux学习-共用体和枚举,位运算

目录 共用体 ​编辑枚举 位运算 共用体 定义和访问都和结构体类似&#xff1b;区别在于共用体所有的成员变量共享同一片空间&#xff0c;内存空间就是其最大数据类型所占内存的大小&#xff1b; 如果给成员变量2的值&#xff0c;那么成员变量1的值就会被覆盖&#xff1b;主…

实现鼠标移动el-select下拉框的label上面显示出table悬浮窗

首先是对vue代码 实现思路就是在el-option里面放一个span来包裹el-popover&#xff0c;里面在放tabe实现悬浮表格 <el-form-item label"原理图编号"><el-select v-model"data.number" placeholder"请选择" clearable multiple collaps…

外包干了30天,我后悔了。。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这次来聊一个大家可能也比较关心的问题&#xff0c;那就是就业城…

枚举赋值及强制转换问题

对枚举进行字符赋值&#xff0c;需要进行强制类型转换之后&#xff0c;才能得到想要的值&#xff0c;如下 typedef enum data {DIRECTION_X X,DIRECTION_Y Y,DIRECTION_Z Z,DIRECTION_T T }NumData;int main() {NumData numdata DIRECTION_Y;count <<"num is&…

第九篇 – 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

电路板故障的四大原因--芯片级维修

电路板是我们日常使用的技术的核心。 手机、电视、车辆、路灯和大量其他物品都依赖于电路板&#xff0c;这就是为什么故障可能具有高度破坏性。 电路板出现故障的原因有多种&#xff0c;与潮湿、高温和污垢等常见因素有关。 了解电路板故障的原因可以让您避免未来的故障&#x…

波奇学Linux: 信号捕捉

sigaction:修改信号对应的handler方法 act输入型参数&#xff0c;oldact输出型参数 void (*sa_handler) (int) //修改的自定义函数 sigset_t sa_mask // void handler(int signo) {cout<<"catch a signal, signal number: "<<signo<<endl; } int …

WindTerm的安装及远程连接Linux系统步骤

文章目录 WindTerm下载WindTerm远程连接Linux WindTerm下载 官网下载链接 WindTerm网盘下载链接 WindTerm不需要安装&#xff0c;将下载的压缩包解压后直接找到WindTerm.exe执行文件&#xff0c;双击即可运行 WindTerm远程连接Linux 1.先获取你的Linux的IP地址&#xff0c;…

【高效开发工具系列】Windows 系统下将 Windows 键盘的 ctrl 和 alt 互换

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Mysql深入学习 基础篇 Ss.06 事务

青青子衿&#xff0c;悠悠我心 纵我不往&#xff0c;子宁不嗣音 —— 24.3.9 事务&#xff1a; 事务简介 事务操作 事务四大特性 并发事务问题 事务隔离级别 一、事务简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整…

【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统

文章目录 【蓝桥杯-单片机】LED和按键小练习&#xff1a;Led彩灯控制系统01 题目描述02 题目解答03 本题总结整体逻辑框架&#xff08;详细版&#xff09;整体逻辑框架&#xff08;缩略版&#xff09;按键读取模块按键消抖模块流水灯显示模式&#xff08;1&#xff09;从上向下…

基于SVM模型的网络入侵检测模型训练与评估(NSL-KDD数据集)

简介 针对网络安全领域的NSL-KDD数据集进行分类任务的预处理和模型训练、以及超参数调优。 数据预处理 读取并解析数据集&#xff1b;检查并删除指定列&#xff08;outcome&#xff09;的缺失值&#xff1b;对类别型特征&#xff08;protocol_type, service, flag&#xff0…

GPT-4 等大语言模型(LLM)如何彻底改变客户服务

GPT-4革命&#xff1a;如何用AI技术重新定义SEO策略 在当今快节奏的数字时代&#xff0c;客户服务不再局限于传统的电话线或电子邮件支持。 得益于人工智能 (AI) 和自然语言模型 (NLM)&#xff08;例如 GPT-4&#xff09;的进步&#xff0c;客户服务正在经历革命性的转变。 在这…

【Python】成功解决NameError: name ‘a‘ is not defined

【Python】成功解决NameError: name ‘a’ is not defined &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订…

gensim 实现 TF-IDF;textRank 关键词提取

目录 TF-IDF 提取关键词 介绍 代码 textRAnk 提取关键词 这里只写了两种简单的提取方法&#xff0c;不需要理解上下文&#xff0c;如果需要基于一些语义提取关键词用 LDA&#xff1a;TF-IDF&#xff0c;textRank&#xff0c;LSI_LDA 关键词提取-CSDN博客 TF-IDF 提取关键词…

MySQL中批量修改某个字段的一部分字符,可以使用UPDATE语句结合REPLACE函数

示例语句 UPDATE your_table_name SET your_column_name REPLACE(your_column_name, old_string, new_string) WHERE your_column_name LIKE %old_string%; 原因&#xff1a; 项目用了一个服务上传地址原来是http开头&#xff0c;数据库存的地址也是http&#xff0c;后来加了…