SVN服务器环境搭建

SVN服务器环境搭建
SVN服务器环境搭建

1 Apache+Subversion 的安装管理
传统方式实现 Subversion、Apache 和用户及权限管理功能; 优点:便于了解和掌握 Subversion 的更多设置
1.1 安装工具
apache:apache_2.2.8-win32-x86-no_ssl.msi; Subversion:服务器端 Setup-Subversion-1.6.6.msi;
1.2 安装过程
重复 6.2 中的 6.2.1 和 6.2.2 内容
1.3 环境设置
1.3.1 设置 SVN
请到 C:\Apache2.2\conf 修改 httpd.conf 文件,修改如下 请到 C:\Apache2.2\conf 修改 httpd.conf 文件,修改如下:
#请将下面 2 行前面的"#"删除。 #LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so
#请将下面 2 行放在 mod_dav.so 的下面,后面的路径为安装 subversion 的路径。 LoadModule dav_svn_module "Subversion 路径/bin/mod_dav_svn.so" LoadModule authz_svn_module "Subversion 路径/bin/mod_authz_svn.so" 修改结果为: LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so" LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so" LoadModule dav_fs_module modules/mod_dav_fs.so 在 httpd.conf 最下面加入: DAV svn
内部资料, 注意保密 第 1 页 共 17 页

#SVN Repository 的位置。 SVNParentPath "C:/SVNProj" #用户验证设置。 AuthType Basic AuthName "Subversion repository" AuthUserFile "C:/SVNProj/passwd.ini" Require valid-user #用户权限设置。 AuthzSVNAccessFile "C:/SVNProj/authz.ini"
# 配置 SVN 的访问路径以及相关相关参数的说明: DAV svn SVNParentPath D:/SVN_REPOS SVNListParentPath on AuthType Basic AuthName "SVN REPOS" AuthUserFile D:/SVN_REPOS/ passwd.ini AuthzSVNAccessFile D:/SVN_REPOS/ authz.ini Require valid-user # 重定向处理,用于将 http://HOSTip/svn 地址重定向为 http://HOSTip/svn/ RedirectMatch ^(/svn)$ $1/ 下面对几个重要的地方作以说明: i. 网上很多文章提到将 mod_dav_svn.so 和 mod_authz_svn.so 两个文件直接拷贝到 Apache 的 modules 目录下, 当初我按照这种方法做时结果在一台 Windows 2000 Server 上无法启动 Apache 服务, 为此折腾了半天。后来才明白,这些模块文件其实就是一些动态链接库,它需要依赖 SVN 的 bin 目录 下的其它几个 dll 文件(可以把后缀改为 dll,然后通过 VC 带的 depends 查看其依赖关系),因此 如果没有设置环境变量,那么 Apache 加载这些模块时就会失败,当然也可以把所有依赖文件(主要 是 libdb43.dll )拷贝过去。实际上,我们只需要通过绝对路径来引用这些模块即可,这样 SVN 升级 后也不用再次拷贝。 ii. URL 的访问路径为/svn/而不是/svn,因为后者可能有问题,导致通过 http://HOST/svn 访问 出现如下错误信息 # 通过 http://HOSTip/svn/访问 SVN 服务器 # 必需 # 说明 D:/SVN_REPOS 下的所有目录均为仓库 # 在网页中列出 D:/SVN_REPOS 下的所有仓库 # 基本的用户名密码验证方式 # 认证名称,作提示用 # 用户名密码文件 # 权限控制文件
# 只有通过认证才能访问网页
内部资料, 注意保密
第 2 页 共 17 页

