<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>服务器搭建 on 吾爱主机</title><link>https://blog.waihost.com/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA/</link><description>Recent content in 服务器搭建 on 吾爱主机</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 23 Jun 2025 09:15:42 +0800</lastBuildDate><atom:link href="https://blog.waihost.com/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA/index.xml" rel="self" type="application/rss+xml"/><item><title>搭建一个 SVN 仓库</title><link>https://blog.waihost.com/posts/svn-server-setup/</link><pubDate>Mon, 23 Jun 2025 09:15:42 +0800</pubDate><guid>https://blog.waihost.com/posts/svn-server-setup/</guid><description>&lt;img src="https://blog.waihost.com/images/covers/svn-server-setup.svg" alt="Featured image of post 搭建一个 SVN 仓库" /&gt;&lt;p&gt;搭建一个 SVN 仓库主要涉及两个部分：&lt;strong&gt;安装 SVN 服务器软件&lt;/strong&gt; 和 &lt;strong&gt;创建仓库本身&lt;/strong&gt;。以下是详细的步骤，适用于 Windows 和 Linux 系统：&lt;/p&gt;
&lt;h2 id="-核心步骤概览"&gt;&lt;a href="#-%e6%a0%b8%e5%bf%83%e6%ad%a5%e9%aa%a4%e6%a6%82%e8%a7%88" class="header-anchor"&gt;&lt;/a&gt;🧱 核心步骤概览
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;安装 SVN 服务器软件&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;创建仓库&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;配置访问权限&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启动服务&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;客户端访问&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="-一windows-系统搭建-推荐使用-visualsvn-server"&gt;&lt;a href="#-%e4%b8%80windows-%e7%b3%bb%e7%bb%9f%e6%90%ad%e5%bb%ba-%e6%8e%a8%e8%8d%90%e4%bd%bf%e7%94%a8-visualsvn-server" class="header-anchor"&gt;&lt;/a&gt;🪟 一、Windows 系统搭建 (推荐使用 VisualSVN Server)
&lt;/h2&gt;&lt;p&gt;这是最简单快捷的方式，适合个人或小型团队。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;下载并安装 VisualSVN Server&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;访问官方网站: &lt;a class="link" href="https://www.visualsvn.com/server/" target="_blank" rel="noopener"
 &gt;https://www.visualsvn.com/server/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;下载免费的 &lt;strong&gt;VisualSVN Server&lt;/strong&gt; (通常选择最新的 Community 版本)。&lt;/li&gt;
