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 ...
随机推荐
- [工作积累] D3D10+ 中 Pixel Shader 的input semantic和参数顺序
由于semantic的使用,我们有理由相信 vertex shader的output 和 pixel shader的input是按照semantic来匹配的,而跟传入顺序无关.印象dx9时代是这样. ...
- 使用VMWare虚拟机打开MFC报错:不支持16位系统
可能这个问题的比较小众,但还是提供一下自己的思路. 笔者使用的是VMWare Fusion11的版本,采用windows7sp1的虚拟机. 在打开Mac系统共享过来的VC++的MFC文件运行时报错:不 ...
- Spring AOP详解
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- java_oop_接口
接口 难的是在系统设计里怎么样使用接口,主要在语法,不在系统架构与设计 概念 声明 语法 只有抽象方法的抽象类?可以用接口来表示,用接口来代替这样的抽象类,是因为 ...
- vs2015 无法连接到已配置的开发web服务器
问题一:vs2015 无法连接到已配置的开发web服务器 最靠谱方法如下:(和防火墙开启无关联, 注册表增加什么键值无关联 , 缺失asp.net core.Dll文件无关联 ) 分析,因为前提是你的 ...
- docker中安装ps命令
apt-get update && apt-get install -y procps
- Java使用算数运算符实现两个整数互换
有很简单的方法可以实现,不过还是用一步一个脚印的方法来试试 首先分析一下流程 这里有两个变量. int a = 10,b = 40; //此时 a 为10,b 为40 然后我们开始走路,在不依靠第三者 ...
- 纵观 jBPM:从 jBPM3 到 jBPM5 以及 Activiti5
https://www.infoq.cn/article/rh-jbpm5-activiti5# 对jBPM来说,今年最大的事件莫过于 jBPM 的创建者Tom Baeyens离开 JBoss 了.T ...
- verilog 中task用法
1.任务定义 任务定义的形式如下: task task_id; [declaration] procedural_statement endtask 其中,关键词 task ...
- hive 的map数和reduce如何确定(转)
转自博客:https://blog.csdn.net/u013385925/article/details/78245011(没找到原创者,该博客也是转发) 一. 控制hive任务中的map ...