Debian+subversion进行版本控制

来源:互联网 发布:软件钉钉有什么用处 编辑:程序博客网 时间:2024/05/20 19:31

2009-05-15 来源:网络


我,作为一个系统管理人员来说,真的没有什么好东西可以写,但是唯一有点参考价值的就是自己的一点点小经验,所谓的经验:也是从别人的文章学来,之后自己操作实践变成自己的,HOHO……

两个月前,公司终于在广域网架设了一台linux服务器,刚开始当然就是所谓的http服务、ftp服务……,难道写这些?但是此类服务文章在网上一搜,到处都是,有何可写的呢,唉!

终于,自己想到来弄一个版本控制服务器。自己的环境:

system:Debian-sarge3.1-rc1 tools:subversiong、apache2…… 废话说了一大通,现在我们还是开始吧

1、安装必要软件包

SVN最常用的方式是通过Apache2使用(其他方式本文不会涉及,最主要是我也没做过.^_^),因此需要安装apache2。在一般情况下,我的服务器上会安装php,因为我选择了apache的apache2-mpm-prefork包。安装命令:
shell#apt-get install apache2-mpm-prefork libapache2-svn subversion
Debian的包管理系统会自动安装缺少的包。

2、配置

svn作为apache2的一个模块,配置文件在Debian下位于/etc/apache2/mods-available/dav_svn.conf(其他发行版或许有所区别)。首先我们看一个配置文件示例:
<Location /svn>
DAV svn
SVNParentPath /data/svn_repos/
AuthzSVNAccessFile /etc/apache2/erya.authz
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>

说明:

a)第一行:<Location /svn>表示svn仓库位于/svn虚拟目录下面(Location的作用有点类似Alias的作用)。当然你可以的目录,比如<Location /src>。那么这样配置一般您将可以通过浏览器http://hostname/svn进行浏览(如果权限足够的话)。

b)第二行: DAV svn表示dav启用svn支持。如果您想更详细了解dav是啥去baidu或者google一下,网上资料蛮多的。

c)第三行:SVNParentPath /data/svn_repos表示使用SVNParent方式,并且仓库的物理路径为/data/svn_repos.SVN支持两种对项目的管理方式,一种是SVNParent,另一种是SVN(?)。我一般更喜欢SVNParent这种方式,因为使用这种方式添加一个新项目是不需要重启 apache的,而另一种方式则需要。对于一个实际使用的服务器来说,是否需要常常重启是一件很重要的事情了。这儿的/data/svn_repos目录必须是存在而且目录的属主应该为apache的用户(Debian下一般为www-data)。mkdir -p /data/svn_repos;chown -R www-data:www-data /data/svn_repos。注意:配置文件默认的是SVNPath,即使用的后一种方式。

d)第四行:AuthzSVNAccessFile /etc/apache2/erya.authz。表示用户权限文件是/etc/apache2/erya.authz(权限文件的写法我在后面再说)。文件可以位于任意其他位置。

e)第五至八行:经常配置apache的朋友,我想一定看出来了,这个是apache的配置,使用使用apache的用户文件作为身份验证,需且要求有效用户才可以访问。如果您使用其他用户管理方式,比如pam,LDAP或者MySQL等都是一样的。其实在配置文件注释中已经说明了怎么样使用 htpasswd进行用户管理的方式。在此需要注意的是第四行的配置与此处的配置,在authz权限文件中,只配置哪个用户是什么样的权限,而判断是否已经通过密码验证却是由apache的用户管理实现的。也就是说,比如我有一个用户qsg,那么判断这个用户的密码是否正确是由此处完成的,而判断此用户对哪些项目有什么样的权限则是由authz文件完成的。

上面这个配置示例是最简单的一个配置,其实您还可以通过这个配置xlst文件,以改变通过浏览器查看的效果(我尝试过几次,不过配置出来的效果比默认更难看,所以索性作罢。)

配置完成后,进入/etc/apache2/mods_enabled查看指向dav_svn.conf和dav_svn.load的文件链接是否存在(apache据此启动模块)。

3、创建用户文件

在dav_svn.conf的注释中已经说明了创建用户文件的方法:
htpasswd2 -c /etc/apache2/dav_svn.passwd jsz

添加用户jsz到/etc/apache2/dav_svn.passwd文件中,如果文件不存在,则创建。

4、建立项目仓库

我们假设您的配置的SVNParentPath目录是/data/svn_repos。进入/data/svn_repos,此时目录应该是空的。

创建一个项目仓库分为三个步骤:a)建立目录b)使用svnadmin初始化新项目目录c)将目录属主改为apache的用户(本文中我们都假设您使用默认为www-data用户)。

我写了一个小脚本(假设文件名为createnew):
#!/bin/bash

echo "Create a new resposity ..."
mkdir $1
svnadmin create $1
chown -R www-data:www-data $1

很简单,三条命令。用法:./createnew test,则我们就建立了一个test项目。建立其他项目也一样,比如:./createnew project1

执行完以后再查看一下目录情况下。我们可以进入test目录看看,它不象CVS一样,你能够看到什么,因为svn使用了Berkeley数据库来存放代码.

5、建议权限文件(authz)

svn授权粒度可以是单独用户,也可以是用户组。

svn的权限分为三种:无权限,读权限,读写权限。无权限当然是禁止访问,读权限也就是说有浏览权限,你可以checkout代码,但不能提交。读写权限当然是最大权限了,读写添加删除都可以。

svn的授权深度是它最大的特点了,它不仅可以对整个项目授权,甚至于它可以对项目下的某个目录,某个文件进行单独授权。我认为这是非常有用的一个功能。

