ubuntu14.04安装subversion1.8.8

------------------------------------------------------------

作者:Amaryllis

编写日期:201406051731

操作系统:ubuntu14.04

支持系统版本:Ubuntu10.04-14.04(本人亲自测试)

图片:非原创(在操作过程中,尽量以文字为主,图片仅做参考)

排版:参考http://www.linuxidc.com/Linux/2013-05/84944.htm

内容:在上参考文章中添加了容易出错以及被忽略的地方,以及对组和用户进行了诠释,诠释非原创

目的:本地或通过Web访问Subversion

示例:http://10.5.0.231/svn/repos或者svn://10.5.0.231/svn/repos

集成方案:subversion + apache2

------------------------------------------------------------

SVN最常见的配置模式便是与Apache集成,这样SVN可以采用WebDev协议方式提供服务。主要的好处有:通过Apache以HTTP方式穿透防火墙,便于在互联网环境使用;提供目录的版本控制;纯2进制的文件对比方式等。


1. 安装Subversion

apt-get install subversion
apt-get install subversion-tools

2. 安装Apache

apt-get install apache2
apt-get install libapache2-svn
apt-get install apache2-utils  //在添加用户时需要用到

3. Apache和Subversion的集成

查看/etc/apache2/mods-enabled/dav_svn.load文件,有mod_dav_svn.so和mod_authz_svn.so这两个动态库说明apache已经加载了Subversion的访问控制模块。如果没有,手动添加。

添加mod_authz_svn.so则是 gedit /etc/apache2/mods_enables/dav_svn.load

然后:LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so



编辑/etc/apache2/mods-enabled/dav_svn.conf文件,在最后加入下述内容:

<Location /svn>
DAV svn
SVNParentPath /home/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/subversion/dav_svn.password
AuthzSVNAccessFile /etc/subversion/dav_svn.authz
Require valid-user </Location>

命令touch /etc/subversion/dav_svn.password和touch /etc/subversion/dav_svn.authz来创建这2个不存在的文件。

/etc/subversion目录为项目配置目录,其公共数据可存放到此目录

<Location /svn>  意思是Subversion版本可用的URL是http://SubversionServerIP/svn

DAV SVN  告诉Apache是哪个模块响应哪个URL的请求,在这里是Subversion模块

SVNParentPath /home/svn  告诉Subversion需要查看的版本库在/home/svn之下。如果不希望为每个单独的项目都进行单独的设置,可以把所有项目都存放在统一的资源库目录,使用SVNParentPath指令来指定存放所有项目的路径。否则使用SVNPath

SVNPath  单版本库时使用此项指明版本库的路径,但在多版本库中不要使用此项

AuthType Basic  认证类型为基本认证,就是用户名和密码

AuthName "Subversion repository"  认证名称,将在浏览器界面弹出一个对话框,标题为Subversion repository

AuthUserFile /home/svn/passwd.conf  指定使用的认证密码文件,即访问版本库用户的文件,用apache的htpasswd命令生成

AuthzSVNAccessFile /home/svn/authz.conf  设定访问版本库权限的文件

Require valid-user  要求验证用户,即不能匿名访问。如果没有该语句,则只能第一个用户可以访问新建库

此外,SVNIndexXSLT “/svnindex.xsl”  使用它可以在用浏览器时更好看

4. 在添加了上述内容后,必须重启Apache2 HTTP服务器

/etc/init.d/apache2 restart

5. Subversion建立版本库

mkdir /home/svn
mkdir /home/svn/repos
svnadmin create --fs-type fsfs /home/svn/repos
也可以直接:svnadmin create  /home/svn/repos

运行创建版本库的命令,指定数据存储为 FSFS,如果要指定为 Berkeley DB,则将 fsfs 替换为 bdb。

如果一切正常,命令执行后没有任何反馈信息而迅速返回。一个新的版本库就被创建出来。我们可以查看下版本库里有什么。

其中,conf 目录下存放了版本库的配置文件,包括用户访问控制和权限控制等内容;dav 目录是提供给 Apache 相关模块的目录,目前为空;db 目录下存放着 Subversion 所要管理的所有受版本控制的数据,不同的存储方式(Berkeley DB 或者 FSFS)下有着不同的目录结构,不过我们一般不用直接修改和查看这个目录下的内容,Subversion 的命令可以安全的操作这个目录;另外,hooks 目录存放着钩子脚本及其模版(一种版本库事件触发程序),locks 目录存放着 Subversion 版本库锁定数据,用来追踪存取文件库的客户端;format 文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。

注意:库与库之间不能包含。

我们可以测试下Subversion能不能检出。

其中:dav和repos这两个目录可有可无(或者其他地方要用到,这个暂时不予考虑)

创建好之后,需要对repos进行授权,否则在后续Check in的时候会报错如:

Can't open '/home/svn/repos/db/txn-current-lock': Permission denied
6.创建 SVN 仓库

许多位置都可以放置 Subversion 文件仓库,其中两个最常用的是:/usr/local/svn 以及 /home/svn。为了在下面的描述中简单明了,我们假设您的 Subversion 文件仓库放在 /home/svn,并且你的项目名称是简单的“myproject”。

同样的,也有许多常用的方式设置文件仓库的访问权限。然而,这也是安装过程中最经常出现错误的地方,因此我们会对此进行一个详细说明。通常的情况下,您应该创建一个名为“Subversion”的用户组,该组是SVN仓库所在的目录的拥有者。下面是一个快速的操作说明,有关内容请参考相关文档的详细说明:

  • 在 Ubuntu 菜单上选择“系统->系统管理->用户和组”;
  • 切换到“组”标签;
  • 点击“添加组”按钮;
  • 组名为“subversion”;
  • 将您自己和“www-data”(Apache 用户)加入组成员中;
  • 点击“OK”以确认修改,关闭该程序。

