### 支持多种版本库访问方法
你已经看到了一个版本库可以用多种方式访问,但是可以―或者说安全的―用几种方式同时并行的访问你的版本库吗?回答是可以,倘若你有一些深谋远虑的使用。
在任何给定的时间,这些进程会要求读或者写访问你的版本库:
-
常规的系统用户使用Subversion客户端(客户端程序本身)通过`file:///`URL直接访问版本库;
-
常规的系统用户连接使用SSH调用的访问版本库的**svnserve**进程(以它们自己运行);
-
一个**svnserve**进程―是一个守护进程或是通过**inetd**启动的―作为一个固定的用户运行;
-
一个Apache **httpd**进程,以一个固定用户运行。
最通常的一个问题是管理进入到版本库的所有权和访问许可,是前面例子的所有进程 (或者说是用户)都有读写Berkeley DB的权限?假定你有一个类Unix的操作系统,一个直接的办法是在新的`svn`组添加所有潜在的用户,然后让这个组完全拥有版本库,但这样还不足够,因为一个进程会使用不友好的umask来写数据库文件―用来防止别的用户的访问。
所以下一步我们不选择为每个版本库用户设置一个共同的组的方法,而是强制每个版本库访问进程使用一个健全的umask。对直接访问版本库的用户,你可以使用**svn**的包裹脚本来首先设置**umask 002**,然后运行真实的**svn**客户端程序,你可以为**svnserve**写相同的脚本,并且增加**umask 002**命令到Apache自己的启动脚本`apachectl`中。例如:
~~~
$ cat /usr/bin/svn
#!/bin/sh
umask 002
/usr/bin/svn-real "$@"
~~~
另一个在类Unix系统下常见的问题是,当版本库在使用时,BerkeleyDB有时候创建一个新的日志文件来记录它的东西,即使这个版本库是完全由**svn**组拥有,这个新创建的文件不是必须被同一个组拥有,这给你的用户造成了更多地许可问题。一个好的工作区应该设置组的SUID字节到版本库的`db`目录,这会导致所有新创建的日志文件拥有同父目录相同的组拥有者。
一旦你跳过了这些障碍,你的版本库一定是可以通过各种可能的手段访问了,这看起来有点凌乱和复杂,但是这个让多个用户分享对一个文件的写权限的问题是一个经典问题,并且经常是没有优雅的解决。
幸运的是,大多数版本库管理员不*需要*这样复杂的配置,用户如果希望访问本机的版本库,并不是一定要通过`file://`的URL―他们可以用`localhost`机器名联系Apache的HTTP服务器或者是**svnserve**,协议分别是`http://`或`svn://`。为你的Subversion版本库维护多个服务器进程,版本库会变得超出需要的头痛,我们建议你选择最符合你的需要的版本库,并且坚持使用!
**svn+ssh://服务器检查列表**
让一些用户通过存在的SSH帐户来共享版本库而没有访问许可问题是一件很有技巧的事情,如果你为自己需要在(作为一个管理员)类Unix系统上做的事情感到迷惑,这里是一些快速的检查列表,总结了本小节讨论的事情:
-
所有的SSH用户需要能够读写版本库,把所有的SSH用户放到同一个组里,让版本库完全属于这个组,设置组的权限是读/写。
-
你的用户在访问版本库时需要使用一个健全的umask,确定**svnserve**(`/usr/bin/svnserve`或者是任何一个`$PATH`说明的位置)是一个设置了**umask 002**和执行真正的**svnserve**程序的包裹脚本,对**svnlook**和**svnadmin**使用相同的措施,或者是使用一个健全的umask运行或者是使用上面说明的包裹。
- 第1章介绍
- Subversion的历史
- Subversion的特性
- Subversion的架构
- 安装Subversion
- Subversion的组件
- 快速入门
- 第2章基本概念
- 版本模型
- Subversion实战
- 摘要
- 第3章指导教程
- 导入
- 修订版本: 号码、关键字和日期,噢,我的!
- 初始化的Checkout
- 基本的工作周期
- 检验历史
- 其他有用的命令
- 摘要
- 第4章分支与合并
- 使用分支
- 在分支间拷贝修改
- 常见用例
- 转换工作拷贝
- 标签
- 分支维护
- 摘要
- 第5章版本库管理
- 版本库的创建和配置
- 版本库维护
- 添加项目
- 摘要
- 第6章配置服务器
- 网络模型
- svnserve,一个自定义的服务器
- httpd,Apache的HTTP服务器
- 支持多种版本库访问方法
- 第7章高级主题
- 属性
- Peg和实施修订版本
- 外部定义
- 卖主分支
- 本地化
- Subversion版本库URL
- 第8章开发者信息
- 使用API
- 进入工作拷贝的管理区
- WebDAV
- 使用内存池编程
- 为Subversion做贡献
- 第9章Subversion完全参考
- svn add
- svn blame
- svn cat
- svn checkout
- svn cleanup
- svn commit
- svn copy
- svn delete
- svn diff
- svn export
- svn help
- svn import
- svn info
- svn list
- svn log
- svn merge
- svn mkdir
- svn move
- svn propdel
- svn propedit
- svn propget
- svn proplist
- svn propset
- svn resolved
- svn revert
- svn status
- svn switch
- svn update
- svnadmin
- svnadmin create
- svnadmin deltify
- svnadmin dump
- svnadmin help
- svnadmin hotcopy
- svnadmin list-dblogs
- svnadmin list-unused-dblogs
- svnadmin load
- svnadmin lstxns
- svnadmin recover
- svnadmin rmtxns
- svnadmin setlog
- svnadmin verify
- svnlook
- svnlook author
- svnlook cat
- svnlook changed
- svnlook date
- svnlook diff
- svnlook dirs-changed
- svnlook help
- svnlook history
- svnlook info
- svnlook log
- svnlook propget
- svnlook proplist
- svnlook tree
- svnlook uuid
- svnlook youngest
- svnserve
- svnversion
- mod_dav_svn Configuration Directives
- 附录A.Subversion对于CVS用户
- 目录的版本
- 更多离线操作
- 区分状态和更新
- 分支和标签
- 元数据属性
- 冲突解决
- 二进制文件和转化
- 版本化的模块
- 认证
- 转化CVS版本库到Subversion
- 附录C.WebDAV和自动版本化
- 自动版本化交互性
- Subversion和DeltaV
- 术语表