咱们还是先来看一个文件示例吧:
[groups]
manager = jsz

user = user1,user2

[test:/]
@manager = rw

[test:/file1]
@manager = rw
user1 =
user2 = rw
先来解释一下吧:

a)groups区段,就如它的名字所说的那样,是定义用户组用的。比如在示例文件中定义了两个组maanger组和user组。

b)项目区段,每一个区段是一个授权单位。比如示例中有两个项目区段test:/和test:/file1。对于test:/表示对test项目的根目录授权,test:/file1表示对test项目下的/file1文件授权(目录也是一样)。如果我们还需要对test项目的dir1目录进行授权,则我们需要再增加一个test:/dir1区段。

c)授权。如果要对某个项目的某部分进行项目组授权,则写法为组名前加@符号(如@manager),如果要对单独用户授权,则直接为用户名。等号(=)后面是权限,有三种写法:空(无权限),r(读权限),rw(读写权限)。默认为空,即无权限。

d)权限优先级。您可能已经看到了我在test:/区段对user1授了读权限,而对user2是无权限,而对于/file1下的文件,我给user1授了无权限,给user2授了读写权限。这个就是权限的优先级问题,即目录越深,权限越是优先。比如test下有一目录 /dir1/dir2/dir3/dir4/file5,那么对于用户user1来说,svn首先检查是否有针对user1的对file5的授权,若有,则用此授权;如果没有,再判断user1对dir4的权限,至到/目录。如果至根目录依然没有设置,则使用默认权限(无权限)。

6、重启apache

该写的配置文件都写了,那我们就重启一下apache服务吧。/etc/init.d/apache2 restart

然后通过浏览器查看一下吧:http://hostname/svn/test

现在因为我们还没有往svn是添加任何东西,所以我们看到的是"Revision 0: /"

7、svn的简单※作

svn※作除了命令行以后,在windows和linux的图形化界面下,都有相应的客户端软件。

a)导入

初始化以后,库中没有任何东西,所以我们首先要将我们的内容import进去。

作为一个演示:
mkdir /tmp/svn
cd /tmp/svn
touch file1

svn import http://hostname/svn/test -m "init" #会提示你输入用户名和口令,用户默认为当前用户,如果不正确,直接回车再输入用户名
现在通过浏览器查看http://hostname/svn/test,我们可以看到现在已经变成"Revision 1: /"而且我们可以看到file1文件也存在了。

b)Checkout

checkout的※作是将代码从svn服务器上取下来。

继续上面的演示:
cd ..
rm -rf svn
svn co http://hostname/svn/test #我们看到在tmp目录下多了一个test目录。
C)Add和Commit
cd test
vi file1 #修改一下file1文件
touch file2 #新增一个file2文件
svn stat #查看一下当前目录的文件改动情况
我们看到file2前面是一个问号,表示file2还没有加到仓库中。file1前面是一个M,表示修改。
svn add file2 #添加file2,add与import的区别是add并不会直接加到svn服务器上,而import则会。add只是增加了一个添加作业项。
svn ci -m "add file2 and modify file1" #提交

现在通过浏览器查看http://hostname/svn/test,我们可以看到现在已经变成"Revision 2: /"而且我们可以看到file2文件也存在了。

8、常见问题

a)配置后通过浏览器提示权限禁止

将/etc/apache2/mods-available/dav_svn.conf中的<LimitExcept GET PROPFIND OPTIONS REPORT>行和</LimitExcept>注释掉。本文仅是一个基本配置,如果您想了解这两行的含义可以通过网络搜索一下吧。

最后,如果将subversion结合viewvc使用,那么基于web的版本浏览,就更完美了,推荐一个windows下的客户端给大家吧,使用TortoiseSVN,有中文包的,使用非常方便。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机淘宝上我是商家停止服务怎么办 淘宝上买的电脑商家关闭了怎么办 淘宝链接复制链链接发不出去怎么办 淘宝卖家填错地址货已经发了怎么办 拼多多没交保证金无法提现怎么办 信用卡被别人刷了没证据怎么办 我在淘宝开个店卖衣服没人买怎么办 收货地址填错了卖家已发货怎么办 淘宝店上的供货商不发货怎么办 在淘宝买的花退到卖家后死了怎么办 在淘宝买东西付款开通了花呗怎么办 淘宝网投诉卖家也不处理问题怎么办 淘宝图片空间上传不了大图片怎么办 不小心把设置里打印机删掉了怎么办 电脑上qq不小心删掉了怎么办 进了一批款式不好卖的衣服怎么办? 淘宝首页图片不居中代码装的怎么办 小语言代码装修以后不是全屏怎么办 招教年龄超过4个月怎么办 淘宝上注册的店铺被别人用了怎么办 淘宝贷款后店铺转让了贷款怎么办 手机千牛发布宝贝类目找不到怎么办 亚马逊被移除销售权该怎么办 玉米煮水不够熟吃了怎么办 华为云手机找回关了找回手机怎么办 我的淘宝号被别人盗用开店怎么办 淘宝买东西发货了不想要了怎么办 两张单号一样罚款已被处理怎么办 58同城登录电话换了怎么办 在超市买的东西坏了怎么办 安卓系统无法安装第三方软件怎么办 金立手机报毒不能安装软件怎么办 js中下拉菜单被图片挡住怎么办 更换主机后用户名跟密码忘了怎么办 换手机号了京东账号登录不上怎么办 口令卡绑定时访问页面找不回怎么办 手机淘宝购物车不小心删除了怎么办 上淘宝网图片文字不清晰怎么办 淘宝店铺低消费人群占比多怎么办 微信只能在应用商城里面打开怎么办 淘宝买了特价商品店家不发货怎么办