[原创]升级Gerrit的commit-msg,检查git commit时必须填写开发任务编号TaskID
公司使用git+gerrit+jenkins进行持续集成实践,其中gerrit用来进行Code Review。另外我们自己研发了一套敏捷项目管理系统TPM(TeamPlus Management),用来管理开发任务和电子看板。此时有一个需求,希望开发人员提交的代码能够关联到TPM上的开发任务,这样就能实现需求与代码的关联,实现 需求->backlog->userstory->task->code->build->test->deploy->prod 的全流程数据关联。
目前的一个方式是在开发人员提交代码的同时,在comments中指定TaskID,其中TaskID是TPM系统中开发任务编号。但是很多时候开发人员提交代码是,忘记在comments log中指定TaskID,导致数据缺失,不能有效辅助研发过程改进。
为此,考虑参考Gerrit的commit-msg的方式,在commit代码同时,检查comments log中是否有指定合法的TaskID。(Gerrit的commit-msg,就是在commit代码的同事,给comments log增加一个Change-ID编号)
首先,修改commit-msg,增加TaskID的检查。
# Check for if missing a unique TaskID related with TPM # check_TaskID() { COMMIT_FILE=$MSG COMMIT_MSG=$(cat $MSG) TASK_ID=$(echo "$COMMIT_MSG" | grep -Eo "#task[A-Za-z0-9]+") if [ -z "$TASK_ID" ]; then echo "[ERROR] Please add TPM TaskID comment logs with a format like 'comment logs #task20180623001'" exit 1 else echo "[INFO] StoryId=["$TASK_ID"]" fi } # Check for, and add if missing, a unique Change-Id # add_ChangeId() { ... ... ... check_TaskID add_ChangeId |
其次,是替换旧的commit-msg文件。
检索了一遍gerrit-site目录,没有发现commit-msg文件,怀疑是在gerrit.war中。解开gerrit.war,仍然没有发现commit-msg文件,怀疑实在某个依赖lib中。我们用的gerrit版本是2.12.8。翻了一下gerrit的源代码,commit-msg是在gerrit-server/src/main/resources/com/google/gerrit/server/tools/root/hooks/commit-msg,推测是在gerrit-server的依赖lib中。解开gerrit-server-server.jar后,果然发现commit-msg。
之后有两种办法替换:
1、重新编译gerrit源码。觉得太麻烦,放弃。
2、依次解压gerrit.war和gerrit-server-server.jar,修改commit-msg,再用jar命令依次打包gerrit-server-server.jar和gerrit.war。
注意打gerrit.war的时候,需要指定Manifest,指定gerrit.war的Main-Class: Main,否则java -jar gerrit.war启动的时候找不到MainClass。
最后,升级修改后的gerrit。
网上找一找gerrit版本升级的网页有一堆。务必注意,升级之前一定要备份gerrit-site。
1、停止gerrit。 cd gerrit-site/bin; sh gerrit.sh stop
2、备份gerrit-site
3、启动新的gerrit。 java -jar new-gerrit.war init -d gerrit-site
之后基本上一路回车就行。这个过程会替换gerrit-site/bin/gerrit.war,并会重新配置一遍gerrit。
验证效果
1、启动gerrit。 cd gerrit-site/bin; sh gerrit.sh start
2、打开 http://gerrit地址/tools/hooks/commit-msg,查看是否是修改以后的文件。
3、git clone项目测试。
:~/code>git clone ssh://[项目地址] && scp -p -P 29418 [gerrit地址]:hooks/commit-msg AgileMng/.git/hooks/ Cloning into 'AgileMng'... remote: Counting objects: 1952, done remote: Finding sources: 100% (1952/1952) remote: Total 1952 (delta 918), reused 1870 (delta 918) Receiving objects: 100% (1952/1952), 1.17 MiB, done. Resolving deltas: 100% (918/918), done. commit-msg 100% 4946 4.8KB/s 00:00 :~/code/AgileMng>touch 1 :~/code/AgileMng>git add 1 :~/code/AgileMng>git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: 1 # :~/code/AgileMng>git commit -m "add new file 1" [ERROR] Please add TPM TaskID in comment logs with a format like 'comment logs #task20180623001' :~/code/AgileMng>git commit -m "add new file 1 #task20180618 new file 1" [INFO] TaskId=[#task20180618] [master 48daaed] add new file 1 #task20180618 new file 1 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 1 |
[原创]升级Gerrit的commit-msg,检查git commit时必须填写开发任务编号TaskID的更多相关文章
- git commit -m 与 git commit -am的区别
字面解释的话,git commit -m用于提交暂存区的文件:git commit -am用于提交跟踪过的文件 要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示 工作目录下面的所有文件 ...
- git commit -m 和 git commit -am 区别
git commit -m 和 git commit -am 通常修改一个文件 并且将文件提交到本地分支的命令是: git add . git commit -m 'update' 以上两个命令其实可 ...
- 从code review到Git commit log
最近在读一本技术类的书:朱赟——<跃迁:从技术到管理的硅谷路径>,其中聊了很多很有趣的观点,比如:技术管理.技术实践.硅谷文化.个人成长等. 读到关于硅谷人如何做code review这一 ...
- 规范git commit提交记录和版本发布记录
在开发过程中我们一般都会用到git管理代码,在git commit提交代码时我们一般对git commit message随便写点简单的描述,可是随着项目参与人数的增多,发现提交的commit记录越来 ...
- [译]git commit
git commit git commit命令提交stage区的快照到项目历史中去(HEAD). 被提交的快照被认为是一个项目的安全版本. Git不会修改他们, 除非你显示的要求了. 和git add ...
- git commit时message的问题
1: 在执行git commit的时候,有两种办法为该commit添加message信息一种是git commit -m 'your message'另一种是git commit会打开commit-e ...
- git commit的--amend选项
git commit --amend常常用来修改某个branch上最顶端的commit,大多数情况下,这个命令给人的感觉是用新的commit替换了原来的commit.git commit --amen ...
- git commit -m与-am的区别
前面的话 使用git commit -am是不是就可以完全不使用git add命令呢?不是 理论 要了解git commit -m与git commit -am的区别,首先要明白它们的定义 字面解释的 ...
- git add和git commit
git命令使用:提交前可指定要提交哪些文件,然后使用git commit来提交 样例: git status 输出: Changes to be committed: modified: app/ ...
随机推荐
- c#实现内存映射文件共享内存
原文:http://blog.csdn.net/wangtiewei/article/details/51112668 内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文件, ...
- stm32f103各个型号芯片之间程序移植(stm32的兼容问题)
1.stm32f103系列的各个型号的芯片差别一般不大,都是一些flash大小不一样,一般是向下兼容(大容量芯片兼容中容量芯片)还有晶振大小不一样. ...
- 【个人经历】记自己的第一次GitHub开源代码共享经历
题记: 自己做程序员快三年有余了,感觉自己和刚入职相比确实有了不少进步,当然三年要是不进步那不就傻了吗,有时候我也在想,我在这三年里留下了什么,当然也不是说有多么高尚的想法,就是以后对别人介绍自己的时 ...
- CentOS 中 配置 Nginx 支持 https
一.基础设置: .yum -y update .yum -y install openssl* .cd /usr/local/nginx/conf .mkdir ./ssl .cd ./ssl # 在 ...
- 如何忽略.gitignore文件的提交
1.默认的.gitignore文件无法忽略,如果想要忽略可以把.gitignore里面的文件转移到项目下面的 .git/info/exclude 里面, 2..gitignore可以直接使用插件,参照 ...
- linux下指定源下载
我们默认使用yun 安装的时候 使用的 是外国的网站进行下载的 那么下载肯定是慢的 我们可以更改为国内的站点进行下载的 比如临时更改为国内的站点进行下载 pip install -i +你的源 p ...
- SDWebImage动画加载图片
SDWebImage动画加载图片 效果 源码 https://github.com/YouXianMing/Animations // // PictureCell.m // SDWebImageLo ...
- Linux系统设置运行级别
设置运行级别 查看开机加载级别:7个级别 规范场景默认都是3 cat /etc/inittab --> 系统开机启动加载的文件,可以设置运行级别 # Default runlev ...
- QuickBI助你成为分析师-数据建模(二)
摘要: 数据集编辑功能界面介绍以及常见问题总结. 在数据集编辑界面可以进行数据建模来更好的展示数据,创建数据集默认将数值类型字段作为度量,日期.字符串等类型作为维度,度量可以根据维度分组展示.下面来介 ...
- python2.7与3.5共存windows平台安装
文:铁乐与猫 2018-3-18 周日 01.首先是安装python2.7: 官网下载 https://www.python.org 点击安装包进行安装 可以选择自定义的路径 将默认打x的[add p ...