基于Centos7.9搭建svn服务端

news/2025/11/12 15:23:34/文章来源:https://www.cnblogs.com/hoyeong/p/19214185

@

目录
  • 开始搭建
  • SVN 迁移

SVN 的全称为 Subversion,它是一个开源的版本控制系统。

  • 基本原理
    它采用集中式的版本管理方式,有一个中央版本库用于存放所有文件及版本信息,多个用户可以从这个中央版本库获取文件副本(称为工作副本)到本地进行操作,操作完成后再将更改提交回中央版本库。在这个过程中,SVN 能够记录文件的每一次修改、添加、删除等变更情况,方便回溯到不同的历史版本,查看文件是如何随着时间演变的。
  • 主要功能
    版本管理:能清晰地保存各个阶段文件的版本,用户可以轻松地查看某个文件过去的任意版本,便于对比不同版本之间的差异、恢复到之前的正确版本等,比如软件开发过程中对代码文件的版本管控。
    协同工作:支持多人同时在一个项目上进行开发等工作,不同开发人员对各自负责的模块进行修改、完善后,依次将修改提交到中央版本库,能有效避免多人修改造成的混乱,协调团队成员间的协作。
    权限控制:可以针对不同用户或用户组设置对文件、目录的不同访问权限,例如有的用户只有读取权限,而有的用户具备读写权限等,增强了项目的安全性和管理规范性。
  • 应用场景
    软件开发:是软件开发团队常用的工具之一,用于管理代码的版本迭代、开发分支等,方便团队成员共同开发一个大型软件项目,保证代码的有序性和可追溯性。
    文档管理:对于企业内部文档,像项目文档、技术文档等,也可以通过 SVN 进行版本控制和管理,方便不同部门、人员在不同阶段对文档进行更新、查阅等操作

开始搭建

svnserve.conf VS Apache HTTPD 配置

特性 svnserve (每个仓库的 svnserve.conf) Apache HTTPD (全局的 httpd.conf 或 subversion.conf)
配置范围 仓库级别,每个库独立 全局级别,统一管理所有仓库
管理难度 繁琐(仓库多时) 方便(集中管理)
功能 基础 强大(支持HTTPS、LDAP、AD集成等)
性能 轻量、高效 功能丰富,开销稍大
推荐度 适用于简单内部环境 推荐用于生产环境

在CentOS 7.9 上搭建 SVN 服务端(使用 Apache httpd + mod_dav_svn)

  • 安装必要软件包
    httpd: Apache HTTP 服务器。
    mod_dav_svn: 让 Apache 支持 SVN 的模块。
    subversion: SVN 客户端和服务端核心工具。
yum install -y httpd mod_dav_svn subversion

创建 SVN 版本库,svnserve默认路径是/var/svn,如果有修改需要调整

  • 创建一个目录来存放所有的 SVN 仓库
mkdir -p /opt/svn
  • 创建一个新的 SVN 仓库
svnadmin create /opt/svn/myproject
  • 调整目录权限,让 httpd用户拥有读写权限:
chown -R apache:apache /opt/svn/myproject
chmod -R 770 /opt/svn/myproject
  • 修改仓库路径配置文件
vi /etc/sysconfig/svnserve
OPTIONS="--daemon --root /opt/svn"

配置HTTPD

  • 编辑 Subversion 的配置文件
    SVNParentPath /opt/svn: 表示 /opt/svn 下的每一个子目录都是一个独立的 SVN 仓库。访问时用 http://your-server-ip/svn/myproject。
    SVNPath /opt/svn/myproject: 表示只配置一个单一的仓库。访问时用 http://your-server-ip/svn。
    AuthUserFile /opt/svn/.htpasswd: 指定存放用户密码的文件。
    AuthzSVNAccessFile /opt/svn/authz: 指定权限控制文件。
vi /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so# 为 SVN 仓库定义一个位置
<Location /svn># 启用 SVN DAVDAV svn# 指向所有仓库的父目录(使用 SVNParentPath)SVNParentPath /opt/svn# 或者指向单个仓库(使用 SVNPath)# SVNPath /opt/svn/myproject# 认证类型:BasicAuthType BasicAuthName "Authorization Realm"AuthUserFile /opt/svn/.htpasswd# 授权控制文件AuthzSVNAccessFile /opt/svn/authz# 只有认证用户才能访问Require valid-user
</Location>

