安装 TortoiseSVN 后会在文件和文件夹上覆盖一个表示文件状态的小图标。但是在使用过程中经常出现某些种类的图标覆盖显示不出的现象。具体情况可能出现在安装了 Office Groove, Dropbox 等同样有图标覆盖功能的软件以后。
这是因为 Windows 只允许最多15个图标被覆盖。Windows 使用了其中4个,剩下的11则被其他的应用程序所使用(参见 TSVN 官方 FAQ:不是所有图标都被覆盖)。
修改注册表可以一定程度解决这个问题:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
其实就是调整图标覆盖的顺序,只有前11个才有效果。
注意有三个是微软自带的:EnhancedStorageShell, Offline Files, SharingPrivate(Windows 7 x64)。
如果安装了32位的 TortoiseSVN 则可以在32位程序中显示图标覆盖和菜单,比如 Total Commander 是32位程序,如果安装了64位则不能在其中显示图标覆盖(但是 X64 菜单项可以显示)。但是如果只安装32位的 TortoiseSVN 则在64位的 Windows 7 的资源管理器中看不到图标覆盖。因此,32位和64位的都装能在一定程度上解决这个问题。
Trac 0.12dev 安装记录
by 晓月
参考文档
Trac Installation Guide for 0.12dev
超简易在线安装
因为 Trac 0.12dev 是正在开发的版本,所以它的安装过程需要注意各个组件的版本问题,以下操作在2009年7月6日是可行的,但是如果有某个组件版本升级,可能导致问题。
- 下载 Python 2.5.4,安装到 C:\Python25。
- 下载 setuptools-0.6c9.win32-py2.5.exe,直接运行安装。
- 下载 Setup-Subversion-1.5.6.msi,直接运行安装。
- 下载 svn-python-1.5.6.win32-py2.5.exe,直接运行安装。
- 安装 Genshi,运行:easy_install Genshi==dev
- 安装 Babel,运行:easy_install Babel
- 检出 Trac:svn export https://svn.edgewall.com/repos/trac/trunk trac
- 在 trac 目录运行:python setup.py compile_catalog -f
- 在 trac 目录运行:python setup.py install
- 安装完毕,此时 trac 目录可以删除。
离线安装
在线安装虽然简单方便,但是感觉不太可控,而且重新安装起来比较慢。下面就介绍如何把依赖的包下载到本地。
Genshi 在下载页面只有 0.51 版本,而 Trac 0.12 需要 0.6(r690以上)的版本。因此需要自己手动打包成 egg 文件。
- svn co http://svn.edgewall.org/repos/genshi/trunk genshi
- 在 genshi 目录,运行:python setup.py bdist_egg
- 在 genshi/dist 目录,得到相应的 egg 文件。
Babel 使用下载页面上的 Babel-0.9.4-py2.5.egg 就行。如果从 SVN 检出最新的代码(1.0dev),配置还需要进行比较复杂的操作,参见文档:Setting up Babel from a Subversion Checkout。
Trac 需要在打包之前先编译一下翻译文件,过程类似于在线安装,就是第一步把导出改成检出(为了包含版本信息),最后一步改成打包:
- svn co https://svn.edgewall.com/repos/trac/trunk trac
- 在 trac 目录运行:python setup.py compile_catalog -f
- 在 trac 目录运行:python setup.py bdist_egg
- 在 trac/dist 目录,得到相应的 egg 文件。
这样在安装的时候,使用如下命令即可:
- easy_install Genshi-0.6dev_r1063-py2.5-win32.egg
- easy_install Babel-0.9.4-py2.5.egg
- easy_install Trac-0.12dev_r8345-py2.5.egg
SVN 版本造成的差异
如果,SVN 使用的不是 1.5.x 版本,而是 1.6.x 版本,因为 checkout 格式发生变化,导致 setuptools 无法正确获得版本,详见 Trac Ticket #8365。这就导致安装 Genshi 以后版本号不对,在安装 Trac 会提示:
error: Could not find suitable distribution for Requirement.parse('Genshi>=0.6dev-r960')
因此,如果使用 SVN 1.6.x,目前解决方法是手动修改 egg 包的名称和内部 EGG-INFO 的版本信息。手动版本信息从 0.6dev-r0 修改成类似 0.6dev-r1063,其中 1063 是 SVN 的版本号。或者在安装之后,修改 Python 目录下的 easy-install.pth 文件。
SVN 1.6.3 下载:
一些说明
有版本有"洁癖"的人,相信总喜欢用最新的版本,但是对待类似这种问题,还是老老实实用稳定的版本省心。比如 Python 3.1 都发布,但是因为其各种特性还不稳定(从 3.0-3.1 的变化就能看出),所以很多第三方库都还没有迁移,所以目前我也只能多个版本的 Python 混合使用了。
很多扩展包使用 easy_install 方式(PEAK 开发的新的 Python 扩展包方式)会比较简单,在安装了上面的 setuptools 后在 Python 目录下的 Scripts 目录就有了。
SVN 似乎在 Apache 2.0 和 2.2 版本上有分支,所以根据使用的 Apache 选择合适的版本下载。SVN 安装完成后要设置环境变量。比如 C:\Subversion\ 是安装目录,注意安装完检查是否设置好了环境变量:SET APR_ICONV_PATH="C:\Subversion\iconv"。
svn-python 是 SVN 自身提供的 Python 模块,用来操作 SVN。操作 SVN 的 Python 模块还有 PySVN,不过 Trac 使用的是 svn-python。
修订记录:
2009-07-06:初稿。
安装完 SVN 后如果在命令行运行时出现乱码,则是因为中文编码没有正确配置。在 Windows 系统中,可以设置环境变量:
LANG = zh_CN.UTF8
APR_ICONV_PATH = svn安装目录\iconv
SVN_EDITOR = notepad.exe
如果喜欢英文,也可以把 LANG 设置成 EN_US。至于 iconv 目录存放的是各种编码文件。
还有一个问题,在使用 TortoiseSVN 的时候,可能会遇到这样的错误信息:"璁よ瘉澶辫触",这个明显是编码错误,转换一下就知道是"认证失败"。我 TSVN 的语言包看了下,这里翻译没有错误,看来是 TSVN 程序的一个 bug。
我在使用 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
什么是 TortoiseSVN?
SVN 全名是 Subversion,它是一个开源的版本控制软件,与它类似的软件有 CVS,VSS,ClearCase。只要接触过团队开发,对这类软件肯定不会陌生。而 SVN 作为一个跨平台的开源软件,具有很强的活力,目前也已经相当成熟,很多开源项目都用它来管理文档或是代码。
更为重要的是,不仅仅是团队开发,作为个人独立开发的项目(或者个人想维护的文档)也可以用 SVN 进行管理,而不需要另外一台服务器。
TortoiseSVN 是 SVN 的一个 Windows 外壳扩展应用,它可以帮助用户直观的进行 SVN 的各种操作,而不需要使用命令行。作为个人用户,只要安装 TortoiseSVN 即可,而不用再去安装配置 SVN。
TortoiseSVN 快速入门
下面我就来对 TortoiseSVN 从安装到第一个代码库的建立和使用做一个最简单的介绍。即使对 TortoiseSVN 一无所知,通过下面的操作,也可以初步领略 SVN 管理代码的乐趣。
一,安装
TortoiseSVN 的官方主页:http://tortoisesvn.net,首先下载当前版本的 TortoiseSVN,希望能有中文界面的还可以选择语言包下载。同时在语言包旁边,你还可以看到中文的使用手册。
安装 TortoiseSVN 非常简单,在结束后会提示重启,这是因为 TortoiseSVN 与资源管理器整合,它的图标功能需要重启后才能使用,所以建议这里重启一下。
这个时候,在任何一个文件夹点右键,就会出现如下的菜单:

