|
|
51CTO旗下网站
|
|
移动端

如何进行SVN源码管理专家支招

在学习SVN的过程中,你知道如何集成SVN源码管理和Mantis缺陷跟踪吗?本文就像大家介绍一下集成的方法,欢迎大家一起来学习有关SVN源码管理。

作者:rosy123来源:csdn.net|2010-06-02 10:10

本节和大家一起学习一下如何集成SVN源码管理和Mantis缺陷跟踪 ,目前SVN用处越来越广,它不仅可以在多个操作系统中搭建还可以跟多种程序整合,下面就让我们一起来看一下集成SVN源码管理和Mantis缺陷跟踪的方法吧。

集成SVN源码管理和Mantis缺陷跟踪
首先在TortoiseSVN里设置一下项目的属性,右键点击目录,属性,在subversion一栏里,加入这几个属性
bugtraq:label = issue
bugtraq:url = http://%3cmantisserver%3e/mantis/view.php?id=%BUGID%
bugtraq:message = issue %BUGID%
bugtraq:warnifnoissue = true

到对应的SVN版本库里,找到hooks目录,建立一个post-commit.bat文件,将以下内容拷入:

REM Post-commit hook for MantisBT integration
rem REPOS svn版本库的路径
rem REV 版本信息
rem DETAILS_FILE 是版本库的目录,在版本库目录下建立一个log的目录,用来存放日志
rem set PHPRC=D:EasyPHPapache 默认会使用windows 目录下的 php.ini 修改后,读取 easyphpapach 目录下