iii. SVNParentPath 用于有多个仓库的情况,如果只有单个仓库,可以直接用 SVNPath 指明仓库 路径。 iv. AuthUserFile 指明用户名密码文件,但它与前面提到的 SVN 仓库下的 passwd 文件不是同一 个文件,AuthUserFile 是 Apache 的认证文件格式,二者的区别主要是用户名和密码的分割符不同, passwd 是等号,这里的 users 是冒号,当初我就是把它们当成一个文件而造成客户端无法访问(为什 么 SVN 不把 passwd 的格式定义成和 AuthUserFile 的一样呢?这样二者可以共用一个文件)。如果要 对密码加密,那么 users 文件需通过 Apache 附带的 htpasswd 工具生成,实际上我们也可直接采用明 文方式。 v. 权限控制文件 AuthzSVNAccessFile 与前面 SVN 里的 authz 一样,因此可以共用。 备注:在指定的文件夹 D:/SVN_REPOS/中可以建立多个配置库,由于指定的 AuthUserFile 和 AuthzSVNAccessFile 都是指向 D:/SVN_REPOS/根目录中建立的这连个文件,所以该目录下的所有配置 库都是使用的这两个用户权限控制文件,也就是说所有库的用户都要添加到 AuthUserFile D:/SVN_REPOS/ passwd.ini,所有库的访问权限都要添加到 AuthzSVNAccessFile D:/SVN_REPOS/ authz.ini,,假如 D:/SVN_REPOS/ 下有三个库,svntest,svntest2,svntest3,authz.ini 库的权 限设置举例如下: #让 PM 能 Import 最初始的项目,所以要全部能写入 [svntest:/] @pm=rw @developers=r
[svntest2:/]
@pm=rw @developers=r
[svntest3:/] @pm=rw @developers=r
1.3.2
设置 SSL
也请将下面 ssl module 的"#"删除。
#LoadModule ssl_module modules/mod_ssl.so
如果您想修改 ssl 的 port number,则请修改 C:\Apache2.2\conf\extra 的 httpd-ssl.conf,将 下面 443 改为您想要的 port,如您没有修改则 port 为 443:
Listen 443
内部资料, 注意保密 第 3 页 共 17 页