创建用户和权限文件

  • 创建第一个 SVN 用户
    -c 参数表示创建文件,后续添加用户时不要加 -c,以免覆盖。
    系统会提示输入并确认密码。
htpasswd -c -m /opt/svn/.htpasswd admin
  • 如果需要修改用户密码
    注意:不要使用 -c 参数,否则会创建新文件
    修改立即生效,无需重启
htpasswd /opt/svn/.htpasswd admin
  • 创建权限控制文件
    [groups]: 定义用户组,方便管理。
    [repository_name:/path]: 针对特定仓库的特定路径设置权限。
    @groupname = permission: 给组赋权。
    username = permission: 给个人赋权。
    权限:r (读), w (写), 空 (无权限)。
vi /opt/svn/authz
[groups]
# 定义用户组
admin = admin,user1
dev = user2,user3# 为所有仓库设置默认权限(无权限)
[/]
* =# 设置 myproject 仓库的权限
[myproject:/]
@admin = rw
@dev = r
user4 = rw# 设置另一个仓库 'project2' 的权限
# [project2:/]
# @admin = rw
# @dev = rw
  • 确保 httpd用户对这些文件有读权限
chown apache:apache /opt/svn/.htpasswd /opt/svn/authz
chmod 640 /opt/svn/.htpasswd /opt/svn/authz
  • 启动并启用服务
systemctl start httpd
systemctl enable httpd
  • 关闭防火墙和selinux
setenforce 0
systemctl stop firewalld
  • 浏览器界面访问:http://ip/svn/myporject
    输入设置的admin和用户后可查看

在这里插入图片描述

  • 客户端上传文件验证测试

在这里插入图片描述

SVN 迁移

什么数据会被迁移?

  • 被迁移的是版本库本身的内容和历史,包括:
    所有版本的代码和文件
    每一次提交的日志信息(svn commit -m "message")
    每一次提交的作者(username)
    目录结构、分支(branches)、标签(tags)
    所有的属性(properties)

什么数据不会被迁移?

  • 绝对不会被迁移的是认证系统的配置,包括:
    用户密码文件
    Apache 的 .htpasswd 文件
    svnserve 的 conf/passwd 文件
    权限控制文件
    authz 文件(Apache 或 svnserve 的)
    服务器配置
    Apache 的 httpd.conf 或 subversion.conf
    svnserve 的 conf/svnserve.conf
    钩子脚本(hooks/)

迁移前需要提前在目标服务器上配置用户和权限管理


使用 svnadmin dump 和 svnadmin load命令进行迁移

  • 在源服务器上导出转储文件
    使用 svnadmin dump 命令将版本库导出为一个文件
    /opt/svn/old_repo: 源版本库的路径。
    old_repo.svndump: 生成的转储文件,可以任意命名。
svnadmin dump /opt/svn/old_repo > /tmp/old_repo.svndump

注:如果是在win系统上迁移到Linux,注意要在cmd窗口执行,而不是powershell否则会报错(svnadmin: E140001: Malformed dumpfile header '?\255?\254S')

  • 在目标服务器上准备并导入
    创建新的空版本库
mkdir -p /opt/svn
svnadmin create /opt/svn/new_repo
  • 加载转储文件到新库
svnadmin load /opt/svn/new_repo < /tmp/old_repo.svndump
  • 调整权限
chown -R apache:apache /opt/svn/new_repo
chmod -R 770 /opt/svn/new_repo
chcon -R -t httpd_sys_content_t /opt/svn/new_repo
chcon -R -t httpd_sys_rw_content_t /opt/svn/new_repo
  • 用户执行以下命令来切换工作副本指向新的服务器地址:
    进入本地仓库目录,然后切换到新的服务地址
cd /path/to/your/working-copy
svn switch --relocate http://old-server/svn/old_repo http://new-server/svn/new_repo .
  • 如果没有安装客户端命令还可界面切换

在这里插入图片描述

  • 修改新地址后直接登录即可
    在这里插入图片描述

  • 或者更简单直接的方法:重新检出一份,只是会重新下载仓库所有内容

