莫亦舞 發表於 2022-3-17 11:55:00

Linux搭建SVN服务器详细教程

<h1>前言</h1>
<p>&nbsp;</p>
<p>本文讲解Linux系统下如何搭建SVN服务器,详细说明各配置项的功能,最终实现可管控多个项目的复杂配置</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317113550119-2104588567.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,实现最终集中式的管理。</p>
<p>目前很多互联网公司在使用SVN,优点在于使用方便、易于管理。与之对应的分布式的版本控制系统Git则更加灵活。</p>
<h2 id="搭建">搭建</h2>
<h3 id="安装svn">安装SVN</h3>
<p><span style="background-color: rgba(192, 192, 192, 1); color: rgba(0, 0, 0, 1)">  <span class="hljs-comment">//Ubuntu </span></span></p>
<p><span style="background-color: rgba(192, 192, 192, 1); color: rgba(0, 0, 0, 1)"><span class="hljs-comment">&nbsp; &nbsp; &nbsp; &nbsp; apt-<span class="hljs-keyword">get install subversion</span></span></span></p>
<p><span class="hljs-comment" style="background-color: rgba(192, 192, 192, 1); color: rgba(0, 0, 0, 1)"><span class="hljs-keyword"><span class="hljs-comment">&nbsp; &nbsp; &nbsp; &nbsp; //Centos </span></span></span></p>
<p><span class="hljs-comment" style="background-color: rgba(192, 192, 192, 1); color: rgba(0, 0, 0, 1)"><span class="hljs-keyword"><span class="hljs-comment">&nbsp; &nbsp; &nbsp; &nbsp; yum install subversion&nbsp; &nbsp;</span></span></span></p>
<p>&nbsp;</p>
<p><span class="hljs-comment" style="background-color: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1)"><span class="hljs-keyword"><span class="hljs-comment">查看是否安装成功,可以查看版本。</span></span></span></p>
<p><span class="hljs-comment" style="background-color: rgba(153, 153, 153, 1); color: rgba(0, 0, 0, 1)"><span class="hljs-keyword"><span class="hljs-comment">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;svnserve <span class="hljs-attr">--version</span></span></span></span></p>
<p>&nbsp;</p>
<p><span class="hljs-comment" style="background-color: rgba(153, 153, 153, 1); color: rgba(0, 0, 0, 1)"><span class="hljs-keyword"><span class="hljs-comment"><span class="hljs-attr"><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317114120098-1286934202.png" alt="" loading="lazy"></span></span></span></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;提示版本1.13.0,说明已安装成功。</p>
<h3 id="创建版本库目录">创建版本库目录</h3>
<p>创建SVN版本库目录,为后面创建版本库提供存放位置,也是最后启动SVN服务的根目录。</p>
<p>我们在/usr路径下创建svn目录作为版本库目录。</p>
<p><span class="hljs-built_in">cd /usr <span class="hljs-built_in">mkdir svn</span></span></p>
<p><span class="hljs-built_in">Linux系统各目录知识延伸:</span></p>
<p><span class="hljs-built_in"><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317114157912-1736793913.png" alt="" loading="lazy"></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;所以,将SVN库存放在用户文件目录/usr下比较合理</p>
<h3 id="创建svn版本库">创建SVN版本库</h3>
<p>在上一步建立路径基础上,创建版本库,如dev。</p>
<p><span class="hljs-built_in">cd /usr/svn </span></p>
<p><span class="hljs-built_in">svnadmin create dev</span></p>
<p>创建成功后,可以查看到dev目录下生成的文件。</p>
<p>&nbsp;<img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317114256380-1618213421.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3 id="修改svn配置">修改SVN配置</h3>
<p>进入conf目录,查看需要修改的配置文件。</p>
<p><span class="hljs-built_in">cd /usr/svn/dev/conf </span></p>
<p><span class="hljs-built_in"><span class="hljs-built_in">ls</span></span></p>
<p><span class="hljs-built_in"><span class="hljs-built_in"><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317114317868-1538396448.png" alt="" loading="lazy"></span></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;配置文件:</p>
<ul>
<li>authz:权限配置文件,控制读写权限</li>
<li>passwd:账号密码配置文件</li>
<li>svnserve.conf:svn服务器配置文件</li>
</ul>
<h4 id="修改svnserveconf文件">修改svnserve.conf文件</h4>
<p>vim svnserve.conf</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317114356421-408968665.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>去掉anon-access、auth-access、password-db、authz-db、realm几项前的注释符号“#”。</p>
<p>配置项含义:</p>
<ul>
<li>anon-access = none|read|write 决定非授权用户的访问级别。none 表示无访问权限,read 表示只读,write 表示可读可写,默认为 read。</li>
<li>auth-access = none|read|write 决定授权用户的访问级别,使用与上面相同的访问级别。默认为 write。</li>
<li>password-db = filename 指定账号密码数据库文件名。filename 是相对仓库中 conf 目录的位置,也可以设置为绝对路径,默认为passwd。</li>
<li>authz-db = filename 指定权限配置文件名,filename 是相对仓库中 conf 目录的位置,也可以设置为绝对路径,默认为authz。</li>
<li>realm = realm-name 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的账号密码数据库文件passwd。</li>
</ul>
<blockquote>
<p>认证域知识延伸:</p>
<p>在SVN客户端登录时,会提示realm认证域,如下图的认证域<code>My First Repository</code>。</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317114412995-992129705.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;vim passwd</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317114423711-1005591549.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;只需在末尾添加账号和密码,格式&nbsp;<code>账号 = 密码</code>,如<code>user1 = 123456</code>,可添加多个。</p>
<h4 id="修改authz文件">修改authz文件</h4>
<p>vim authz</p>
<p>在根目录下设置user1、user2读写权限:</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317114452173-503877734.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>如果用户比较多,可以使用groups形式设置分组team1,并在根目录下指定分组@team1的权限:</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317115253362-84116469.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;如果想设置其他用户的权限,可以通过<code>*</code>设置,如设置除@team1分组外其他用户只读权限:</p>
<p><span class="hljs-selector-attr">[/] </span></p>
<p><span class="hljs-selector-attr"><span class="hljs-keyword">@team1 = rw </span></span></p>
<p><span class="hljs-selector-attr"><span class="hljs-keyword">* = r</span></span></p>
<h3 id="启动svn服务">启动SVN服务</h3>
<p>执行SVN启动命令,其中参数<code>-d</code>表示以守护进程的方式启动,&nbsp;<code>-r</code>表示设置的根目录。</p>
<pre><code class="hljs language-bash">svnserve -d -r /usr/svn/
</code></pre>
<p>关闭svn命令:</p>
<pre><code class="hljs language-undefined">killall svnserve
</code></pre>
<h3 id="本地访问svn服务">本地访问SVN服务</h3>
<p>在windows系统中,安装TortoiseSVN软件,创建一个本地目录,右键选择SVN Checkout测试下,URL填写<code>svn://IP/dev</code>,dev替换成你创建的版本库名称。</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317115445160-1002085075.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>输入passwd配置好的用户。</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317115455652-1317001269.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Checkout completed,SVN访问成功,这就Nice了~</p>
<p><img src="https://img2022.cnblogs.com/blog/984421/202203/984421-20220317115507448-1427171919.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2 id="扩展">扩展</h2>
<h3 id="设置查看log日志">设置查看log日志</h3>
<p>想查看提交的svn log日志,需要进一步配置。</p>
<p>编辑svnserve.conf,设置:</p>
<pre><code class="hljs language-ini"><span class="hljs-attr">anon-access = none
</span></code></pre>
<p>编辑authz文件中添加:</p>
<pre><code class="hljs language-markdown">[/]
<span class="hljs-bullet">* =
</span></code></pre>
<p>这样通过鼠标右键TortoiseSVN-&gt;show log就可以查看svn提交的历史记录了。</p>
<h3 id="多个项目管控配置">多个项目管控配置</h3>
<p>SVN配置文件是很灵活的,如果想使用统一的账户和权限去管控多个项目,可以将多个项目的authz和passwd文件统一放在一处,在多个项目的svnserve.conf文件中配置这两个文件的绝对路径,并在authz中对不同的项目设置用户访问权限。</p>
<p>如:a、b、c、d这4个用户,p1、p2两个项目,其中a、b只能访问p1,c、d只能访问p2。</p>
<h4 id="创建版本库目录-1">创建版本库目录</h4>
<pre><code class="hljs language-bash"><span class="hljs-built_in">mkdir /usr/svn
</span></code></pre>
<h4 id="创建多个版本库">创建多个版本库</h4>
<pre><code class="hljs language-bash"><span class="hljs-built_in">cd /usr/svn
svnadmin create p1
svnadmin create p2
</span></code></pre>
<h4 id="创建管理用户权限目录">创建管理用户权限目录</h4>
<pre><code class="hljs language-bash"><span class="hljs-built_in">mkdir /var/svn/conf
<span class="hljs-built_in">cd /p1/conf
<span class="hljs-built_in">cp authz passwd /var/svn/conf
</span></span></span></code></pre>
<h4 id="修改配置文件">修改配置文件</h4>
<p>修改p1的svnserve.conf文件:</p>
<pre><code class="hljs language-ini"><span class="hljs-attr">anon-access = none
<span class="hljs-attr">auth-access = write
<span class="hljs-attr">password-db = /var/svn/conf/passwd
<span class="hljs-attr">authz-db = /var/svn/conf/authz
<span class="hljs-attr">realm = p1
</span></span></span></span></span></code></pre>
<p>修改p2的svnserve.conf文件:</p>
<pre><code class="hljs language-ini"><span class="hljs-attr">anon-access = none
<span class="hljs-attr">auth-access = write
<span class="hljs-attr">password-db = /var/svn/conf/passwd
<span class="hljs-attr">authz-db = /var/svn/conf/authz
<span class="hljs-attr">realm = p2
</span></span></span></span></span></code></pre>
<p>password-db和authz-db都使用统一管理用户权限目录,使用绝对路径。</p>
<h4 id="修改password-db文件">修改password-db文件</h4>
<pre><code class="hljs language-ini"><span class="hljs-section">
<span class="hljs-attr">a = <span class="hljs-number">123
<span class="hljs-attr">b = <span class="hljs-number">123
<span class="hljs-attr">c = <span class="hljs-number">123
<span class="hljs-attr">d = <span class="hljs-number">123
</span></span></span></span></span></span></span></span></span></code></pre>
<h4 id="修改authz文件-1">修改authz文件</h4>
<pre><code class="hljs language-csharp">[<span class="hljs-meta">groups] <span class="hljs-comment">//分组
p1user = a,b
p2user = c,d