或者使用命令完成上述功能(增加组,并且把用户加到组里):

sudo addgroup subversion
sudo usermod -G subversion -a www-data

再或者直接使用命令编辑组文件"sudo vi /etc/group",增加组和成员(不推荐):

$ sudo vi /etc/group

结果看上去,像这样。

$ cat /etc/group|grep subversion
subversion:x:1002:www-data,exp

您需要注销然后再登录以便您能够成为 subversion 组的一员,然后就可以执行签入文件(Check in,也称提交文件)的操作了。

现在执行下面的命令

$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir repos
$ sudo chown -R root:subversion repos

下面的命令用于创建 SVN 文件仓库:

$ sudo svnadmin create /home/svn/repos

赋予组成员对所有新加入文件仓库的文件拥有相应的权限:

$ sudo chmod -R g+rws repos

如果上面这个命令在创建SVN文件仓库之前运行,你可能在后续Check in的时候遇到如下错误:

Can't open '/home/svn/repos/db/txn-current-lock': Permission denied

查看txn-current-lock文件的权限和用户以及组信息,应该类似于:

$ ls -l /home/svn/repos/db/txn-current-lock
-rw-rwSr-- 1 root subversion 0 2009-06-18 15:33 txn-current-lock

除了权限以外,用户及其组如果不对,则仍然会遇到上述问题,可以再次运行命令:

$ sudo chown -R root:subversion repos



7. Subversion添加项目

管理员必须考虑的问题是,将每一个项目分别放在不同的版本库里面,还是将它们放在统一的版本库里面。统一的版本库可以让管理员更加容易的升级和备份,不过,由于访问权限控制是针对整个版本库的,所以,统一的版本库也为不同项目配置不同的访问权限带来了麻烦。所以,管理员应该根据实际情况权衡考虑。
我以统一的版本库为例,添加三个项目business,develop和project。首先在一个临时目录下,根据 Subversion 版本控制的一般布局结构,创建出三个项目的主要目录树,如下:

然后用 svn import 命令导入已有的目录树。

svn import /home/svn/tmp/ file:///home/svn/repos/ --message "init"

可以用 svn list 确认导入的项目是否正确:

svn list --verbose file:///home/svn/repos/

如果要查看最新修订版本的信息,可以使用 svnlook info 命令:

svnlook info /home/svn/repos/

还可以在命令后面接上 “--revision 版本号” 来指定某一个修订版的显示。

还可以用如下命令来显示版本库的具体树形结构,后面的 “--show-ids” 选项指定显示每一个显示元素的修改版本 ID。

svnlook tree /home/svn/repos/ --show-ids


8. Subversion添加用户

添加第一个用户,要加参数-c。以后不用加。

htpasswd -c /etc/subversion/dav_svn.passwd wangqixuan

Subversion追加用户:

htpasswd /etc/subversion/dav_svn.passwd yang

passwd.conf文件的生成内容是用户名加上密码的 MD5 密文。

9. Subversion分配用户权限

新添加的用户是不能访问Subversion的,还要为他分配权限。编辑/etc/subversion/dav_svn.authz文件,例:

[groups]
vip = wang
admin = wangqixuan, yang
develop-manager = zhong
business-manager = shi
developer = ma, hu, zhou, cen, huang

[repos:/]
@admin = rw
* = r

[repos:/develop/01-Windows项目组/01-ARM架构]
@vip =rw
@admin = rw
@develop-manager = rw
* =
[repos:/develop/01-Windows项目组/02-X86架构]
@vip =rw
@admin = rw
@develop-manager = rw
zhou = rw
hu =rw
ma = r
* =
[repos:/develop/02-Linux项目组/01-ARM架构] @vip =rw @admin = rw @develop-manager = rw cen = r huang = r * = [repos:/develop/02-Linux项目组/02-X86架构] @vip =rw @admin = rw @develop-manager = rw cen = r huang = r * = [repos:/develop/个人目录] @vip =rw @admin = rw @develop-manager = rw @developer = rw * =

其中* = 表示其它所有用户都没有任何权限。@表示用户组,*表示所有用户,[/]表示全部目录。注意顶格写。UTF-8格式才能配置SVN权限,Linux下默认是UTF-8,Windows下有转换工具,比如Eclipse->Edit->最后一项。一般针对最末梢文件设置权限。

特别注意:权限分配时,不能写成cen, huang =r,这样提交时会出现错误:svn Commit failed checkout of 403 forbidden。应该写成cen = r和huang = r

10. Subversion启动

svnserve -d -r /home/svn

Subversion 设计了一个抽象的网络层,版本库建立完毕之后,可以通过各种服务器向外公布。svnserve 是 Subversion 自带的一个小型的服务器,它使用独立的协议与客户端。–i 作为 inetd 启动。-d参数表示svnserve将会作为一个服务程序运行在后台。-r参数表示将/home/svn指定为代码库的根目录。这样,当客户端使用类似svn://192.168.0.1/repos这样的URL访问服务器的时候,其所访问的真实库是/home/svn/repos。另外如 --listen-port,--listen-host 可以指定绑定的地址和端口,-R 可以强制设定为 Read-Only 模式。

下面命令可检查是否成功启动:

ps -ef | grep svn
或者
ps -aux | grep svn


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值