svn checkout http://new-server/svn/new_repo new-copy
  • 验证地址
svn info

如果迁移后出现报错

post commit FS processing had error:
sqlite: attempt to write a readonly database
  • 这个错误表明SQLite数据库文件权限问题还没有解决
    查看仓库下的db文件夹:db.sqlite (或类似名称的数据库文件)、uuid
[root@svn db]# ll
total 4384
-rwxrwx---. 1 apache apache       5 Sep 28 23:14 current
-rwxrwx---. 1 apache apache      22 Sep 25 10:31 format
-rwxrwx---. 1 apache apache    1959 Sep 25 10:31 fsfs.conf
-rwxrwx---. 1 apache apache       5 Sep 25 10:31 fs-type
-rwxrwx---. 1 apache apache       2 Sep 25 10:31 min-unpacked-rev
-rw-r--r--. 1 root   apache 4459520 Sep 28 22:11 rep-cache.db
drwxrws---. 9 apache apache      69 Sep 28 22:07 revprops
drwxrws---. 9 apache apache      69 Sep 28 22:07 revs
drwxrws---. 2 apache apache       6 Sep 28 23:14 transactions
-rwxrwx---. 1 apache apache       4 Sep 28 23:14 txn-current
-rwxrwx---. 1 apache apache       0 Sep 25 10:31 txn-current-lock
drwxrws---. 2 apache apache       6 Sep 28 23:14 txn-protorevs
-rwxrwx---. 1 root   apache      37 Sep 28 21:02 uuid
-rwxrwx---. 1 apache apache       0 Sep 25 10:31 write-lock

则需要修改用户所属权限

chown -R apache:apache db
chmod 664 rep-cache.db

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

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

相关文章

梯度检查

梯度检查(Gradient Checking)中使用的双边逼近(Two-sided Approximation)方法,也称为中心差分法(Central Difference Method)。梯度检查的目的 在深度学习中,我们使用反向传播算法(Backpropagation)来计算损…

荆门定制西林瓶灌装机费用解析,比标准款贵多少?

在荆门地区,随着生物医药、诊断试剂及营养液等细分行业的快速发展,对西林瓶灌装设备的需求日益增长。然而,不少企业在选购定制化西林瓶灌装机时,常因缺乏专业指导而陷入“参数陷阱”或“功能冗余”误区。据行业调研…

甘孜西林瓶灌装压塞机安装调试指南及周期解析

在甘孜地区,随着制药及生物制剂产业的稳步发展,对西林瓶灌装设备的需求持续增长。用户普遍关心的问题之一是:西林瓶灌装压塞机的安装调试是否由厂家负责?安装周期通常需要多久?针对此类问题,业内通行做法是由设备…

Day19综合案例一

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

P13508 [OOI 2024] Burenka and Pether

对于任意一个点 \(i\),\(i\) 能直接到达的点 \(p\) 需要 \(a_p\ge a_i\),且 \(p\le r_i\),其中 \(r_i\) 是 \(i\) 能到的最后一个 \(<a_i\) 的位置 \(+d\)。\(r_i\) 可以按值域扫描线预处理。 对于 \(a_{v_i}\) …

常见的无状态服务与典型有状态服务

常见的无状态服务与典型有状态服务要区分无状态服务和有状态服务,核心标准是:无状态服务:不存储业务数据,每次请求独立(输入相同则输出相同),可随意扩容 / 迁移,依赖外部存储(如数据库、缓存)保存状态; 有状…

CF1720D2 Xor-Subsequence (hard version)

这个题无论是 D1 还是 D2 都很具有思维含量。 首先考虑 \(a_i \le 200\) 怎么做。 考虑异或有性质 \(|a - b| \le a \oplus b \le a + b\),那么推一下就会知道目前 \(j\) 一定 \(\ge i - 400\),暴力枚举即可。 然后思…

如何实现大模型和本企业内部知识相结合形成一个适合本企业的小模型

将大模型与企业内部知识结合,构建适合本企业的“小模型”或增强型应用,核心目标是让通用大模型具备企业专属的知识、语言风格和业务逻辑,同时避免从零训练大模型的高成本和高门槛。以下是具体实现路径和关键步骤: …

