启动 Subversion 服务 ```````````````````` 在服务器端,打开一个命令行窗口,用CD命令进入 Subversion 安装目录下的 bin 目录,运行如下指令:: svnserve -d -r d:\svn 其中的 -d 参数表示 svnserve.exe 将会作为一个服务程序运行在后台,而 -r 参数表示将 ``D:\svn`` 目录指定为代码库的根目录。这样,当客户端使用类似 svn://192.168.0.1/foo 这样内容的 URL 来访问服务器时候,其所访问到的真实代码库,其实就是 ``D:\svn\foo`` 用上述命令行方式启动的 svn 服务有个小缺点,就是在本试验过程中,服务器端必须要一直开着那个运行了上述命令的DOS窗口,不能关闭它。如果不想看到这个窗口,可以将 svnserve 安装成 windows 的一个 services,安装方式请参考其他文章。 建立代码库 `````````` 在服务器端的 ``D:\svn`` 目录下,建立一个名为 arm 的代码库,命令如下:: D:\svn>svnadmin create arm 使用上述命令之后,如果不出问题的话,在 ``D:\svn`` 目录下就会多出一个叫做 ``arm`` 的目录,其下具备 conf、dav、hooks、locks、db 等子目录或文件,此即 **一个名为arm的代码库** 。从此,通过 ``svn://192.168.0.1/arm`` 这样的 URL,我们就可以对这个代码库进行访问了。接下来就要进入本文的正题了,也就是权限配置部分了。 其实进入 ``arm\conf`` 目录你就会发现,它下面已经存在三个写了一些帮助信息和示例的配置文件,以帮助用户尽早掌握其配置方法。这三个默认的配置文件分别是 svnserve.conf、passwd、authz 。其中后两者没有后缀,对于 windows 系统的用户来说,看起来总是有些怪异,所以在接下来的章节里面,我将它们两个都给添加了个 conf 后缀,以便管理。 编辑代码库基础配置文件 `````````````````````` 在服务器端,编辑代码库的 ``arm\conf\svnserve.conf`` 文件,如下:: [general] password-db = passwd.conf anon-access = none auth-access = write authz-db = authz.conf 管理用户帐号 ```````````` 在服务器端,新建 ``arm\conf\passwd.conf`` 文件,如下:: [users] morson = ShowMeTheMoney michael = mysecretpassword scofield = hellolittilekiller lincon = asyouknows111 rory = 8809117 linda = IlikeWorldCup2006 建立目录访问权限控制文件 ```````````````````````` 在服务器端,新建 ``arm\conf\authz.conf`` 文件,内容如下:: [groups] g_vip = morson g_manager = michael g_beijing = scofield g_shanghai = lincon g_headquarters = rory, linda g_docs = linda [arm:/] @g_manager = rw * = r [arm:/diary/headquarters] @g_manager = rw @g_headquarters = rw @g_vip = r * = [arm:/diary/beijing] @g_manager = rw @g_beijing = rw @g_vip = r * = [arm:/diary/shanghai] @g_manager = rw @g_shanghai = rw @g_vip = r * = [arm:/ref] @g_manager = rw @g_docs = rw * = r [arm:/temp] * = rw 导入代码 ```````` 在客户机 ``F:\temp`` 目录下,建立好前述“背景假设”一节中描述的目录结构,然后用命令 ``F:\temp>svn import arm svn://192.168.0.1/arm --username michael --password mysecretpassword`` 导入整个目录结构。 这条指令的精确意思是,将 arm 目录下面的所有东西,导入到那个名叫 arm 的代码库中去。如果你不指定源目录,则 svn 会默认将当前目录作为源目录。比如说,你处于 ``F:\temp`` 目录下的时候,直接执行 ``svn import svn://192.168.0.1/arm`` ,那么当你取出你的代码的时候,你会发现,居然多了一层名为 arm 的目录。结果,你就必须使用类似 ``svn://192.168.0.1/arm/arm`` 这样怪异的URL,才能够正确访问到你的代码们。 这一点粗看好像不是特别重要,不过联想到前述的目录授权规则,可都是按照标准的项目目录结构来设计的。突然之间,你项目的根目录之上,多出了一个名为 arm 的目录,那么我们的所有目录授权规则,基本上都要全部改过了,否则除了根目录,你永远会得到一个莫名其妙的“access denied”。由于 Subversion 在这一步骤上的界面不够人性化,因此这是初学者很容易弄混的地方之一。