[/]
* = <span class="hljs-meta">#以上没有定义的用户都没有任何权限

[<span class="hljs-meta">p1:/] <span class="hljs-comment">//p1的访问控制,c、d无法访问
@p1user = rw

[<span class="hljs-meta">p2:/] <span class="hljs-comment">//p2的访问控制,a、b无法访问
@p2user = rw
</span></span></span></span></span></span></span></code></pre>
<p>对password-db和authz文件的修改立即生效,不必重启svn。</p>
<h4 id="启动svn服务-1">启动svn服务</h4>
<pre><code class="hljs language-bash">svnserve -d -r /usr/svn/
</code></pre>
<h4 id="访问不同项目svn">访问不同项目SVN</h4>
<p>同样TortoiseSVN软件,选择SVN Checkout测试。</p>
<pre><code class="hljs language-armasm">访问项目<span class="hljs-built_in">p1 URL
<span class="hljs-symbol">svn:<span class="hljs-comment">//IP/p1

访问项目<span class="hljs-built_in">p2 URL
<span class="hljs-symbol">svn:<span class="hljs-comment">//IP/p1
</span></span></span></span></span></span></code></pre>
<p>统一的配置文件,不同项目限定了不同用户访问,这样就实现了管控多个项目的SVN配置。</p>
<p>以上就是Linux系统搭建SVN服务器详细教程的所有内容,希望对大家有所帮助。</p>
<p>你学“废”了么?</p>
<p>&nbsp;</p>
</blockquote>
<p><span class="hljs-comment" style="background-color: rgba(192, 192, 192, 1); color: rgba(255, 255, 255, 1)"><span class="hljs-keyword"><span class="hljs-comment">&nbsp;</span></span></span></p><br><br>
来源:https://www.cnblogs.com/XQ502/p/16016663.html
頁: [1]
查看完整版本: Linux搭建SVN服务器详细教程