etcd的压缩和碎片整理提升性能

压缩+碎片整理(逐节点执行,先压缩后整理,避免并发)bash 复制for ep in ${ENDPOINTS//,/ }; doecho "==> working on $ep"# 取得当前 revisionREV=$(etcdctl --endpoints=$ep endpoint status --write…

Maven 继承的“隐形杀手”:被你忽略的 relativePath

在日常的 Maven 多模块项目开发中,我们对 <parent> 标签带来的继承便利习以为常。但在这个便利之下,隐藏着一个微小却极易被忽视的配置:<relativePath>。 你是否遇到过这样的“灵异事件”:在 IDEA 中,…

【SPIE出版 | 往届会后3个月完成EI检索】第二届遥感与数字地球国际学术会议 (RSDE 2025)

2025年第二届遥感与数字地球国际学术会议(RSDE 2025)定于2025年11月14-16日在云南大理隆重举行。【高录用稳检索 | 往届会后3个月完成EI检索】 【团队报名享优惠 | 参会方式:口头汇报、海报展示、仅参会】 第二届遥…

基础模型+场景微调

“基础模型 + 场景微调”是目前性价比最高、最主流的企业级AI落地方式。它的核心思想是:站在巨人的肩膀上,不重复造轮子。 下面我将为你详细拆解这个过程,并结合一个具体的例子来说明。 核心概念解析基础模型 (Foun…

血月奇观科学解码:当“红月亮”邂逅古今文明,一场跨越千年的宇宙浪漫

2025年的血月有点不一般!图源澎湃新闻尽管 2025 年 9 月 8 日那场震撼的 “血月” 奇观已在夜空落幕,但它背后的科学奥秘与文化意涵仍值得我们回溯解析。根据中国科学院紫金山天文台的观测记录,此次月全食的本影食从…

使用产品密钥升级Windows 11专业版及Windows 11专业工作站版

Win11 专业版:面向个人与中小企业用户,提供BitLocker磁盘加密、远程桌面连接、组策略管理、域加入等高级功能,支持安全高效的办公与系统管理,满足日常专业需求。 Windows 11 专业版 密钥 Win11 专业工作站版:专为…

局域网扫码枪/局域网二维码接收工具

局域网扫码枪/局域网二维码接收工具扫码枪在识别印刷于芯片表面的二维码时,存在识别效率较低、准确率不高的问题。 相比之下,手机摄像头性能更强,结合微信扫码功能,识别速度更快、准确度更高。 因此,考虑通过微信…

Rust:关于Future和JoinHanlder的思考

Future和JoinHandler是不同的,但这两个都与异步(多线程)相关。 概念不同JoinHandler:是指一个异步方法的句柄,用来监控或控制这个异步方法,以及接收异步方法的执行结果。 Future:表示的是在未来某个时刻执行的代…

2025年衣柜顶线定做厂家权威推荐榜单:石膏顶线/欧式顶线/脚线源头厂家精选

一樘精美的衣柜,少不了那画龙点睛的顶线。它不仅是缝隙的遮蔽者,更是空间风格的塑造者。 在当今家居装修市场,全屋定制的渗透率正持续提升,消费者对细节装饰的需求也日益精细化。作为连接衣柜与天花的关键元素,衣…

完整教程:AI编程工具(Cursor/Copilot/灵码/文心一言/Claude Code/Trae)AI编程辅助工具全方位比较

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【IEEE出版 | 连续4年稳定EI检索】第五届新能源与电力工程国际学术会议(ICNEPE 2025)

第五届新能源与电力工程国际学术会议(ICNEPE 2025)将于2025年11月14日至16日在中国广州隆重举行。【连续4年稳定EI检索,发表有保障!】 【院士、Fellow出席报告,行业内精彩报告!EI期刊和EI会议检索同时征稿】 第五…

习题解析之:计算圆周率——拉马努金法

习题解析之:计算圆周率——拉马努金法【问题描述】编写一个拉马努金公式计算圆周率大小的小程序。 拉马努金曾经提出过很多关于求π的公式,这些公式都有以下几个特点: 等号右边的构造超乎常人想象,收敛速度极快! …