如果是英文界面,那么在 TortoiseSVN --> Settings 中可以选择语言。TortoiseSVN 的所有操作都是通过右键菜单来完成的。
二,创建版本库
首先,我们要新建一个文件夹来保存 SVN 的数据,比如我们建立了一个空文件夹:"D:\MySVN"。在这个文件夹图标上点击右键,在菜单中选择:在此创建版本库,很快就会提示建立完成。

这个时候,你会发现这个文件夹里面会增加好多文件,它将保存你的用户权限的设置以及所有的代码信息。现在不用管它,按照默认设置就可以很好工作。以后如果要在另外一台机器上修改代码,或者希望别人也能使用你的代码库,只要把这个文件夹复制过去就行。备份也是如此。
注:从网上看早期的教程,那些文章在这一步会提到选择 Berkeley 数据库(BDB)或者本地文件系统(FSFS)。但是从 SVN 1.5 版本开始,已经取消了 BDB 的选择,直接默认的就是 FSFS。
注:为了避免因为多字节字符造成的种种问题,建议把版本库的路径和名字不要含有中文或者空格。这个问题虽然可能随着软件的升级得到解决,不过目前看来,有时还会出问题。不过这个问题仅限于版本库,受管理的代码和目录可以任意取名。
三,检出到工作目录
完成上一步后,我们已经建立了一个代码仓库,下面就是要设置工作目录。工作目录一般来讲,就是存放了当前最新版本的代码,程序的编写和修改都在这个目录完成。比如我们在桌面选择一个文件夹,名叫 Project。在这个文件夹图标上,点击右键,选择:SVN 检出。

然后在版本库 URL 中选择刚才创建的版本库:file:///D:/MySVN,点击确定,就开始从版本库中获取代码了。

自然,因为我们版本库是空的,所有什么代码也没有。如果你打开隐藏文件显示,会发现多了一个 .svn 的文件夹,它存放的是本地文件版本控制的信息,不要删除或者修改它,以后工作目录的每层路径都会有 .svn 文件夹。为了防止误删这个文件夹,我们不显示隐藏文件。
刷新一下桌面,会发现我们的 Project 文件的图标左下角会多出一个绿色的对号,这表明它已经纳入了版本控制。
注:你可以在任何地方多次检出。
四,提交入库
第一次向版本库中加入代码可以使用导入的功能,不过我还是喜欢直接添加文件。比如我向 Project 中复制了几个目录和文件。因为这些文件是新增的,所以自动会用问号来标记。

然后我希望把这些文件存放到代码仓库中,这个时候,在 Project 文件夹内点击右键,选择:SVN 提交,然后勾选"全选",把新增的所有文件都纳入版本控制,点击确定。

五,版本管理
我们开始工作,比如新增文件、修改文件、删除文件,你会发现所有修改过的文件都会有一个红色叹号来标记。当觉得工作进行到一定阶段,有必要保存一下的时候,我们可以再次进行提交。因为现在讲解的是一个人使用,所以很少会再次检出或者进行更新,但这在团队开发中很常用。
如果你发现你这次的修改有问题,想恢复版本库中最新的版本,只要把这个文件删除,并选择更新即可。
在某种情况下,要恢复一个很久之前的版本,这个时候只要点击右键,选择:显示日志,在想复原的版本上点右键,选择:复原到此版本。

通过上面简单的介绍,希望能带大家入门。更多的操作可以参考官方的文档,非常详细。