我在使用 TortoiseSVN 管理个人文档代码中介绍了开源的版本控制软件 Subversion。对个人用户来说使用 TortoiseSVN 就足够了,但对团队开发来说,需要一台服务器保存版本库,以便开发人员访问,所以需要安装 Subversion(不过 TortoiseSVN 仍然可以安装,不冲突)。另外,还需要一个缺陷跟踪系统来管理 Bug,我选择了 Trac。当然,Trac 并不是唯一的选择,能与 SVN 集成的缺陷跟踪系统也有不少,而且 Trac 的 Bug 管理功能有待提高,不过经过对比,我觉得 Trac 是一个不错的选择。
准备工作
因为版本的更新,我列出的都是当前的下载链接,肯定将来会失效,那个时候就从官方网站进入找到相应的版本即可,同时注意版本要协调一致。
从 SVN 网站:http://subversion.tigris.org/ 下载 SVN 相关程序:
- svn-win32-1.5.1.zip:SVN 的主程序
- svn-python-1.5.1.win32-py2.5.exe:SVN 的 Python 接口,安装 Trac 需要这个
从 Python 网站:http://www.python.org/ 下载:
- Python 2.5.2 Windows installer:Trac 是用 Python 开发的
- setuptools-0.6c7.win32-py2.5.exe:管理 Python 包(主页)
从 Trac 网站:http://www.edgewall.org/ 下载:
- Genshi-0.5.win32-py2.5.exe:模板系统(主页)
- trac-0.11.win32.exe :Trac 主程序(主页)
安装
- 解压缩 svn-win32 到目录 C:\SVN15。
- 安装 Python:一路 next 即可,我是安装到了 C:\Python25。
- 安装 svn-python,setuptools,Genshi,trac 这些都会自动识别 Python 目录。
安装结束后,可以将 SVN 下的 bin 目录,以及 Python 下的 Scripts 目录加入到系统 PATH,方便后面的命令行输入。最好重启一下,有一些动态链接库可能需要重启后加载。
配置 Trac 环境
因为我们要把 Trac 与 SVN 整合,因此首先需要有一个 SVN 的版本库,比如 D:\MySVN。假设我们希望在 D:\MyTrac 保存 Trac 的数据,输入:
D:\Python25\Scripts\trac-admin D:\MyTrac initenv
这就开始了一个配置向导,其中红色部分是我的输入,[Enter]表示直接回车:
# 项目名称
Project Name [My Project]> [Enter]
# 数据库
Database connection string [sqlite:db/trac.db]> [Enter]
# 版本库类型
Repository type [svn]> [Enter]
# 版本库地址
Path to repository [/path/to/repos]> D:\MySVN
这个时候,D:\MyTrac 就建立好了 Trac 的环境数据。如果这一步出现了错误,比如提示缺少 ssleay32.dll,重启一下再进行这步即可。
启动 Trac 服务,输入:
D:\Python25\Scripts\tracd.exe --port 8000 D:\MyTrac
在浏览器中输入:http://127.0.0.1:8000/MyTrac,就可以访问建立好的 Trac 页面了。
创建 Trac 密码文件
在上述浏览页面,点击 Login 会提示 Authentication information not available. 因为我们没有使用 Apache,所以需要使用一个 Python 脚本来生成密码文件,这个脚本在 Trac 的官方 Wiki 上:Trac Standalone。这里原文复制,将下面的代码保存为genpsw.py:
from optparse import OptionParser
# The md5 module is deprecated in Python 2.5
try:
from hashlib import md5
except ImportError:
from md5 import md5
# build the options
usage = "usage: %prog [options]"
parser = OptionParser(usage=usage)
parser.add_option("-u", "--username",action="store", dest="username", type = "string",
help="the username for whom to generate a password")
parser.add_option("-p", "--password",action="store", dest="password", type = "string",
help="the password to use")
(options, args) = parser.parse_args()
# check options
if (options.username is None) or (options.password is None):
parser.error("You must supply both the username and password")
# Generate the string to enter into the htdigest file
realm = 'trac'
kd = lambda x: md5(':'.join(x)).hexdigest()
print ':'.join((options.username, realm, kd([options.username, realm, options.password])))
注意红色部分的 trac 这个要与下面命令行输入的红色 trac 保持一致。
# 生成密码
genpsw.py -u admin -p admin >> D:\MyTrac\password.txt# 加入 admin 用户
trac-admin D:\MyTrac permission add admin TRAC_ADMIN# 启动服务
tracd --port 8000 --auth *,D:\MyTrac\password.txt,trac D:\MyTrac
这个时候,就可以用 admin : admin 登陆了。如果希望生成多个用户名和密码,则需要多次运行上述 Python 脚本,其中">>"的含义是追加到文件。这步本质上就是将密码的 md5 保存到本地,之后就用这个进行校验。而上面用到的 "TRAC_ADMIN" 是指管理员权限,这是 Trac 默认设置的一个权限,可以使用 trac-admin D:\MyTrac permission list 列出当前的用户和权限。在使用管理员账号登陆以后,可以方便的修改这些。
将 SVN 与 Trac 作为服务启动
在 Windows 环境下,总是有一个命令行窗口是很碍事的事情,我们希望能把 SVN 与 Trac 作为系统的一个服务,开机就能自动启动。
我们使用一个 Windows 自带的服务配置程序:sc,只要在命令行中输入:
sc create svnserve binPath= "\"C:\SVN15\bin\svnserve.exe\" --service --root D:\MySVN" displayname= "Subversion Repository" depend= Tcpip start= auto
sc create tracserve binPath= "\"C:\Python25\Scripts\tracd.exe\" --port 8000 --auth *,D:\MyTrac\password.txt,trac D:\MyTrac" displayname= "Trac" depend= Tcpip start= auto
然后在服务中开启新加入的两项服务,重启就会发现它们都启动了。删除服务使用:
sc delete svnserve
注:sc 的参数 binPath 要求用双引号括起来,如果路径还有空格,使用转义字符:\",sc 的详细使用可以看帮助。"--auth *" 表示所有项目用相同的账户登陆。"D:\MyTrac" 表示要启动的项目,如果有多个项目用逗号分开即可。
一些高级设置
在 SVN 版本库 D:\MySVN\conf\svnserve.conf,可以设置代码的基本使用权限:
anon-access = read # 设置匿名只有读权限
auth-access = write # 设置登陆用户有写权限
authz-db = authz # 使用 authz 文件中的权限设置
在 Trac 环境设置 D:\MyTrac\conf\trac.ini 中,可以把代码浏览的权限与 SVN 绑定:
authz_file = D:\MySVN\conf\authz
注意到,这个权限绑定和 SVN 目录下面的 svnserve.conf 无关,也就是说,如果在 svnserve.conf 设置了匿名权限为 none,但是在 SVN 下的 authz 文件却没有体现这一点,则 Trac 中的代码浏览可能会允许匿名浏览。
同样在 trac.ini 中,设置字符集可以解决中文显示问题(我设置成 UTF-8 就在浏览代码中的文本时时出现乱码):
default_charset = GBK
如果发现有权限的用户登陆后浏览 SVN 库中的代码(即 Browse Source),会得到 "Insufficient permissions to access" 提示。这时,就要检查 trac.ini 文件里 "authz_file= " 如果设置了例如 D:\MySVN\FirstProj\conf\authz 这样的值,那么就要保证 authz_module_name 的值与 authz 这个文件里的值一致。比如在 authz 文件里作了这样的设置:[FirstProj:/],那么 authz_module_name 就应该等于 FirstProj。
附:参考
- 官方指南:Trac On Windows
发表评论