版本控制之于程序员,就好比安全网之于高空秋千表演者。知道安全网就在那里,万一自己摔落它能够提供保护,高空秋千表演者才能放心大胆地在空中飞跃。同样,版本控制使您有能力去冒以往想都不敢想的风险。如果哪儿出了错,您总是可以使自己的代码回复到一个已知的、工作正常的版本。您可以在不触及主干的分支中进行试验,而不会影响到其他小组成员。在已经发布的产品的较老版本中发现 bug 时,您可以轻松检出特定版本,以确认、修订,并生成该 bug 的修补程序。如果没有版本控制,您必须极为慎之又慎,缓慢地推进,总而言之,生产力会更低。
Subversion 是一种开放源码的全新版本控制系统,支持可在本地访问或通过网络访问的数据库和文件系统存储库。不但提供了常见的比较、修补、标记、提交、回复和分支功能性,Subversion 还增加了追踪移动和删除的能力。此外,它支持非 ASCII 文本和二进制数据,所有这一切都使 Subversion 不仅对传统的编程任务非常有用,同时也适于 Web 开发、图书创作和其他在传统方式下未采纳版本控制功能的领域!
在目前软件开发中越来越提倡团队的开发效率与彼此之间的协作开发,在一个团队里面bug tracker工具是很重要的。软件一定有bug,我们需要一个跟踪bug的工具,谁报告的bug?详细情况怎么样?别人能不能还原?
需要修正吗?优先度?已经修正了吗?开发进度跟踪如何了?等等。需求越多,太全面的功能在实际中也会导致其复杂性,为了减少在这复杂过程出现错误,最近需要在公司部署一个bug tracker,目前可以选择的工具也有不少,比如Bugzilla、JIRA、Mantis、Trac;由于其Trac可以很好的与SVN进行整合,同时还融入了Wiki的功能,其应用性具有很高的优势。
1.
Trac
简介
Trac
是一个为软件开发项目需要而集成了
Wiki
和问题跟踪管理系统的应用平台,是一个开源软件应用。
Trac
以简单的方式建立了一个软件项目管理的
Web
应用,以帮助开发人员更好地写出高质量的软件;
Trac
应用力求不影响现有团队的开发过程。
2.
Wiki
的概念
Wiki 是一个协同写作平台或者称之为开放编辑系统,即它允许所有人修改它的网页。
Wiki 使用了简化的语法,替代复杂的 HTML,加上 WEB 界面的编辑工具,降低内容维护的门槛。Wiki的特点是方便和开放。
Wiki 最适合做百科全书、知识库、整理某一个领域的知识等知识型站点,几个分在不同地区的人利用
Wiki 协同工作共同写一本书等等。Wiki 技术已经被较好的用在百科全书、手册/FAQ编写、专题知识库方面。
本安装基于Windows vista环境下进行安装与配置的,其它windows版本都可用;搭建此项目管理服务器首先必须要安装Apache服务器。
(
1)下载Apache
注意:
Apache低于2.0.54的Windows版本的存在编译问题,低于2.0.54的版本不能与Subversion 1.2一起工作。2.2.X目前不能很好支持SVN 1.4.X。所以当前建议下载
Apache 2.0.63版本
(2) 安装
下载完成后运行
apache_2.0.63-win32-x86-no_ssl.msi ,根据提示进行操作。遇到系统要求输入SERVER的URL时,如果你的服务器没有DNS名称,请直接输入IP地址(此文件也可在安装后进行修改,该文件位于Apache Group/Apache2/conf/httpd.conf文件)。
注意:如果你已经有了
IIS或其他监听80段口的程序,安装会失败,如果发生这种情况,直接到程序的安装目录\Apache Group\Apache2\conf,打开httpd.conf。编辑文件的Listen 80为其他可用的端口,例如Listen 8080,然后重新启动-这样就不会那个问题了,或者将其它应用的端口进行改之。
(
3)检查
(
1)下载 Subversion
在本实例中,选择下载svn-win32-1.4.6.zip此版本.
(2)安装
将svn-win32-1.4.6.zip解压到安装程序的目录下;(如果下载的是exe安装文件,可以根据指导安装, Subversion会自动认识到你安装了Apache,你就几乎完成了工作),本实例中采用解压方式进行安装,它不会自动找到Apache服务器,所以你还有额外的步骤。
(3)后续
步骤1 从svn-win32-1.4.6\bin 中将mod_authz_svn.so mod_dav_svn.so复制到Apache Group\Apache2\modules下,再将svn-win32-1.4.6\bin目录下的所有dll文件全部复制到Apache Group\Apache2\bin文件夹下。
步骤2 找到Apache Group\Apache2\conf\httpd.conf文件,然后去掉如下几行的注释(删除 '#'标记):
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
将下面两行添加到LoadModule部分的最后。
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
进行如上后续修改后完成了SVN+Apache之间的WebDav的工作了。重启Apache以后可看到如下图:
这是安装最终的图,图中状态栏显示Apache/2.0.63(Win32) SVN1.4.6 DAV/2是由于还安装了mod_python,此步骤稍后将在Trac中讲解,如上安装好后应显示为Apache/2.0.63(Win32) SVN1.4.6 DAV.
(
1)建立版本库
首先建立一个用于存在SVN项目的版本库,本例中在D盘驱动器中建立目录var/svnhome,可通过如下命令建立版本库,当然如果你需要建立多个版本库只需将名称进行换名即可。
首先以cmd命令窗口进入svn-win32-1.4.6\bin目录结构下,输入:
>svnadmin create --fs-type fsfs D:/
var
/svnhome/projects
回车,等待提示创建完成;完成后则进行相关密码以及权限设置
。
(2)设置密码文件
以
cmd
命令窗口进入路径
Apache Group\Apache2\ bin
目录
下
,
然后输入
:
>
htpasswd -c D:/var/svnhome/projects/conf/<filename> <username>
本例中
filename
名称使用
passwordfile,username
名称使用
admin(
注意filename无需后缀名),这样
便可在
var/svnhome/projects/conf
目录下创建一个用户名为
admin
的passwordfile
文件
,此文件
将在后面配置权限所用
。
此后添加用户,可使用如下命令:
>htpasswd filename <username>
删除用户,使用如下命令:
>htpasswd -D filename <username>
若对密码不想加密可使用-cp
参数,windows
平台下默认是MD5
加密
(3)设置权限文件
用文本编辑器在var/svnhome/projects/conf
路径下生成名为svnaccessfile的文件,此名称将在
Apache Group\Apache2\conf\httpd.conf
配置文件中所用,此处不使用扩展名。编辑一下内容:
[groups]
committers = admin
developers = Allen
[/]
* = r
@developers = r
@committers = rw
[projects:/]
@
developers
= rw
基本含义是根目录下任何人有读权限,
committers
组有读写权限;admin对projects读写权限,而
developers
组只有读的权限
。
备注:
如果有中文路径,那要把文件存成UTF8格式,不建议使用中文路径,这在编程当中是严格禁止的.
(4)配置服务
编辑
Apache Group\Apache2\conf\httpd.conf
文件,添加下面代码。
<Location /svn>
DAV svn
SVNPath "D:/var/svnhome/projects"
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile " D:/var/svnhome/projects/conf/passwordflie"
AuthzSVNAccessFile "D:/var/svnhome/projects/conf/svnaccessfile"
Require valid-user
SVNAutoversioning on
ModMimeUsePathInfo on
</Location>
备注: 如果使用<Location /svn/>可列出D:/var/svnhome/projects 下的版本库,若为<Location /svn>则不能访问http://127.0.0.1/svn下的项目,而只能这样访问,如http://127.0.0.1/svn/<projectname>
(5)配置内容说明
设置
|
解释
|
<Location>
|
意思是Subversion版本库的URL是http://ipaddress/svn/
|
DAV svn
|
告诉Apache是哪个模块响应那个URL的请求-此刻是Subversion模块。
|
SVNPath
|
告诉Subversion需要查看的版本库位于D:/var/svnhome/projects之下
|
AuthType Basic
|
激活基本认证,就是用户名/密码
|
AuthName
|
用来说明弹出要求输入认证信息的对话框信息,可以使用中文.
|
AuthUserFile
|
指定使用认证密码的文件
|
AuthzSVNAccessFile
|
位置Subversion版本库的访问控制权限的路径文件
|
Require valid-user
|
指定只有输入了正确的用户/密码的用户可以访问URL
|
此工具是客户端软件,主要可以用于从服务器上check版本库项目以及updata与commit等相关SVN的管理操作,其下载地址为:http://tortoisesvn.net/downloads,另外还可以下一个语言包,都在给其的subversion官方网站上能下到.
3.1安装前的准备工作:
注:注意软件的版本及安装的顺序
.
其中有很多软件是可以下到zip包的,但不建议下载包形式文件,因为解压python后有可能不能用,所以建议使用exe安装版的来自动完成识别操作。
1.安装
Python,下载:python-2.5msi,进行默认安装。
2.安装
Genshi模板系统,属于页面表示层,下载Genshi-0.4.4.win32.exe,安装时会识别Python安装目录。
4.安装
PySQLite, 下载pysqlite-2.4.1.win32-py2.5.exe,安装时会识别Python安装目录。PySQLite是SQLite和Python 绑定的轻量级数据库引擎,它是Trac默认的数据库。
3.2安装Trac(0.11dev)
在安装Trac之前,首先要安装
setuptools ,安装步骤如下:在主页中将
ez_setup.py的文件右击另存给下载下来(如保存到D:\python下面),以CMD命令窗口方式进入python该目录执行python ez_setup.py即可安装和python版本对应的setuptools了.
注意:
ez_setup.py
文件最好放在安装
python
的根目录下,这样进入该目录以后就可以直接执行
>python ez_setup.py
命令即可完成setuptools的安装了.
>D:\python\python setup.py install
(
如果trac与python放在同一目录下或者将python增加到path环境变量中,
可直接写成python setup.py install)等待安装完成。
注意:此处不建议在官方网站上下载0.11beta1版,而建议使用上述checked的版本,因为0.11beta1版本安装后可能在创建一个Trac Environment时出现异常现象,所以建议大家使用0.11dev版。
3.3配置Trac环境
完成上述的安装后,就可以创建一个TracEnvironment,它是Trac存储信息的地方,如 wiki pages, tickets, reports, settings 等。
在本例中首先在D盘的var目录下新建一个trachome目录,然后以CMD命令窗口方式进入D: \python\Scripts目录下输入:>trac-admin D:/var/trachome/projects initenv,然后根据提示输入项目的名字(本例中为projects),然后提示询问数据库连接字符串类型,本例中使用的是sqlite,故采用默认就可以了。直接回车接下来是的是:
Please specify the type of version control system,
By default, it will be svn.
If you don't want to use Trac with version control integration,
choose the default here and don't specify a repository directory.
in the next question.
Repository type [svn]>
询问版本库类型,也是默认SVN,直接回车.
Please specify the absolute path to the version control
repository, or leave it blank to use Trac without a repository.
You can also set the repository location later.
Path to repository [/path/to/repos]> D:/var/svnhome/projects
询问源码库位置,这个就是本例中刚才SVN里建立了这个项目的源码库,输入即可。回车.
注意:此处一定要填写正确否则是没法将SVN的版本库与Trac进行联系起来。不过在这里填写错误后还是可以通过配置文件进行修改的。在本例中此配置文件位于: D:\ var\trachome\projects\conf下的trac.ini与trac.ini.sample两个文件,只需将其中srepository_dir值修改成:D:/ var/svnhome/projects即可。
Please enter location of Trac page templates.
Default is the location of the site-wide templates installed with Trac.
Templates directory [D:\Python25\share\trac\templates]>
询问模板路径,这个默认。回车
接下来就是自动生成一系列模板,最后显示Congratulations!完成操作。
然后以cmd命令窗口方式进入D:\ python\Scripts文件夹下输入:
>tracd -p 8080 D:/var/trachome/projects
当看到 Serving on 0.0.0.0:8080 view at http://127.0.0.1:8080/ 时,就表示服务器启动成功了,可以打开浏览器就可以看到svn版本库中的项目资源了,到此实现了Trac与SVN的集成,但还未完成与Apache的集成,下面就带领大家完成这一最后的过程。
3.4Apache+Trac+SVN集成
1
、安装
mod_python
2、配置Apache
配置ModPython
- 在
Apache Group\Apache2\conf
目录下httpd.conf文件中的LoadModule部分最后加入下面一行:
LoadModule python_module modules/mod_python.so
在
Apache Group\Apache2\conf
目录下httpd.conf文件中的最后加入下面内容:
# TRAC
Alias /trac "D:/ trac/cgi-bin/trac.cgi"
<Location "/trac/projects">
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv D:/software_tools/var/trachome/projects
PythonOption TracUriRoot /trac/projects
</Location>
3、配置用户身份的验证
Trac
可以使用
Apache
的身份验证。
- 创建密码文件,如为projects创建密码文件,Allen为用户名:
以cmd命令窗口方式进入到
Apache Group\Apache2\bin
文件夹下输入:
>htpasswd -c D:/var/trachome/projects/conf/trac.passwd Allen
New password: ****#提示输入密码
Re-type new password: **** #再输入一次
Adding password for user Allen
#成功
<Location "/trac/projects/login">
AuthType Basic
AuthName "Projects"
AuthUserFile D:/software_tools/var/trachome/projects/conf/trac.passwd
Require valid-user
</Location>
4、Trac的授权设置
在Trac 0.11以前的版本需要安装WebAdmin插件才能以web的方式管理用户及授权,以后的版本就不在需要了,已经集成了。前面创建的Apache的身份验证,都不具有TRAC_ADMIN权限,下面我们重新创建一个admin用户,然后授予TRAC_ADMIN权限:
#在原来的密码文件中新增一个admin用户
以cmd命令窗口方式进入到
Apache Group\Apache2\bin
文件夹下输入:
>htpasswd -m D:/software_tools/var/trachome/projects/conf/trac.passwd admin
New password: *****
Re-type new password: *****
Adding password for user admin
然后为admin用户授权TRAC_ADMIN
以cmd命令窗口方式进入到python\Scripts目录下输入命令:
>trac-admin D:/software_tools/var/trachome/projects permission add admin TRAC_ADMIN
重新启动Apache服务器完成后再以admin帐号Login,在导航栏的search的最后面就会看到Admin,点击进入可以看到如下效果图:
进行如下授权设置以后,对于Browse Source里面的内容的所有人依然可见,这在权限中是禁止的,所以可以通过将两者配置合并一下,即可达到需要输入用户名和密码的效果,合并后的配置文件内容应为:
# TRAC
Alias /trac "D:/ trac/cgi-bin/trac.cgi"
<Location "/trac/projects">
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv D:/software_tools/var/trachome/projects
PythonOption TracUriRoot /trac/projects
AuthType Basic
AuthName "Projects"
AuthUserFile D:/software_tools/var/trachome/projects/conf/trac.passwd
Require valid-user
</Location>
另外还可以通过var\trachome\projects\conf目录下的trac.ini文件进行版本库的权限控制,将trac.ini中的[trac]项authz_file值修改成与SVN版本控制权限一致。本例中为:
[trac]
authz_file = D:/ var/svnhome/projects/conf/
svnaccessfile
此时在没有登陆的情况下Browse Source项的内容是无法查看的,提示用户Insufficient permissions to access权限不够,此方法同样也实现了权限的控制。
如何实现与Eclipse中的mylyn插件进行结合使用呢?还需要安装以下这两个插件accountmanagerplugin与xmlrpcplugin此插件,
此命令进行安装,首先要先安装setuptools工具然后进入python/script目录下运行
当
accountmanagerplugin
安装完以后,需要进行一些配置,打开
trac.ini
在最后加入如下内容
:
[components]
webadmin.* = enabled
acct_mgr.htfile.HtPasswdStore = enabled
acct_mgr.admin.AccountManagerAdminPage = enabled
acct_mgr.web_ui.AccountModule = enabled
trac.web.auth.LoginModule = disabled
acct_mgr.web_ui.LoginModule = enabled
acct_mgr.web_ui.RegistrationModule = enabled
[account-manager]
; configure the plugin to store passwords in the htpasswd format:
password_format = htpasswd
; with Trac 0.10 use this instead:
password_store = HtPasswdStore
; the file where user accounts are stored
; the webserver will need write permissions to this file
; and its parent folder
password_file = D:/var/trachome/projects/conf/trac.passwd
至此,Apache+SVN+Trac的集成到此完毕了
备注:如果启动时出现错误的话,可将
将svn-win32-1.4.6\bin目录下的所有dll文件全部复制到Apache Group\Apache2\
cgi-bin
目录下,另将下载下来的D:\trac\目录下的cgi-bin文件夹内容复制到Apache Group\Apache2\
cgi-bin
目录下.
本实例课程详解到此结束,在接下来的工作后期将会推出关于如何与Eclipse中进行协同工作开发的课程!