利用SVN log命令统计SVN提交代码
来源:互联网 发布:手机淘宝截图生成器 编辑:程序博客网 时间:2024/05/22 09:00
题记
大家在开发中经常会碰到提交SVN代码时的审核问题,例如:你从3月25号到4月1号开发了一个需求,此时你要上线的话,需从svn日志里筛选出你提交过的文件(全局同步除外),然后确认文件是否被其他同事提交过,这里你首先需要对你提交文件去重,然后再单独看每个文件的svn日志信息有无被其他账户提交过。这里,我们可以利用php的shell执行svn log命令来一步完成如上操作(或者其他语言都可以)。
开发准备
首先普及下svn log命令:这里我直接复制别人博客的详解
log: 显示一组版本与/或文件的提交日志信息。
用法: 1、log [PATH]
2、log URL[@REV] [PATH…]1、显示本地 PATH (默认: “.”) 的日志信息。默认的版本范围是 BASE:1。
2、显示 URL 中 PATH (默认: “.”) 的日志信息。如果指定了 REV,就从 REV
开始查找 URL,版本范围是 REV:1。否则就从 HEAD 开始查找 URL,版本范围
是 HEAD:1。
有效选项:
-r [–revision] ARG : ARG (一些命令也接受ARG1:ARG2范围)
版本参数可以是如下之一:
NUMBER 版本号
‘{’ DATE ‘}’ 在指定时间以后的版本
‘HEAD’ 版本库中的最新版本
‘BASE’ 工作副本的基线版本
‘COMMITTED’ 最后提交或基线之前
‘PREV’ COMMITTED的前一版本
-q [–quiet] : 不打印信息,或只打印概要信息
-v [–verbose] : 打印附加信息
-g [–use-merge-history] : 从合并历史使用/显示额外信息
-c [–change] ARG : 版本 ARG 引起的改变
–targets ARG : 传递文件 ARG 内容为附件参数
–stop-on-copy : 查看历史不要跨越不同的副本
–incremental : 给予适合串联的输出
–xml : 输出为 XML
-l [–limit] ARG : 日值项最大值
–with-all-revprops : 获取所有版本属性
–with-no-revprops : 没有找回版本属性
–with-revprop ARG : 获取版本属性 ARG
全局选项:
–username ARG : 指定用户名称 ARG
–password ARG : 指定密码 ARG
–no-auth-cache : 不要缓存用户认证令牌
–non-interactive : 不要交互提示
–trust-server-cert : 不提示的接受未知的 SSL 服务器证书(只用于选项 “–non-interactive”)
–config-dir ARG : 从目录 ARG 读取用户配置文件
–config-option ARG : 以下属格式设置用户配置选项:
FILE:SECTION:OPTION=[VALUE]
例如:
servers:global:http-library=serf
3. 代码
$user_name=$this->getParam('name');$start_time=$this->getParam('start_time');$end_time=$this->getParam('end_time');$svn_url='你的svnurl';$usernmae='你的svn用户名';$password='你的svn密码';$dir ='你项目的目录'//调试错误时,加上2>&1,利用log -r 选项筛选时间段的日志$shell = '/usr/bin/svn log '.$svn_url.$dir.' -r {"'.$start_time.'"}:{"'.$end_time.'"} -v --username '.$username.' --password '.$password.' --no-auth-cache';$output = shell_exec($shell);//这里的output就是svn log返回的日志信息 如下对log信息格式化成我们需要的$output = explode('------------------------------------------------------------------------',$output);$commit_arr = array(); //提交文件的数组$waring = ''; //文件有被其他用户提交过的警告foreach($output as $key=>$val){ $tmp_arr = explode('|',$val); if(count($tmp_arr)>1){ $time = substr(trim($tmp_arr[2]),0,19); //再次筛选用户和时间段在条件内 if(trim($tmp_arr[1])==$user_name && $time>=$start_time && $time<$end_time) { $match_dir = str_replace('/','\/',$dir); preg_match_all('/'.$match_dir.'.+/',$tmp_arr[3],$file_arr); $file_arr = $file_arr[0]; foreach($file_arr as $file_val){ if(!in_array($file_val,$commit_arr)){ //调取每个文件的详细日志,以判断其他用户是否有提交的记录 $shell1 = '/usr/bin/svn log '.$svn_url.$file_val.' -r {"'.$start_time.'"}:{"'.$end_time.'"} -v --username '.$username.' --password '.$password.' --no-auth-cache'; $output1 = shell_exec($shell1); $output1 = explode('------------------------------------------------------------------------',$output1); foreach($output1 as $key1=>$val1){ $tmp_arr1 = explode('|',$val1); if(count($tmp_arr1)>1){ if(trim($tmp_arr1[1])!=$user_name){ $waring.= $file_val.' '.$tmp_arr1[1].'在'.substr(trim($tmp_arr1[2]),0,19).'期间'.'提交过版本,请确认'.'<br/>'; } } } $commit_arr[]=$file_val; } } } }}if($commit_arr){ $json_out['status']=1; $json_out['files'] = implode('<br />',$commit_arr); $json_out['waring'] = $waring;}else{ $json_out['status']=0;}echo json_encode($json_out);exit;
我的前台是这样 直接将json输出到页面上。。
- 利用SVN log命令统计SVN提交代码
- SVN代码提交数量统计
- SVN提交和更新代码命令
- 使用svn log命令显示提交日志信息
- SVN强制提交编写log
- 利用svn log命令实现的资源版本更新
- SVN 命令提交错误
- 一个基于SVN 的代码提交量统计工具
- 统计两个SVN提交commit之间代码行数改动
- 用StatSVN统计svn项目中每人代码提交量
- SVN代码提交流程
- SVN代码提交流程
- svn 提交代码
- svn 提交代码
- SVN代码提交规范
- SVN代码提交流程
- svn提交代码出错
- 代码提交SVN流程
- Opencv学习笔记——release和debug两个模式的运行问题
- 版本2
- Redis与Memcached的区别
- 弹性分布式数据集RDD概述
- Caffe——清晰高效的深度学习(Deep Learning)框架
- 利用SVN log命令统计SVN提交代码
- 第6周项目3-IP地址类
- stm32f103 RTC周期性待机唤醒(一)
- POJ 2960.S-Nim【博弈论】【4月5】
- 跳转语句continue;break;return的区别
- CSS学习(五)——区块、浮动、定位、溢出、滚动条
- 如何用endnote引用论文
- 继承的应用
- 172. Factorial Trailing Zeroes