&lt;li&gt;运行安装程序，按照提示进行安装。安装过程中需要注意：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;安装位置：&lt;/strong&gt; 选择合适的路径存放仓库文件（建议空间充足）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;仓库位置：&lt;/strong&gt; 指定仓库根目录（&lt;code&gt;Repositories&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务器端口：&lt;/strong&gt; 默认是 &lt;code&gt;80&lt;/code&gt; (HTTP) 和 &lt;code&gt;443&lt;/code&gt; (HTTPS)。如果端口冲突，可以修改（例如改成 &lt;code&gt;8080&lt;/code&gt;/&lt;code&gt;8443&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;认证方式：&lt;/strong&gt; 选择 &lt;strong&gt;Subversion authentication&lt;/strong&gt; 或 &lt;strong&gt;Windows authentication&lt;/strong&gt;。对于独立服务器，&lt;strong&gt;Subversion authentication&lt;/strong&gt; 更常用。&lt;/li&gt;
&lt;li&gt;使用默认选项创建初始仓库和管理员账户通常很方便。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建仓库&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装完成后，启动 &lt;strong&gt;VisualSVN Server Manager&lt;/strong&gt; (管理控制台)。&lt;/li&gt;
&lt;li&gt;在左侧树形菜单中，右键点击 &lt;code&gt;Repositories&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;选择 &lt;code&gt;Create New Repository...&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;输入仓库名称（例如 &lt;code&gt;my_project&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;选择仓库结构：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Empty repository&lt;/code&gt;：完全空仓库。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Single-project repository (with trunk, branches, tags)&lt;/code&gt;：推荐！创建标准的 &lt;code&gt;trunk&lt;/code&gt;, &lt;code&gt;branches&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt; 目录结构。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Multi-project repository (with projects root)&lt;/code&gt;：创建一个 &lt;code&gt;projects&lt;/code&gt; 目录，适合存放多个项目。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;选择仓库访问权限：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;All Subversion users have Read/Write access&lt;/code&gt;：所有 SVN 用户可读写（初期测试方便）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Customize permissions&lt;/code&gt;：自定义权限（生产环境推荐）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;点击 &lt;code&gt;Create&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置访问权限 (可选但推荐)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 VisualSVN Server Manager 中，右键点击你刚创建的仓库。&lt;/li&gt;
&lt;li&gt;选择 &lt;code&gt;Properties&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;切换到 &lt;code&gt;Security&lt;/code&gt; 标签页。&lt;/li&gt;
&lt;li&gt;在这里可以添加/删除用户或用户组，并为它们分配权限：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;No Access&lt;/code&gt;： 无权限。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Read Only&lt;/code&gt;： 只能读取。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Read / Write&lt;/code&gt;： 可读取和提交。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;管理用户/用户组：在左侧树形菜单的 &lt;code&gt;Users&lt;/code&gt; 和 &lt;code&gt;Groups&lt;/code&gt; 节点上右键创建和管理。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;获取仓库 URL&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 VisualSVN Server Manager 中，右键点击你的仓库。&lt;/li&gt;
&lt;li&gt;选择 &lt;code&gt;Copy URL to Clipboard&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;仓库 URL 格式通常是：&lt;code&gt;https://&amp;lt;服务器名或IP地址&amp;gt;:&amp;lt;端口&amp;gt;/svn/&amp;lt;仓库名&amp;gt;&lt;/code&gt; 或 &lt;code&gt;http://&amp;lt;服务器名或IP地址&amp;gt;:&amp;lt;端口&amp;gt;/svn/&amp;lt;仓库名&amp;gt;&lt;/code&gt; (如果使用 HTTPS)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动/停止服务&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VisualSVN Server 安装后会作为 Windows 服务自动启动。&lt;/li&gt;
&lt;li&gt;可以在 VisualSVN Server Manager 的状态栏查看服务状态，或在 Windows 服务管理器中管理 &lt;code&gt;VisualSVN Server&lt;/code&gt; 服务。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="-二linux-系统搭建-常用-apache--mod_dav_svn"&gt;&lt;a href="#-%e4%ba%8clinux-%e7%b3%bb%e7%bb%9f%e6%90%ad%e5%bb%ba-%e5%b8%b8%e7%94%a8-apache--mod_dav_svn" class="header-anchor"&gt;&lt;/a&gt;🐧 二、Linux 系统搭建 (常用 Apache + mod_dav_svn)
&lt;/h2&gt;&lt;p&gt;这是更灵活、适合生产环境的方式，利用 Apache HTTP Server 提供 WebDAV/HTTP(S) 访问。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装必要软件包&lt;/strong&gt; (以 Ubuntu/Debian 为例)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install subversion apache2 libapache2-mod-svn
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;subversion&lt;/code&gt;: SVN 客户端和服务器工具。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apache2&lt;/code&gt;: Apache HTTP Server。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libapache2-mod-svn&lt;/code&gt;: Apache 的 SVN 模块 (&lt;code&gt;mod_dav_svn&lt;/code&gt;, &lt;code&gt;mod_authz_svn&lt;/code&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启用必要的 Apache 模块&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo a2enmod dav
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo a2enmod dav_svn
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo a2enmod authz_svn # 如果需要基于路径的权限控制，强烈推荐启用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart apache2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建 SVN 仓库目录&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;svn&lt;/span&gt; &lt;span class="c1"&gt;# 选择一个合适的父目录，如 /opt/svn 或 /srv/svn 也可以&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建仓库&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;svnadmin&lt;/span&gt; &lt;span class="n"&gt;create&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;svn&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my_project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;这会在 &lt;code&gt;/var/www/svn/my_project&lt;/code&gt; 下创建仓库结构。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设置仓库目录权限&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;让 Apache 用户（通常是 &lt;code&gt;www-data&lt;/code&gt;）拥有仓库目录的所有权：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;chown&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;svn&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my_project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置合适的权限：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;chmod&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt; &lt;span class="mi"&gt;770&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;svn&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my_project&lt;/span&gt; &lt;span class="c1"&gt;# 允许 www-data 组读写执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或者更精细的权限控制&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置 Apache 访问仓库&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;创建或编辑 Apache 的 SVN 配置文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nano /etc/apache2/sites-available/svn.conf # 或修改已有的 default-ssl.conf 或新建一个
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在配置文件中添加类似以下内容：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 加载 SVN 模块 (通常已由 a2enmod 完成，这里确保)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;LoadModule&lt;/span&gt; &lt;span class="n"&gt;dav_svn_module&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apache2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;modules&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mod_dav_svn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;LoadModule&lt;/span&gt; &lt;span class="n"&gt;authz_svn_module&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apache2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;modules&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mod_authz_svn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;svn&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;# 客户端访问的 URL 路径前缀&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;DAV&lt;/span&gt; &lt;span class="n"&gt;svn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SVNParentPath&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;svn&lt;/span&gt; &lt;span class="c1"&gt;# 指向仓库的父目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 认证配置 (基本认证)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AuthType&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AuthName&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Subversion Repository&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AuthUserFile&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;subversion&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;passwd&lt;/span&gt; &lt;span class="c1"&gt;# 用户密码文件存放位置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Require&lt;/span&gt; &lt;span class="n"&gt;valid&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 授权配置 (可选但推荐)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AuthzSVNAccessFile&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;subversion&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;authz&lt;/span&gt; &lt;span class="c1"&gt;# 权限控制文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;关键配置项说明:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Location /svn&amp;gt;&lt;/code&gt;: 定义客户端通过 &lt;code&gt;http(s)://your-server/svn/&lt;/code&gt; 访问仓库。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SVNParentPath /var/www/svn&lt;/code&gt;: 指定所有仓库的父目录。Apache 会自动将 &lt;code&gt;&amp;lt;Location&amp;gt;&lt;/code&gt; 路径后的部分 (&lt;code&gt;/svn/&lt;/code&gt; 后面的部分) 映射到这个目录下的子目录（即仓库名）。使用 &lt;code&gt;SVNPath&lt;/code&gt; 可以配置单个仓库。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AuthType Basic&lt;/code&gt;: 使用 HTTP 基本认证。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AuthName&lt;/code&gt;: 认证域提示。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AuthUserFile&lt;/code&gt;: 存放用户名和加密密码的文件路径。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Require valid-user&lt;/code&gt;: 要求有效用户才能访问。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AuthzSVNAccessFile&lt;/code&gt;: 定义更细粒度权限（基于路径、用户/组）的文件路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建用户密码文件&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo htpasswd -c /etc/subversion/passwd username1 # -c 选项只在第一次创建文件时使用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo htpasswd /etc/subversion/passwd username2 # 后续添加用户去掉 -c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;系统会提示你为每个用户设置密码。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;(可选但推荐) 创建和配置权限文件 (&lt;code&gt;authz&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;创建文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nano /etc/subversion/authz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑内容示例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[groups]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;developers = user1, user2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;admins = user3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[/] # 根目录，指所有仓库
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* = r # 所有人只读 (匿名访问，可选)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@developers = rw # developers 组读写
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[my_project:/] # 指定仓库 my_project 的根目录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@developers = rw
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@admins = rw
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;user4 = r # 单独用户 user4 只读
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[my_project:/secret] # my_project 仓库下的 secret 目录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@admins = rw
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* = # 其他人无权限 (禁止访问)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;保存文件，并确保 Apache 用户 (&lt;code&gt;www-data&lt;/code&gt;) 有读取权限。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启用配置并重启 Apache&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;a2ensite&lt;/span&gt; &lt;span class="n"&gt;svn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt; &lt;span class="c1"&gt;# 如果你新建了 svn.conf 文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;systemctl&lt;/span&gt; &lt;span class="n"&gt;reload&lt;/span&gt; &lt;span class="n"&gt;apache2&lt;/span&gt; &lt;span class="c1"&gt;# 或 sudo systemctl restart apache2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;获取仓库 URL&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仓库 URL 格式通常是：&lt;code&gt;http://&amp;lt;服务器名或IP地址&amp;gt;/svn/my_project&lt;/code&gt; 或 &lt;code&gt;https://&amp;lt;服务器名或IP地址&amp;gt;/svn/my_project&lt;/code&gt; (如果配置了 SSL)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="-三测试与使用仓库"&gt;&lt;a href="#-%e4%b8%89%e6%b5%8b%e8%af%95%e4%b8%8e%e4%bd%bf%e7%94%a8%e4%bb%93%e5%ba%93" class="header-anchor"&gt;&lt;/a&gt;🧪 三、测试与使用仓库
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 SVN 客户端&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows: 推荐 &lt;a class="link" href="https://tortoisesvn.net/" target="_blank" rel="noopener"
 &gt;TortoiseSVN&lt;/a&gt; (集成到文件管理器)。&lt;/li&gt;
&lt;li&gt;Linux: 安装 &lt;code&gt;subversion&lt;/code&gt; 包 (&lt;code&gt;sudo apt install subversion&lt;/code&gt;) 使用命令行 &lt;code&gt;svn&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;macOS: 通常自带 &lt;code&gt;svn&lt;/code&gt; 命令行，或使用 &lt;a class="link" href="https://cornerstone.assembla.com/" target="_blank" rel="noopener"
 &gt;Cornerstone&lt;/a&gt; 等图形客户端。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;检出仓库 (Checkout)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;命令行:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;svn checkout http://your-server/svn/my_project my_project_working_copy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(会提示输入在 &lt;code&gt;passwd&lt;/code&gt; 文件中设置的用户名和密码)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TortoiseSVN:&lt;/strong&gt; 在空白文件夹右键 -&amp;gt; &lt;code&gt;SVN Checkout...&lt;/code&gt;，输入仓库 URL 和目标路径。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加文件、提交更改 (Commit)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在工作拷贝中添加、修改或删除文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;命令行:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;svn add filename
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;svn commit -m &amp;#34;提交说明&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TortoiseSVN:&lt;/strong&gt; 在工作拷贝内右键 -&amp;gt; &lt;code&gt;SVN Commit...&lt;/code&gt;，选择要提交的文件，填写日志信息。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="-四备份仓库-重要"&gt;&lt;a href="#-%e5%9b%9b%e5%a4%87%e4%bb%bd%e4%bb%93%e5%ba%93-%e9%87%8d%e8%a6%81" class="header-anchor"&gt;&lt;/a&gt;📦 四、备份仓库 (重要！)
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;使用 &lt;code&gt;svnadmin dump&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;svnadmin&lt;/span&gt; &lt;span class="n"&gt;dump&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;svn&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my_project&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;my_project_backup_&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="c1"&gt;#36;(date +%Y%m%d).svndump&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;将生成的 &lt;code&gt;.svndump&lt;/code&gt; 文件安全存储。&lt;/li&gt;
&lt;li&gt;恢复：&lt;code&gt;svnadmin load /path/to/new/repository &amp;lt; my_project_backup.svndump&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;使用 &lt;code&gt;svnadmin hotcopy&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;svnadmin&lt;/span&gt; &lt;span class="n"&gt;hotcopy&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;svn&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my_project&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;backup&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my_project_&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="c1"&gt;#36;(date +%Y%m%d)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;创建仓库的完整热拷贝（在运行时也可以进行，但最好在低负载时操作）。这个拷贝本身就是一个有效的仓库。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;文件系统备份:&lt;/strong&gt; 在 SVN 服务停止时，直接备份整个仓库目录 (&lt;code&gt;/var/www/svn/my_project&lt;/code&gt;)。&lt;strong&gt;不推荐在服务运行时直接复制文件系统。&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="-总结"&gt;&lt;a href="#-%e6%80%bb%e7%bb%93" class="header-anchor"&gt;&lt;/a&gt;📌 总结
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows (简便):&lt;/strong&gt; 安装 &lt;strong&gt;VisualSVN Server&lt;/strong&gt; -&amp;gt; 创建仓库 -&amp;gt; 配置用户权限 -&amp;gt; 获取 URL -&amp;gt; 客户端检出使用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux (灵活/生产):&lt;/strong&gt; 安装 &lt;code&gt;subversion&lt;/code&gt;, &lt;code&gt;apache2&lt;/code&gt;, &lt;code&gt;libapache2-mod-svn&lt;/code&gt; -&amp;gt; 创建仓库 -&amp;gt; 配置 Apache (&lt;code&gt;svn.conf&lt;/code&gt;) -&amp;gt; 创建用户 (&lt;code&gt;htpasswd&lt;/code&gt;) -&amp;gt; (可选)配置细粒度权限 (&lt;code&gt;authz&lt;/code&gt;) -&amp;gt; 重启 Apache -&amp;gt; 客户端检出使用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;务必进行仓库备份！&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限配置&lt;/strong&gt; 对于多用户协作至关重要，请根据团队结构认真规划。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择哪种方式取决于你的操作系统偏好、技术熟悉度和团队规模需求。VisualSVN Server 在 Windows 上提供了极佳的开箱即用体验，而 Apache 方案在 Linux 上更标准且功能强大灵活。💻🔧&lt;/p&gt;</description></item></channel></rss>