迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 网络 >

搭建svn服务项目并且同步代码到项目目录

作者:迹忆 最近更新:2022/11/19 浏览次数:

随着项目的增大,需要更多的人参与到同一个项目的开发中。其中SVN就是用于多个人共同开发同一个项目,达到公用资源的目的。

SVN服务器有2中运行方式:一是作为独立服务器,另一种是借助apache运行。两种方式各有利弊,这个用户可以自己去选择。在这里我们只讨论第一种方式:作为独立服务器。

创建SVN仓库

首先我们需要安装SVN应用程序。这里我们选择的操作系统是centos。安装SVN应用程序在linux系统下其实是很简单的。使用如下命令

# yum install svn

接着就会出现安装的过程。安装完成以后,我们来新建SVN仓库reptest。为了便于管理,我们新建一个文件夹,专门用来存放所有的仓库 /repos

# mkdir /repos
# svnadmin create /repos/reptest

创建完成以后,我们进入该仓库,会发现在该目录下存在几个文件和目录

# cd /repos/reptest
# ls
conf  db  format  hooks  locks  README.txt

这样我们就创建了一个SVN的仓库。

配置用户权限

创建完成仓库以后,如果想作为一个独立的服务器,当然得需要配置用户的权限。这里需要用到的有三个文件svnserve.conf、authz和passwd。

svnserve.conf

使用vim打开svnserve.conf文件 修改以下几项。

anon-access = read   //去掉开头的#
auth-access = write   //去掉开头的#
password-db = passwd   //去掉开头的#  默认为passwd 这个文件可以自定义
authz-db = authz    //去掉开头的#   默认为authz 这个文件可以自定义

保存退出

passwd

该文件作用是设定可以访问服务的用户和密码,在该文件内的用户可以访问SVN服务。在该文件中添加如下内容

[users]
svnuser = svnuser123

保存退出以后,我们就设定了一个可以访问该服务的用户svnuser,其密码为svnuser123

authz

该文件是验证用户对相应目录的权限。我们在文件内容的末尾添加如下内容

[/]
svnuser = rw

对于SVN服务的整个根目录,svnuser都有读写的权限。

对于以上三个文件都编辑完成以后,下面就开始使用该服务了。

开启SVN服务

接下来我们开始开启SVN服务,这里服务由两种方式:一种是单仓库,另一种是多仓库的。

单仓库

对于单仓库的服务其实很简单。还记得我们刚开始新建的存放仓库的目录 /repos吗?这里我们在这个目录里面新建了一个svntest仓库,如果是单仓库的形式我们只需要在开启服务的时候将这个仓库名称接在/repos后面——/repos/svntest

# svnserve –d –r /repos/svntest

执行完上面的命令,这样我们就开启SVN服务了。

对于这种单仓库的访问形式可以使用如下的命令

# svn checkout svn://ip –username svnuser –password svnuser123 /目标目录

这样我们检出的就是svntest仓库的内容了。

多仓库

对于多仓库的服务的开启方式其实和但仓库的形式没有太大的区别。主要的区别就在于我们开始新建的存放仓库的目录/repos 了。这样我们在开启服务的时候就不要加上目录名称了。直接使用/repos即可

# svnserve –d –r /repos

开启服务以后访问的形式就变了

# svn checkout svn://ip/svntest –username svnuser –password svnuser123

在访问的时候需要在svn地址后面加上svntest仓库名称。

当然,如果说只是保存我们开发的代码的话,到这里已经完成了。但是有时候我们需要将我们提交的代码同步到web目录下面。那这时我们还需要借助svn的钩子 post-commit来实现我们的需求。

post-commit 同步代码

首先要明确我们的应用项目的目录。这里我们使用/web作为我们web应用项目的目录。

然后我们进入/web目录,并在仓库中检出一份代码。

# cd /web
# svn checkout svn://ip/svntest –username svnuser –password svnuser123
//这里我们假设用的是多仓库的形式

接下来编辑shell脚本post-commit。

# vim /repos/svntest/hooks/post-commit

在打开的post-commit 的编辑界面添加如下脚本

#!/bin/bash
export LANG=zh_CN.UTF-8  #文件编码
 
REPOS="$1"    #仓库路径
REV="$2"                     # 刚刚提交的代码的版本号
SVN=/usr/bin/svn   # svn命令
WEB=/web/svntest  # web目录
LOG=/data/home/auto_svn.log  #日志文件
$SVN update $WEB --username react --password react123  #最后更新的命令

保存退出。然后修改post-commit的用户权限。使用户对其有执行的权限

# chmod u+x /repos/svntest/hooks/post-commit

最后重启SVN服务

# ps –ef | grep svn     //首先检测当前的进程id
root      4888     1  0 Mar25 ?        00:00:00 svnserve -d -r /repos
# kill -9 4888   //4888是进程id,使用kill命令杀死该进程
# svnserve –d –r /repos   //重新开启服务
# ps –ef | grep svn
root     17957     1  0 19:38 ?        00:00:00 svnserve -d -r /repos
//服务已被启动成功,其进程id为17957

此时当我们提交新的代码或者修改的代码以后,这些代码都会自动同步到/web/svntest目录中。

但是这样有一个问题,就是在/web/svntest目录中会有检出的.svn目录。这样对web的安全存在隐患。当然这样的问题可以通过nginx或者apache的重写功能来消除隐患。具体实现我们可以自行查阅。

希望上面的简单的搭建svn服务的过程,对大家在实际工作中有所帮助。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Docker 网络主机命令

发布时间:2023/04/18 浏览次数:111 分类:Docker

在本文中,我们将学习如何使用 --network 命令将容器添加到主机网络。 如果我们不使用此命令指定网络,我们还将了解如何将容器添加到默认网络。

在 Docker Compose 中添加网络模式

发布时间:2023/04/17 浏览次数:84 分类:Docker

默认情况下,单个网络由 Docker Compose 在我们的应用程序中创建,并将每个容器作为服务添加到那里。 网络上的每个容器都可以被单个网络上的容器访问和找到。

Git 仓库名称该如何命名

发布时间:2023/04/09 浏览次数:204 分类:Git

使用 Git 时,选择一个简洁且最新的存储库名称是一项艰巨的任务。本教程介绍了如何以独特的方式命名 Git 存储库。

从 Git 中的远程仓库中删除提交

发布时间:2023/04/06 浏览次数:159 分类:Git

本教程演示如何通过 Git 命令行从远程仓库中删除提交。在 Git 中,我们可以通过两个不同的过程来删除提交。这些过程取决于更改,无论它们是否被推送到远程分支。

获取 Git 存储库的名称

发布时间:2023/04/05 浏览次数:75 分类:Git

本文说明了我们如何获取任何 Git 存储库的名称。 当我们克隆一个 Git 存储库时,它通常表示为我们本地计算机中的一个文件夹。

从 Git 仓库中提取特定提交

发布时间:2023/04/05 浏览次数:114 分类:Git

有时你可能希望将特定提交从远程仓库拉到本地仓库,并且有几种方法可以实现。下面,你可以找到几种从 Git 仓库中提取特定提交的方法。

Git 仓库可视化

发布时间:2023/04/04 浏览次数:163 分类:Git

在本文中,我们将了解如何获得仓库的可视化。我们将使用 git log 命令查看仓库的拓扑结构。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便