rem 拷贝了 checkin.php 进行修改,重新命名 为 checkin_svn.php 如果有中文传输,需要修改 checkin_svn.php
rem 增加抓换函数 $t_comment = mb_convert_encoding($t_comment, "utf-8","GB2312");
rem 修改位置在 “ foreach ( $t_issues as $t_issue_id ) { ”前面
rem mb_convert_encoding 此函数需要扩展文件php_mbstring.dll的支持~~ 
rem $t_comment   = iconv("UTF-8","GB2312//TRANSLIT",$t_comment);  据说这个编码转换效率更高

  1. SET REPOS=%1  
  2. SET REV=%2  
  3. SET DDETAILS_FILE=D:svnno1logsvnfile_%REV%  
  4. SET LOG_FILE=D:svnno1logsvnfile_%REV%_Log  
  5. set APR_ICONV_PATH=D:EasyPHPSubversioniconv  
  6. set PHPRC=D:EasyPHPapache  
  7. set path=%path%;D:EasyPHPphp5;D:EasyPHPSubversionbin;  
  8.  
  9. echo ****** Source code change ******>>%DETAILS_FILE%  
  10.  
  11. echo SVN 修改人: >>%DETAILS_FILE%  
  12. svnlook author -r %REV% %REPOS%>>%DETAILS_FILE%  
  13.  
  14. echo SVN 修改日期: >>%DETAILS_FILE%  
  15. svnlook date -r %REV% %REPOS%>>%DETAILS_FILE%  
  16.  
  17. echo SVN 版本:  >>%DETAILS_FILE%  
  18. echo %REV%>>%DETAILS_FILE%  
  19.  
  20. echo SVN 提交注释: >>%DETAILS_FILE%  
  21. svnlook log -r %REV% %REPOS%>>%DETAILS_FILE%  
  22.  
  23. echo SVN 修改明细: >>%DETAILS_FILE%  
  24. svnlook diff -r %REV% %REPOS%>>%DETAILS_FILE%  
  25.  
  26. rem php.exe .checkin_svn.php 信息文件日志文件  
  27. php.exe D:EasyPHPwwwmantiscorecheckin_svn.php <%DETAILS_FILE%>%LOG_FILE%  
  28.  
  29. del %DETAILS_FILE%  
  30. del %LOG_FILE%  
  31.  

***,修改mantis安装目录下的config_inc.php,加入以下内容(mantis系统里要有SVN用户):

$g_source_control_notes_view_status = VS_PUBLIC;
 $g_source_control_account = 'SVN';
 $g_source_control_set_status_to = OFF;
 $g_source_control_regexp = "/bissue [#]{0,1}(d+)b/i";

完成这些步骤后,就可以在SVN提交新版本时,同时发布内容到对应的缺陷跟踪系统了。

比如,修改了一个源文件,svn commit时,在右上的issue栏目里输入要提交到的具体的 issue/bug  编号,
 然后在下面的message框内输入具体的描述,svn的hook就会自动往mantis里对应的条目里写入你提交时输入的这些内容。

完成以上工作后集成SVN源码管理和Mantis缺陷跟踪使用过程中还存在一些问题
1、缺陷号没有强制输入,如果没有输入缺陷号,仍然可以提交
2、输入了错误的缺陷号,系统仍然提交,但是缺陷系统中没有相关的内容
解决这个问题,需要在提交前,对缺陷信息进行校验。

一、创建 pre-commit.bat 校验缺陷号

REM pre-commit.bat hook for MantisBT integration
set REPOS=%1
set TXN=%2
SET DETAILS_FILE=D:svnno1logsvnfile
SET LOG_FILE=D:svnno1logsvnfile_Log
set APR_ICONV_PATH=D:EasyPHPSubversioniconv
set PHPRC=D:EasyPHPapache
set path=%path%;D:EasyPHPphp5;D:EasyPHPSubversionbin;

rem 把注释信息写入到 DETAILS_FILE
svnlook log "%REPOS%" -t "%TXN%"  >>%DETAILS_FILE%

rem 执行checkin_svn_pre_commit.php 进行校验缺陷单号 是否在缺陷系统中存在,如果不存在,返回输出信息到 log_file中
php.exe D:EasyPHPwwwmantiscorecheckin_svn_pre_commit.php <%DETAILS_FILE%>%LOG_FILE%

rem 校验log_file中是否有内容,如果有内容,转入到出错提示
FOR /F "tokens=1,2* delims= " %%i in (%LOG_FILE%) do goto err

del %DETAILS_FILE%
del %LOG_FILE%
exit 0

:err
echo 缺陷单不存在,请正确填写缺陷单号,提交终止! 1>&2
del %DETAILS_FILE%
del %LOG_FILE%
exit 1

二、创建checkin_svn_pre_commit.php 到数据库中校验缺陷单信息

拷贝 checkin.php 内容 新建checkin_svn_pre_commit.php 文件
删除 # add note to each bug only once 之后的到 exit( 0 ); 内容,修改为以下内容
# add note to each bug only once
 $t_issues = array_unique( $t_issues );
 $t_fixed_issues = array_unique( $t_fixed_issues );
        $t_issues_svn = array_unique( $t_issues );
 
# 编码转换.

  1. $t_comment = mb_convert_encoding($t_comment, "utf-8","GB2312");   
  2.     # 判断数据库中的 缺陷单号是否存在  
  3.   foreach ( $t_issues_svn as $t_issue_id ) {  
  4.         $query = "SELECT *  
  5.     FROM mantis_bug_table  
  6.     WHERE bug_text_id='$t_issue_id'";  
  7.   $result = db_query( $query );  
  8.   $issues_raw_count = db_num_rows( $result );  
  9.      if ($issues_raw_count  == 0){  
  10.    echo "$t_issue_id";  
  11.    } }  
  12.    exit( 0 );  

至此大部分的工作都已经完成,但是还存在一些问题
1 新增等操作的时候,有时候提交没有出现收入 issue 提示框,但是此时仍然需要输入缺陷号
测试可以要求,在提交注释的时候,按照 issue 1 形式手工写入缺陷单号,即可提交。本节关于集成SVN源码管理和Mantis缺陷跟踪相关内容介绍到这里。

【编辑推荐】

  1. SVN管理与应用相关的资料参考手册
  2. 技术分享 如何进行SVN代码管理
  3. 多项目中SVN权限管理精辟解析
  4. 如何实现SVN仓库目录规范化管理?
  5. 经验总结:TortoiseSVN客户端使用心得
【责任编辑:程华权 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

276人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

643人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

软件设计师考试全真模拟试题及解析

本书是按照全国计算机技术与软件专业技术资格(水平)考试《软件设计师考试大纲》的要求,参照《软件设计师教程》及近年来考试试题编写的,...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客