ServerName localhost:443
产生 SSL Cert & Key 使用命令模式,将目录移到 C:\Apache2.2\conf 输入以下命令:
openssl req -config https://www.360docs.net/doc/d111080472.html,f -new -out server.csr
依照 ssl 要求输入信息:
制作 SSL 证书时,要输入 CommonName(CN),这个 CommonName 要与 httpd.conf 中的 Servername 一致 不然 log 中会出现 [warn] RSA server certificate CommonName (CN) `https://www.360docs.net/doc/d111080472.html,' does NOT match server name! 的错误信息 svn 请输入以下命令:
openssl rsa -in privkey.pem -out server.key
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
内部资料, 注意保密 第 4 页 共 17 页

openssl x509 -in server.crt -out server.der.crt -outform DER
输入结果如下:
测试 SSL 是否有产生成功,请先将目录移到 C:\Apache2.2\bin,然后执行以下命令,如为下图结 果即有产生成功:
接下来是注册 Apache 服务,请输入以下命令:
httpd.exe -k install
httpd.exe -k config -D SSL
您可以在 C:\Apache2.2\conf 目录下看到产生的 SSL 文件:
内部资料, 注意保密
第 5 页 共 17 页

最后请将 Apache 重新启动,即可完成 SSL 的设置。
1.4 配置库的搭建和管理 配置库的搭建和管理
1.4.1 创建配置库
在建立版本库前我们要先让 Apache 可以访问到所指定 Subversion 的路径及文件, Subversion 的路径及文 件访问是根据 Apache 上的设置来建立,依照本文档 Apache 的设置,我们要建立以下基本的目录及文件:
C:\SVNProj #目录- Apache 访问 Subversion 的路径位置。 C:\SVMProj\passwd.ini #文件- Apache 访问的用户验证文件。 C:\SVMProj\authz.ini #文件- Apache 访问的权限文件。
请先在 C:\新增 SVNProj 目录,然后使用命令模式将目录移到 C:\SVNProj,然后使用以下命令来建立 passwd.ini 文件:
内部资料, 注意保密
第 6 页 共 17 页

使用 notepad 输入以下内容,将文件名称命名为 authz.ini:
#定义群组 [groups] pm = bond developers = john,jenny,andy everyone = *
#默认拒绝所有人进入浏览 [/] * =
这样基本的 3 个文件就都有了, 就可以让 Apache 访问 Subversion 下的版本库, 接下来我们来建立版本库。 使用命令模式,移动目录到 C:\SVNProj,输入以下命令:
svnadmin create 名称
例如:svnadmin create project1
//启动配置库服务,在 dos 中输入,保持窗口不关闭:svnserve -d -r D:\SVNProj\svntest(即配置库 路径) ,此方式为 svn 自带服务启动当时,可通过 svn://方式访问,搭建 apache 后不需要启动这个服务 了 接下来我们要在 project1 这个版本库下新增 3 个目录,分别是 trunk、tags、branches,而这三个目录都 会设置权限,我们先在 authz.ini 设置这三个目录的权限,请在 authz .ini 文件的下面加入:
#语法→[版本库:项目路径]
#让 PM 能 Import 最初始的项目,所以要全部能写入
内部资料, 注意保密 第 7 页 共 17 页

[project1:/] @pm=rw @developers=r
#开发人员只能提交(Commit)到 trunk [project1:/trunk] @developers=rw
#只有 PM 可以决定何时该 Release 版本 [project1:/tags] @pm=rw
#只有 PM 才可以决定是否进行分支开发,若有分支开发需要再进行设置权限 [project1:/branch] @pm=rw
接下来是导入项目数据,我们先在 Subversion 外建立好项目目录,再使用 import 将此项目目录导入版本 库中,请建立以下项目目录:
C:\Projects\Project1 C:\Projects\Project1\trunk C:\Projects\Project1\tags C:\Projects\Project1\branches
请使用命令模式,将目录移动到 C:\Projects\Project1,然后使用以下命令:
svn import svn 的 url -m "message 信息"(例如:first import) 例如:svn import http://10.1.147.221:8090/svn/svntest/ -m "初始建库"(8090 即配置 apache 时的端口号)
如果您是第一次使用会要求您验证证书,请输入 p(永远接受),在验证领域的部分请输入在产生 SSL key 时所建立的密码 8888,再输入您刚刚在 passwd.ini 新增的帐户及密码即可:
内部资料, 注意保密
第 8 页 共 17 页

再来我们以网页来浏览新增的目录是否在版本库里,请在您的浏览器输入 svn 的 url:
输入帐户及密码:
可以看到在 project1 下有 trunk、tags、branches 这 3 个目录:
内部资料, 注意保密
第 9 页 共 17 页

1.4.2
账户管理
使用 SVN 内建的帐户管理 使用 AD/LDAP 服务器验证 我们可以从上面的 passwd.ini 文件来设置用户的帐户及密码,而在 authz.ini 可以设置将这些用户归类 在哪些群组,我们可以使用以下语法:
[groups] group1 = user1 group2 = user2,user3 group3 = user4,user5,user6 group4 = * #这里的*代表所有人
如果您不想让所有人看到您有哪些版本库,可以设置:
[/] * = #这里的*代表所有人
接下来是可以针对各个版本库或是版本库下的目录或文件来设置权限,权限的设置有: rw:读写(read-write) r:只读(only-read) no rw:在"="后面没有 rw 或 r,表示没有 read-write 或 only-read 的权限。 没有设置的权限目录或文件,以上层的权限为主,如没有上层权限的设置则无任何权限。 设置权限语法为:
[版本库:目录路径 or 文件路径] @群组=权限
关于权限我们以下面范例来说明。 以 project1 为例,在 project1 下目前有 trunk、tags、branches 三个目录,目前的权限设置为:
[project1:/] @pm=rw @developers=r
内部资料,注意保密 页
第 10 页 共 17

[project1:/trunk] @developers=rw
[project1:/tags] @pm=rw
[project1:/branch] @pm=rw
群组设置如下:
[groups] pm = bond developers = john,jenny,andy everyone = *
trunk 已设置 developers 群组的权限为 rw,虽然没有设置 pm 的权限,但 pm 在 project1 的根目录权限为 rw,因此 pm 也可以访问 trunk 目录。 我们先使用 bond 身份将 project1 签出(checkout)到 svntest 目录,并增加以下目录及文件后将此变更提 交(Commit):
/trunk/design /trunk/design/design.txt /trunk/design/uml /trunk/design/uml/uml.txt
#目录 #文件 #目录 #文件
如果将 design 的权限设置 developers=rw,则 developers 群组的成员都可以对 design 和 design 以下的 文件及目录签出和提交。 设置 design 的权限为 r,设置如下:
[project1:/trunk/design] @developers=r
当某一位 developers 群组的成员将 design 下的文件修改后并提交时, 则会产生下图结果, 因为没有 write 权限,所以提交会失败:
内部资料,注意保密 页
第 11 页 共 17

设置 design 的权限为 r,uml 的权限为 rw,设置如下:
[project1:/trunk/design] @developers=r
[project1:/trunk/design/uml] @developers=rw
developers 群组的成员修改 uml 下的文件后提交,则会产生下图结果,因为 uml 有 rw 的权限,所以提交 会成功:
设置 design 为无 rw 权限,设置如下:
[project1:/trunk/design] @developers=
developers 群组的成员签出 design 时则会产生下图结果,因为 design 没有 rw 权限,所以在签出时会失 败:
但是在签出 trunk 时会产生下图结果,因为 trunk 有 rw 权限,所以在签出会成功:
内部资料,注意保密 页
第 12 页 共 17

但是您如果到 svntest 文件夹下,会看不到 design,因为 design 没有 r 的权限,所以 Subversion 就不会 将无权限的文件夹签出:
设置 design 权限为无 rw 权限,uml 权限为 rw,设置如下:
[project1:/trunk/design] @developers=
[project1:/trunk/design/uml] @developers=rw
从 trunk 签出会成功但看不到 design 以下的所有目录及文件,结果如下:
从 design 签出会失败因为没有 r 权限:
内部资料,注意保密 页
第 13 页 共 17

从 uml 签出会成功,因为 uml 有 rw 权限,到 svntest 目录下只会看到 uml 以下的目录及文件:
2 Subversion 备份与还原 Subversion
Subversion 备份命令为:dump 使用命令模式将目录移到 C:\,然后输入以下命令:
svnadmin dump svn 目录 > 名称.dump
例如:svnadmin dump C:\SVNProj\project1 > project1.dump
结果如下:
C:\>svnadmin dump C:\SVNProj\project1 > project1.dump * Dumped revision 0. * Dumped revision 1. * Dumped revision 2. * Dumped revision 3. * Dumped revision 4. * Dumped revision 5. * Dumped revision 6. * Dumped revision 7.
内部资料,注意保密 页 第 14 页 共 17

* Dumped revision 8. * Dumped revision 9. * Dumped revision 10. * Dumped revision 11.
C:\>C:\SVNProj\
Subversion 还原命令为:load 使用命令模式将目录移到 C:\SVNProj,然后建立另一个版本库,请输入以下命令:
svnadmin create project2
然后将目录移到 C:\输入以下命令:
svnadmin load svn 目录 < dump 文件
例如:svnadmin load C:\SVNProj\project2 < project1.dump
结果如下:
C:\>svnadmin load C:\SVNProj\project2 < project1.dump <<< Started new transaction, based on original revision 1 * 新增路径 : branches ... 完成.路 * 新增路径 : tags ... 完成. * 新增路径 : trunk ... 完成.
------- Committed revision 1 >>>
<<< Started new transaction, based on original revision 2 * 新增路径 : trunk/design ... 完成.
------- Committed revision 2 >>>
<<< Started new transaction, based on original revision 3 * 新增路径 : trunk/design/john.txt ... 完成.
内部资料,注意保密 页 第 15 页 共 17

------- Committed revision 3 >>>
<<< Started new transaction, based on original revision 4 * 编辑路径 : trunk/design/john.txt ... 完成.
------- Committed revision 4 >>>
<<< Started new transaction, based on original revision 5 * 新增路径 : trunk/design/uml ... 完成.
------- Committed revision 5 >>>
<<< Started new transaction, based on original revision 6 * 新增路径 : trunk/design/uml/jenny.txt ... 完成.
------- Committed revision 6 >>>
<<< Started new transaction, based on original revision 7 * 新增路径 : trunk/design/design.txt ...COPIED... 完成. * 新增路径 : trunk/design/uml/uml.txt ...COPIED... 完成. * 刪除路径 : trunk/design/uml/jenny.txt ... 完成. * 刪除路径 : trunk/design/john.txt ... 完成.
------- Committed revision 7 >>>
<<< Started new transaction, based on original revision 8 * 新增路径 : readme.txt ... 完成.
------- Committed revision 8 >>>
内部资料,注意保密 页
第 16 页 共 17

<<< Started new transaction, based on original revision 9 * 编辑路径 : readme.txt ... 完成.
------- Committed revision 9 >>>
<<< Started new transaction, based on original revision 10 * 编辑路径 : trunk/design/design.txt ... 完成.
------- Committed revision 10 >>>
<<< Started new transaction, based on original revision 11 * 编辑路径 : trunk/design/uml/uml.txt ... 完成.
------- Committed revision 11 >>>
C:\>
内部资料,注意保密 页
第 17 页 共 17

相关主题
相关文档
最新文档