| 作者: | 北京群英汇信息技术有限公司 |
|---|---|
| 网址: | http://www.ossxp.com/ |
| 版本: | 0.5-9 |
| 日期: | 2010-08-09 22:37:22 |
| 版权信息: |
pySvnManager 是群英汇开发的一个 Subversion 的管理后台,是用 Python 写的一个 Web 应用。具体的说,pySvnManager 是用 Pylons,一个 Python 的 Web 框架开发的。 pySvnManager 是用于管理 SVN 授权文件的, 只需要一个 SVN 授权文件即可工作,并且使用扩展的 SVN 授权文件进行 pySvnManager 本身的授权,而无须借助于诸如数据库等其它方式。
pySvnManager 本身使用 Python setuptools 进行打包,因此可以像安装其它 Python 包一样, 使用 easy_install 安装。此外,就像其它群英汇软件包一样,可以直接使用 Debian 或 Ubuntu 本身的包管理器进行安装。
两种安装方式的区别是:
Debian/Ubuntu 软件包安装两步曲:update, install
$ sudo aptitude update $ sudo aptitude install pysvnmanager
整个安装过程完全是自动化的。
安装 pysvnmanager 过程中,会自动安装相关依赖软件包:
$ sudo aptitude install pysvnmanager
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
正在读取扩展状态文件... 完成
正在初始化软件包状态... 完成
正在读取软件集说明档... 完成
下列“新”软件包将被安装。
pysvnmanager python-beaker{a} python-decorator{a} python-docutils{a} python-mako{a} python-pybabel{a} python-pygments{a} python-pylons{a}
python-roman{a} python-routes{a} python-sqlalchemy{a} python-tempita{a} python-weberror{a} python-webhelpers{a}
0 个软件包被升级,新安装 14 个,0 个将被删除, 同时 832 个将不升级。
需要获取 5,172kB 的存档。解包后将要使用 23.0MB。
您要继续吗?[Y/n/?]
自动在目录 /opt/pysvnmanager/sites/default/ 下配置缺省实例
服务开启自动启动
Note
新版本的 pySvnManager 不再需要启动服务
新版本的 pySvnManager 采用 WSGI 方式运行,而不再使用类似 Tomcat/Apache 的反向代理的方式整合 pySvnManager。
如果仍然通过 /etc/init.d/pysvnmanager 脚本启动服务,请尽快切换到 WSGI 方式运行。既可以保证服务的稳定性,又可以支持单点登录。
自动完成和 Apache 的整合
如果作为群英汇的用户,使用 Debian/Ubuntu 包管理安装 pySvnManager,可以完全不用理会后面介绍的安装模式,直接跳转到后面的配置章节。
pySvnManager 本身使用 setuptools 的部署机制,并且在 PYPI 网站上进行了注册,因此可以使用 easy_install 进行安装。
$ easy_install pysvnmanager Searching for pysvnmanager Reading http://pypi.python.org/simple/pysvnmanager/ Reading https://sourceforge.net/projects/pysvnmanager Reading http://pysvnmanager.sourceforge.net Best match: pySvnManager 0.4.1dev-r140 Downloading http://pypi.python.org/packages/2.5/p/pySvnManager/pySvnManager-0.4.1dev_r140-py2.5.egg#md5=7d7064d4c79ab408e0b852fbb2427809 ...
整个安装过程会自动安装依赖的软件包。如果需要直接安装在 Python 的系统目录 /usr/lib/python2.5/site-packages 下,则用 root 用户身份执行 easy_install。
和使用 Debian/Ubuntu 软件包安装方式不同,使用 easy_install 只是将 pySvnManager 作为一个 Python 包安装在系统中,而尚未创建一个可用的站点。因此在使用前需要进一步的配置。
创建一个目录,用于存储 pySvnManager 管理网站
$ mkdir somedir $ cd somedir
生成一个 pySvnManager 站点配置文件
示例中的 pySvnManager 是通过 virtualenv 方式安装的,关于 virtualenv 可以参照下一节
$ paster make-config pysvnmanager production.ini Distribution already installed: pySvnManager 0.4.1dev-r140 from /home/jiangxin/virt/lib/python2.5/site-packages/pySvnManager-0.4.1dev_r140-py2.5.egg Creating production.ini Now you should edit the config files production.ini
初始化 pySvnManager 站点
$ paster setup-app production.ini Running setup_config() from pysvnmanager.websetup
初始化后的文件和目录:
运行服务
$ paster serve production.ini Starting server in PID 1618. serving on 0.0.0.0:5000 view at http://127.0.0.1:5000
先不要着急用浏览器访问,因为我们尚未配置登录的认证用户和授权
我们会在后面的配置章节介绍
Pylons 是一个 python 的 MVC 框架,pySvnManager 就是基于这个框架开发的。这个框架所依赖的各个组件都用独立的 python 包发布,在前几年的版本演化过程中,新版本总是带来各样的兼容性问题,也很难保证在今后不会出现向后兼容问题。
再有一个就是 Python 包多版本共存问题。不像 Ruby 的 gem 包,可以同时安装多个不同版本,并且通过依赖关系可以明确版本,Python 包只能安装一个版本。如果有不同的应用都使用了同一个包,例如,一个应用只能运行于 Pylons 0.9.7,另外一个应用只能运行在 Pylons 的新版本 1.0 上,难道两个应用要部署在不同的服务器上么?
Python 可以用 virtualenv 工具包解决多版本共存问题。相当于在某个目录下建立一个隔离的 Python 环境,这个环境有独立的 python 命令,独立的 easy_install 命令,独立的 python 库目录...
为了防止当 Pylons 框架升级后,造成 pySvnManager 不能运行,用 Debian/Ubuntu 安装的 pySvnManager 预留了 virtualenv 的接口。 即一旦在 /opt/pysvnmanager/virtualenv 下部署了虚拟的 python 环境,则使用该环境下的 python 包。
下面演示如何在 /opt/pysvnmanager/virtualenv 下部署虚拟 python 环境:
先建立一个与外界完全隔离的 virtualenv 环境
# virtualenv --no-site-packages /opt/pysvnmanager/virtualenv/ New python executable in /opt/pysvnmanager/virtualenv/bin/python Installing setuptools............done.
用 source 命令引入脚本,即将 virtualenv 环境带入到当前环境中
可以看到,当运行成功后,命令行的提示符有了变化,用 (virtualenv) 前缀标明当前运行环境是 virtualenv 隔离的 python 环境。
# source /opt/pysvnmanager/virtualenv/bin/activate (virtualenv)hp:/opt/pysvnmanager#
看看 easy_install 命令位置?不再指向系统目录,而是来自虚拟环境下的 bin 目录了。
# which easy_install /opt/pysvnmanager/virtualenv/bin/easy_install
安装 pySvnManager 依赖的第三方 python 包
说明:为了快速安装,在运行 easy_install 命令时,指定了公司内部的 PYPI 镜像
# easy_install --index-url http://pypi.bj.ossxp.com/ --find-links http://pypi.bj.ossxp.com/ --allow-hosts *.bj.ossxp.com Pylons==1.0 Searching for Pylons==1.0 Reading http://pypi.bj.ossxp.com/ Reading http://pypi.bj.ossxp.com/Pylons/ Best match: Pylons 1.0 Downloading http://pypi.bj.ossxp.com/Pylons/Pylons-1.0.tar.gz#md5=b7687e26d0275eaf7bf44ca4883f4428 Processing Pylons-1.0.tar.gz Running Pylons-1.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-FEwvFt/Pylons-1.0/egg-dist-tmp-BJ7NQH Adding Pylons 1.0 to easy-install.pth file Installed /opt/pysvnmanager/virtualenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg Processing dependencies for Pylons==1.0 ...
删除或者重命名文件 /opt/pysvnmanager/virtualenv/lib/python2.5/no-global-site-packages.txt 文件
如果删除文件 no-global-site-packages.txt,则 virtualenv 初始化环境的时候,会将系统的 Python 环境路径追加在环境路径的最后。 这样就能够在虚拟环境中访问到 python subversion binding 以及其它第三方 python 包
$ mv /opt/pysvnmanager/virtualenv/lib/python2.5/no-global-site-packages.txt \
/opt/pysvnmanager/virtualenv/lib/python2.5/with-global-site-packages.txt
Hint
pysvnmanager-deploy-virt 软件包
如果安装了 pysvnmanager-deploy-virt 软件包之后,上述建立 virtualenv 环境的操作可以简化为一条命令:
$ sudo make -C /opt/pysvnmanager/virtualenv all
RCS 提供文件级的版本控制工具。pySvnManager 使用 RCS 工具包对 svn.access 文件进行版本控制。
安装完毕后,还需要为 pySvnManager 实例配置认证和授权等。对 pySvnManager 实例进行配置,就是针对实例下的各个配置文件进行相应的编辑操作。对于使用 Debian/Ubunt 包管理器安装,缺省实例的路径在 /opt/pysvnmanager/default 目录下。
pySvnManager 应用的启动配置文件是一个 ini 文件。一般对于生产环境,常常使用名为 production.ini 的配置,开发平台使用 development.ini,不过该配置文件的文件名实际上没有限制。
该配置文件中,关键的设置有:
服务端口,缺省为 5000
[server:main] use = egg:Paste#http host = 0.0.0.0 port = 5000
配置文件位置
# authn_file: a .htpasswd style password file, used for pysvnmanager authentication. authn_file = %(here)s/config/svn.passwd # authz_file: svn authz config file with administrative extension. (ossxp.com) authz_file = %(here)s/config/svn.access # svn repository root path repos_root = %(here)s/svnroot
其中
与 Apache 整合设置
与 Apache 整合,往往要将 pySvnManager 实例至于某个目录之下,就需要在配置文件中增加中间件过滤器的配置。这主要是由名为 proxy-prefix 的过滤器实现的。
缺省该 ini 文件的主要的配置都是在 [app:main] 小节中,对于 Debian/Ubuntu 包管理器安装的缺省实例,则自动配置了过滤器管道,实现 Apache 带前缀的 URL 和 pySvnManager 不带前缀的 URL 之间的映射。 如下面所示,[app:main] 小节被改名为 [app:myapp],增加了 [filter:proxy-prefix] 小节和 [pipeline:main] 小节。
[app:myapp] use = egg:pySvnManager ... [filter:proxy-prefix] use = egg:PasteDeploy#prefix prefix = /svnadmin [pipeline:main] pipeline = proxy-prefix myapp
数据库相关
从 pySvnManager 0.5 之后的版本开始,引入了数据库支持,例如通过数据库实现和 LDAP 用户帐号信息的同步,存储用户相关信息。
缺省使用 sqlite 数据库,减少管理负担。无须手动创建数据库,在 pySvnManager 运行时,会根据需要自动创建数据库。在 ini 文件中可以通过对 sqlalchemy 的设定,指定 sqlite 数据库文件的位置。
# SQLAlchemy database URL sqlalchemy.url = sqlite:///%(here)s/db/production.db
如果没有在 ini 文件中指定 sqlite 数据库位置,会使用缺省的设置,即数据库保存在 db/fallback.db 中。
主要是通过该配置文件进行认证方式的设置。该配置文件是对 pySvnManager 全局配置 DefaultConfig 的定制,因此除了认证相关的设置外,所有 DefaultConfig 类中的配置都可以在此文件中进行覆盖。
注意:此文件为 python 格式的文件,编辑要遵照 python 语法,对于不了解 python 的用户切记不要擅自改动缩进,格式美观的就是正确的。
缺省使用 svn.passwd 口令文件进行认证。在 config/localconfig.py 中的缺省配置就是使用口令文件进行认证:
from pysvnmanager.model.auth.http import htpasswd_login auth = [htpasswd_login]
缺省的口令文件是 config/svn.passwd 文件,可以用工具 htpasswd 对口令进行维护
添加新用户并创建口令
$ htpasswd config/svn.passwd jiangxin New password: Re-type new password: Adding password for user jiangxin
修改用户口令
$ htpasswd config/svn.passwd jiangxin New password: Re-type new password: Updating password for user jiangxin
删除用户
$ htpasswd -D config/svn.passwd jiangxin Deleting password for user jiangxin
修改 config/localconfig.py,将认证方式设置为 ldap_login,示例如下:
import ldap from pysvnmanager.model.auth.ldap_login import ldap_login auth = [ldap_login] # LDAP login parameters ldap_uri = 'ldap://localhost' ldap_base = 'dc=foo,dc=bar' ldap_filter = '(&(uid=%(username)s)(authorizedService=svn)(ossxpConfirmed=TRUE))'
Note
用户同步功能仅在配置了 LDAP 认证之后才能生效
用户同步功能可以实现从 LDAP 服务器进行用户信息查询。即在角色管理和授权时, 看到的用户帐号将不再是一个帐号ID,而可以显示出用户的全名或者其它用户信息。
当然不是所有通过认证的用户都能够访问 pySvnManager 并管理授权,必须是指定的管理员才能够访问。pySvnManager 使用扩展的 SVN 授权文件来为自身授权。
缺省的 config/svn.access 授权示例:
# version : 0.2.1 # admin : / = &admin, root # admin : repos1 = @admin [groups] admin = &admin, root [aliases] admin = jiangxin [/] @admin = rw [repos1:/] @admin = rw
其中该文件头部以井号开始的注释用于对版本库管理者进行授权。
第一行标明当前配置文件的版本号,每次更改配置文件,版本号末尾数字自动加一
后续的注释行以 admin 关键字标识,是版本库管理者授权
第二行是对根版本库(/)进行授权。后面用逗号分割的用户列表是超级管理员,可以管理任何版本库
示例中是 别名为admin 的用户以及登录名为 root 的用户,拥有超级管理员权限
第三行是对名为 repos1 的版本库进行授权,属于 admin 用户组的用户,对 repos1 版本库具有管理权限
手动编辑该文件,设置超级管理员帐号。
Debian 包管理器方式安装,使用 WSGI 方式运行,无须启动 5000 端口的服务。
对于 Debian 包管理器方式安装,打开浏览器,输入 SVN 虚拟主机下的 /svnadmin 地址,如:https://svn.moon.ossxp.com/svnadmin/ 。
如果使用 easy_install 方式安装,缺省需要启动服务。python 内置Web服务,缺省运行在 5000 端口。
对于 easy_install 安装并用 paster 部署的实例(架设部署配置文件为 production.ini)
$ paster serve production.ini
检查 5000 端口是否启动
$ sudo netstat -ltnp | grep 5000 tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 2906/python
log 目录下的日志,可以在服务无法运行时,对错误进行诊断
打开浏览器,访问 pySvnManager 站点
对于未与 Apache 整合的实例,直接用浏览器访问服务器的 5000 端口。在弹出的登录窗口中输入管理员用户名和口令。
点击 “版本库管理” 标签,显示版本库管理界面。
再点击页面内的 “添加版本库” 的链接,进入版本库添加界面。如下图:
输入版本名称,点击“创建版本库”,完成版本库创建。
注:对于刚刚创建的版本库(尚未包括任何提交),可以通过界面提供的删除版本库功能,将新创建的空的版本库删除。对于包含数据的版本库,则不能通过 pySvnManager 的界面删除。
版本库刚刚建立完毕,管理员需要对新建立的版本库进行设置工作。点击 “版本库管理” 标签,在版本库下拉列表中选择要配置的版本库,显示如下界面。
SVN 新版本(1.5之后),提供了合并追踪功能,如果使用老版本的客户端提交,会破坏该功能。这个插件用于对客户端进行强制检查,如果版本太低,禁止提交。
在尚未安装的插件列表中选择:“客户端版本检查” 插件,会看到关于该插件的说明:
点击“安装此插件”,完成该插件的安装。
该插件将本版本库设置为一个只读的版本库,即除了一个预设帐号外,其他人不能进行提交。当需要设置版本库为某个主版本库的镜像,就会用到该插件。
该插件的配置界面如下
SVN 本身在对文件版本控制时,对文件名大小写敏感,就是说允许存在同名(仅是大小写不同)的文件存在。有的操作系统如 Windows,本身不对文件名大小写进行区分,当不同开发者提交了同名仅大小写不同的文件或目录时,会造成本地文件相互覆盖等等奇怪的冲突现象。
对于 Windows 下开发环境下的版本控制,必须安装此插件。
在尚未安装的插件列表中选择:“检查大小写引起的文件名冲突” 插件
点击“安装插件”,完成安装
该插件用于对提交说明进行检查,如果不写提交说明,或者提交说明的长度不足,或者提交说明没有包含预设的内容,禁止提交
在尚未安装的插件列表中选择:“提交说明检查” 插件
对插件进行相关配置
点击“安装插件”,完成安装
不同的操作系统下,文件的换行符不同,例如 Unix/Linux 下的换行符是 LF,而 Windows 上是 CRLF。对于有可能跨平台开发的项目,不对文件统一换行符设置,会给工作协同带来困难。
在尚未安装的插件列表中选择:“文件类型和换行符检查” 插件
当选择严谨模式时,必须为每一个新提交的文本文件设定 svn:eol-style 属性,否则禁止提交
当选择宽松模式时,如果新提交的文本文件本身的换行符就是 Linux 风格换行符,则对该文件忽略 svn:eol-style 检查,因为毕竟强制 svn:eol-style 检查,会让 SVN 新手感到厌烦。
点击“安装插件”,完成安装
Mantis 是一款缺陷跟踪软件,本插件用于将版本库提交关联到 Mantis 中。
和 Mantis 整合除了安装本插件外,还要求 Mantis 和 Subversion 部署在同一个服务器中,并且可能需要调整该插件中 Mantis 的安装路径。
![]()
整合 Mantis 插件的安装界面
Trac 是一款缺陷跟踪软件,本插件用于将版本库提交关联到 Trac 中。
和 Trac 整合除了安装本插件外,还要求 Trac 和 Subversion 部署在同一个服务器中,并且需要对 Trac 环境进行相关设置。
![]()
整合 Trac 插件的安装界面
该插件用于配置 SVN 提交后的通知邮件发送。
安装/配置界面如下:
邮件通知的配置只有一个输入框用于录入命令行参数
"-m" 参数后面的正则表达式,用于对变更集中的路径进行匹配。每个 "-m" 参数后可以跟随一系列对邮件进行定制的参数,并跟随一个邮件通知地址。
邮件通知的地址最好采用邮件列表的地址,这样可以实现存档以及群发邮件。
如果代码内部不能公开,最好加上 "--diff no" 参数,避免代码补丁出现在通知邮件中。
本例的 "-m" 参数后面的正则表达式为一个点,".",含义为任何路径变更都匹配
即所有提交都发送通知邮件给列表 "repos1-commitlist.moon.ossxp.com",回复邮件会发到另外一个讨论列表 "repos1-discusslist.moon.ossxp.com",邮件中包含代码变更内容。
-m . --from noreplymoon.ossxp.com -r repos1-discusslist.moon.ossxp.com --diff y repos1-commit@list.moon.ossxp.com
只有启用该插件,才能允许修改历史提交的提交说明。
注意:修改历史版本的提交说明是不可逆操作,必须在配置了邮件通知之后再启用本插件。
安装界面如下:
版本属性修改后,和缺陷跟踪系统原有关联可能需要重建,可以参考博客:
在为版本库实施授权之前,规划好角色配置,会简化授权操作,起到事半功倍的效果。角色包含团队和别名。
还有三个特别的角色,这三个特别的角色是系统内置,不能更改的:
缺省 pySvnManager 是读取 SVN 授权文件,从该授权文件中获取用户名单并显示。 例如没有进行 LDAP 用户帐号同步之前,在权限检查的用户列表中,只能看到用户登录ID, 而看不到用户 ID 对应的用户名,而且看到的用户帐号很少(只有在 SVN 授权文件中引用的用户帐号才能显示)
如果为 pySvnManager 配置了 LDAP 认证,则在角色管理界面增加了一个 “和LDAP用户同步” 按钮,点击该按钮,可以实现和 LDAP 同步用户名单。
同步结束之后,涮新页面,看到 pySvnManager 的用户清单变得更长了(SVN授权文件没有引用的用户被显示出来),用户的姓名和用户ID一并显示(用户姓名正是来自于 LDAP 中的数据)
在 pySvnManager 的角色管理,授权管理等页面,都可以利用LDAP同步的信息更好的显示用户帐号。
在“角色管理”页面中,有两个图片按钮分别用于创建“新用户组”和“新别名”。
点击“新用户组”,显示创建新用户组界面。
在“角色管理”页面的角色下拉框中,选择要编辑的团队名称,进入团队编辑界面,如下:
编辑团队成员列表的对话框的使用方法和创建新团队的对话框使用方法相同。
在编辑结束后,不要忘记点击“保存”按钮。
如果点击“删除” 按钮,将从角色中删除该团队,在删除之前,会弹出警告对话框。
在“角色管理”页面中,有两个链接分别用于创建“新用户组”和“新别名”。
点击“新别名”,显示创建新别名界面。
在“角色管理”页面的角色下拉框中,选择要编辑的别名名称,进入别名编辑界面,如下:
编辑别名的对话框的使用方法和创建新别名对话框使用方法相同。
在编辑结束后,不要忘记点击“保存”按钮。
如果点击“删除” 按钮,将从角色中删除该别名,在删除之前,会弹出警告对话框。
权限控制是用于对 Subversion 版本库进行精细授权。点击菜单中的“权限控制”进入权限控制的页面:
在版本库下拉列表,可以看到版本库列表。在实例中的版本列表中包含三类版本库,缺省版本库(/),带 ! 符号标识的版本库,用 ? 符号标识的版本库。
带有感叹号 "!" 标识的版本库
这样的版本库,是尚未建立授权的版本库。该版本库已经存在,但是尚未授权。在版本库列表中点击该版本库,为其建立授权。
带有问号 "?" 标识的版本库
这样的版本库,是已经删除或者尚未建立的版本库。已经存在对该版本库的授权,但是该版本库尚不存在。
为了避免在版本库建立和权限分配之间的授权真空,可以先建立版本库授权,再创建版本库,这样就会存在带有问号的版本库,提示该版本库尚未创建。
名为 "/" 的版本库
"/" 版本库并不和任何具体的物理版本库相对应,而是指代缺省的版本库。该缺省版本库的设置有着特殊的含义
"/" 版本库的管理员,是超级管理员,能够管理所有的版本库设置,并能够创建新版本库
版本库管理员可以设置多个,用逗号分隔。以 & 开头的是别名,以 @ 开头的是用户组
"/" 版本库的模组权限,是该路径(模组)的缺省权限。当版本库没有针对该模组进行具体的权限配置时,使用该权限
在权限控制的界面的版本列表中选择一个版本库,便进入到版本库授权编辑界面。
在 ① 处填写版本库管理员名称,缺省为空
管理员列表可以是逗号分隔的多个管理员,以 & 开头的是别名,以 @ 开头的是用户组
模组选择对话框 ② 。当选择某个模组,则进入该路径的授权编辑界面
如果点击链接 ③ ,将显示新模组路径输入框,在输入框输入新模组的路径
如 /trunk, /branches, /tags 等等
ACL 列表框 ④ ,是对应模组路径的授权
如果需要从 ACL 列表中删除授权,则在该列表中选择授权,然后点击 ⑨ 删除授权
列表 ⑤ 是备选角色列表,从该列表中选择角色,然后在 ⑦ 中选择合适的授权类型,然后点击 ⑧ ,将新授权加入 ACL 列表中
如果用户名在备选列表中不存在,可以直接在输入框 ⑥ 中输入用户ID
编辑结束后别忘了保存
在权限控制的界面中,有“新版本库”的链接,注意此“新版本库”和“版本库管理” 中的“添加版本库”不同。
这里的“新版本库”仅仅是建立建立一个新的版本库授权,而并不创建版本库本身。这个功能存在的目的是为了避免版本库建立后和权限分配前的授权真空,管理员可以先建立版本库授权,之后,再进入“版本库管理”界面创建版本库。
建立新版本库授权的界面如下:
删除版本库授权,必须一一对要该版本库的模组的授权一一删除,并将该版本库的管理员列表设置为空。
Subversion 的版本库授权模型较为复杂,而且存在路径的递归以及缺省版本库授权的递归,使得授权变得非常复杂,容易出错。
为了避免错误的授权,本软件还提供权限检查功能。实际上登录后的首页就是权限检查界面。
选择角色,选择版本库,选择模组(不选择则检查所有模组),之后点击“权限检查”,会显示检查结果。
pySvnManager 支持多用户同时读取 SVN 认证信息,检查授权等,但同一时刻,只能有一个管理员编辑授权文件并保存。pySvnManager 能够发现编辑冲突,避免多人同时修改授权时造成授权的相互覆盖。
pySvnManager 为每次 SVN 授权文件的修订都分配唯一的版本号,在管理员修改并保存配置时,会检查授权文件的版本号自动上次读取以来是否有变更,如果有变化,说明有其它管理员在期间修改过配置文件。对于这种情况,pySvnManager 会识别出潜在的修改冲突,并拒绝提交。
您当然可以手动更改授权文件。有的情况,例如在 pySvnManager 刚刚部署,您必须手动编辑授权文件,将自己加入到超级管理员列表中。有的情况下,使用图形界面授权,显得非常繁琐,如果直接用编辑器编辑 SVN 授权文件,可能会更加有效率。
但是直接手动修改配置文件是有风险的。错误的语法,用户组递归引用,未定义用户组就先引用等错误,会导致 SVN 禁止访问。pySvnManager 提供了一个机制,可以避免由于手工修改配置文件,造成配置文件错误导致 SVN 不能访问。
当手工完成 SVN 授权文件的修改后,访问 pySvnManager 网站,会在页面中显示警告,如下图。
点击警告信息中的“保存”链接,会重新保存 SVN 授权文件,解决配置文件中可能出现的配置错误、组循环嵌套、角色未定义等等。