Ubuntu搭建SVN服务器多版本库
1 介绍
Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。这样就可 以很方面恢复到以前的版本,并可以查看数据更改细节。目前,Subversion已成为主流的开源代码版本管理软件之一,简称SVN。
2. 安装和服务器搭建
执行下列指令安装
sudo apt-get install subversion
3 创建版本库
3.1先创建目录文件夹
sudo mkdir /home/svn
sudo mkdir /home/svn/project1
sudo mkdir /home/svn/project2
3.2创建第一个项目project1 第二个项目project2
svnadmin create /home/svn/project1
svnadmin create /home/svn/project2
4. 为了便于管理,将所有版本库的密码和权限设置在同一个文件下面,操作步骤如下:
4.1 取出project1下面conf文件夹下的authz和passwd两个文件到svn根目录下面
4.2 修改每个版本库目录conf文件夹下面的svnserve.conf文件, 将
# anon-access = read ,#auth-access = write ,# password-db = passwd,#authz-db = authz 修改为:
anon-access = none ,auth-access= write,password-db = ../../passwd,authz-db = ../../authz
(password-db = ../../passwd,authz-db = ../../authz代表相对路径而非绝对路径)
5. 定义一下几个角色用来测试
5.1 配置管理员(svnadmin),用来管理整个库
5.2 项目经理(manage),用来相关管理文档
5.3 开发人员 (dev),测试开发是否正常
6. 下面添加角色
打开svn目录下的passwd文件,创建方法是在[user]下面添加 username = passwd,记得“=”前后的空格,如下图:
(svnadmin控制所有项目,统一管理)
7. 为角色分配权限:
假设(quxin是project1的项目经理,huzhixin是project2的项目经理,dev1、dev2是project1 的开发人员,dev3、dev4是project2的开发人员,test1是 project1的测试人员,test2是project2的测试人员)
库目录及具体权限如下图所示:
具体权限:(根目录下,svnadmin拥有所有权限,其他人只有读权限,要设置子目录权限,需设置子目录上级的权限方可,设置个别文件权限如下:)
8启动svn服务
一次启动 sudo svnserve -d -r /home/svn
查看是否启动成功,可看的监听3690端口
sudo netstat -antp |grep svnserve
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 28967/svnserve
如果想关闭服务,可使用pkill svnserve
开机自启动svn
在/etc/init.d目录建立一个脚本文件svnd.sh
cd /etc/init.d
touch svnd.sh
chmod +x svnd.sh
vi svnd.sh
输入如下内容:
#!/bin/bash
#svnserve startup
svnserve -d -r /ysh/svn
更新修改权限:
update-rc.d svnd.sh defaults
(若提示权限不足,请用sudo执行)
9 工具
10访问版本库地址
svn://ip/project1
svn://ip/project2
阿里云Ubuntu系统搭建SVN版本库浏览服务器
(4)sudo apt-get install apache2-utils libapache2-svn
其中subversion是SVN必须的,apache2和libapache2-svn是为了配置SVN服务器支持通过HTTP访问
##SVN服务器配置
1、相关用户、组的设定
sudo addgroup subversion
sudo usermod -G subversion -a www-data
2、配置Subversion
(1)配置dav_svn.conf文件
vim /etc/apache2/mods-available/dav_svn.conf
按照下面的步骤进行配置即可
<1>删除<Location /svn>和DAV svn这两行前面的注释
<2>删除SVNParentPath ...前面的注释,并且把后面的路径替换成创建的SVN的项目路径/home/svn
<3>删除AuthType Basic、AuthName “Subversion Repository”前面的注释,去掉AuthUserFile所在行前面的注释,并且修改后面的路径为/etc/subversion/dav_svn.passwd,去掉AuthzSVNAccessFile所在行前面的注释,并且修改后面的路径为/etc/subversion/dav_svn.authz,删除Require valid-user和</Location>前面的注释,具体如下所示:
其中:
/etc/subversion/dav_svn.passwd文件是SVN用户名和密码的配置,指定基本用户验证的密码文件存放的位置
/etc/subversion/dav_svn.authz文件是访问权限配置
重启Apache 2 WEB服务器
sudo /etc/init.d/apache2 restart
3、更改版本库所示的用户、组
sudo chown -R root:subversion project1
赋予组成员对所有新加入文件仓库的文件拥有相应的权限
sudo chmod -R g+rws project1
4、用户和权限配置
(1)创建dav_svn.passwd文件并添加用户admin001,执行命令后会提示要输入密码
sudo htpasswd -c /etc/subversion/dav_svn.passwd admin001
继续添加新用户,去掉-c,否则会覆盖本文件
sudo htpasswd /etc/subversion/dav_svn.passwd admin002
(2)创建授权文件
vim /etc/subversion/dav_svn.authz
里面加入project1的权限配置,如
[groups]
administrator=admin001,admin002
[project1:/]
@administrator=rw
5、重启SVN服务器
killall svnserve
svnserve -d -r /home/svn/
至此SVN服务器搭建完成,可以在终端执行
svn co svn://
hostname/project1 /var/www/html/project1
sudo chmod -R 777 /var/www/html/XXX/
配置post-commit,实现自动同步svn版本库文件到web目录
为了可以在修改完代码提交到SVN服务器后,WEB服务器直接同步.需要配置SVN的钩子,进入hooks目录,
cd /opt/svndata/repos/hooks
ls
可以看到有一个post-commit.tmpl文件,这是一个模板文件,复制一份放在此目录下,命名为post-commit,并将其用户组设为www,并设置为可执行:
cp post-commit.tmpl post-commit
chmod +x post-commit
这样就有了访问www目录的权限。
里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件.
文件内容参考以下:
vi post-commit
#!/bin/sh
LANG=en_US.UTF-8
REPOS="$1"
REV="$2"
SVN_PATH=/usr/bin/svn
WEB_PATH=/var/www/html/XXX
LOG_PATH=/tmp/svn_update.log
#此行已注释
#/usr/bin/svn update --username user --password password $WEB_PATH --no-auth-cache
echo "\n\n\n##########开始提交 " `date "+%Y-%m-%d %H:%M:%S"` '##################' >>$LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
#注意将此行user和password改为你具体的user和password
$SVN_PATH update --username user --password password $WEB_PATH --no-auth-cache >> $LOG_PATH
#chown -R www:www $WEB_PATH
关闭:killall svnserve svn
开启: svnserve -d -r /home/svn/
里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件。
问题解决:
1、阿里云服务器Ubuntu14系统搭建svn服务时候注意配置安全组中的规则
入站和出站 3690/3690 0.0.0.0/0
https://help.aliyun.com/document_detail/25475.html?spm=5176.2020520101.121.1.417f9c6cF8FDFw
2、阿帕奇配置apache2 配置文件记得添加ServerName IP
https://askubuntu.com/questions/329323/problem-with-restarting-apache-2
3、Sudo问题:修,改/etc/hosts 添加/etc/hostname中的字符串
4、 解决svnserve: Can't bind server socket: Address already in use
/etc/init.d/svnserve start
netstat -antple | grep svn
killall svnserve
解决办法:
# svnserve -d -r /mnt/westos --listen-port 3691
- Ubuntu 搭建 LAMP 服务器
/******************************************************************** * Ubuntu 搭建 LAMP 服务器 * 说明: * 想 ...
- CentOS搭建svn服务器支持https访问
在CentOS6.3 64位机器上配置SVN服务器,并设置只允许HTTPS连接,可以配置多个repos源,每个源都拥有自己的组和成员,用于权限控制. 安装相关软件 Apache yum install ...
- Ubuntu搭建Anki服务器
Ubuntu搭建Anki服务器 第一步安装Anki 阿里云的服务器,xshell远程登录上 #以root用户进行操作 #安装Akni服务 easy_install AnkiServer #添加名为an ...
- Ubuntu搭建NFS服务器,NFS协议详细分析
目录 1. Ubuntu搭建NFS服务器 2. NFS协议分析 2.1 实验拓扑: 2.2 在kali抓包分析 1. Ubuntu搭建NFS服务器 NFS(Network FileSystem,网 ...
- Git版本控制之ubuntu搭建Git服务器
Git是一个开源的分布式版本控制系统,可以有效.高效的处理从很小到非常大的项目版本管理.使得开发者可以通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库,也可以将代码提交到Git服务 ...
- win10用filezilla server搭建ftp服务器一直无法访问
win10用filezilla server搭建ftp服务器一直无法访问?? 是防火墙导致的,防火墙中允许filezilla server程序的
- 【转】SVN管理多个项目版本库
转载地址:http://blog.163.com/zhangxuemin_zy/blog/static/10178565520115704031799/ SVN管理多个项目版本库: 安装SVN服务 ...
- VisualSVN Server安装后,TortoiseSVN远程无法访问版本库。
修正!重演了一遍,发现总结有误,重新整理下.首先访问版本库的路径不清楚的话可以在VisualSVN Server的版本库上右键“Copy URL to Clipboard”.访问版本库失败的几种情况: ...
- SVN管理多个项目版本库 (windows,linux 通用)
SVN管理多个项目版本库: . 安装SVN服务器软件,路径: C:\Program Files\Subversion . 在D盘创建svn根目录D:\SVN-CM . 在D:\SVN-CM下创建SVN ...
随机推荐
- js入门关于js‘i++’‘++i’和‘i--’‘--i’计算的问题
一,i++和++i; i++是先赋值在运算,++i是先运算在赋值: 例如:var a=1 a++:在运算时是按照1计算的:但在下面再次出现时是按照2进行运算: ++a:在运算时是按照2计算的:在下面再 ...
- python通过openpyxl操作excel
python 对Excel操作常用的主要有xlwt.xlrd.openpyxl ,前者xlwt主要适合于对后缀为xls比较进行写入,而openpyxl主要是针对于Excel 2007 以上版本进行操作 ...
- 【MatConvNet代码解析】 vl_nnsoftmaxloss
背景知识:http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92 假设softmax层的输入(softmax ...
- spring事务详解(五)总结提高
系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.概念 ...
- py-day4-4 python 其他内置函数
# ascii码转换 print(chr(98)) 结果: b print(ord('b')) 结果: 98 # 求几的几次方 print(pow(2,3)) # 2**2 =2*2*2 结果: 8 ...
- SourceInsight宏插件3(非常好用,强力推荐)
openfolder.em源码:(链接:https://pan.baidu.com/s/1draaimWzCHZ3vLxL--lfiQ 提取码:zyq4) //使用资源管理器打开当前文件所在文件夹, ...
- HTTP协议初步解析
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,定义了Web客户端向Web服务器请求Web页面的 ...
- vue.js安装过程(npm安装)
一.开发环境 vue推荐开发环境: Node.js: JavaScript运行环境(runtime),不同系统直接运行各种编程语言 npm: Nodejs下的包管理器. webpack: 它主要的用途 ...
- iOS业务模块化利用CocoaPod入门实践
iOS业务模块化即是通过不同的工程管理不同的业务,通常应用在中大型项目中,这样做的好处主要有:1.多人开发时,防止工程文件冲突 2.能够为下个不同的项目抽取代码,话不多说,直接看步骤:括号内容为本例 ...
- C#源码发送简单的HTTP请求
如下代码内容是关于C#发送简单的HTTP请求的代码,应该能对大家有用处. using System;using System.Collections.Generic;using System.Linq ...