公司使用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的更多相关文章

  1. git commit -m 与 git commit -am的区别

    字面解释的话,git commit -m用于提交暂存区的文件:git commit -am用于提交跟踪过的文件 要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示 工作目录下面的所有文件 ...

  2. git commit -m 和 git commit -am 区别

    git commit -m 和 git commit -am 通常修改一个文件 并且将文件提交到本地分支的命令是: git add . git commit -m 'update' 以上两个命令其实可 ...

  3. 从code review到Git commit log

    最近在读一本技术类的书:朱赟——<跃迁:从技术到管理的硅谷路径>,其中聊了很多很有趣的观点,比如:技术管理.技术实践.硅谷文化.个人成长等. 读到关于硅谷人如何做code review这一 ...

  4. 规范git commit提交记录和版本发布记录

    在开发过程中我们一般都会用到git管理代码,在git commit提交代码时我们一般对git commit message随便写点简单的描述,可是随着项目参与人数的增多,发现提交的commit记录越来 ...

  5. [译]git commit

    git commit git commit命令提交stage区的快照到项目历史中去(HEAD). 被提交的快照被认为是一个项目的安全版本. Git不会修改他们, 除非你显示的要求了. 和git add ...

  6. git commit时message的问题

    1: 在执行git commit的时候,有两种办法为该commit添加message信息一种是git commit -m 'your message'另一种是git commit会打开commit-e ...

  7. git commit的--amend选项

    git commit --amend常常用来修改某个branch上最顶端的commit,大多数情况下,这个命令给人的感觉是用新的commit替换了原来的commit.git commit --amen ...

  8. git commit -m与-am的区别

    前面的话 使用git commit -am是不是就可以完全不使用git add命令呢?不是 理论 要了解git commit -m与git commit -am的区别,首先要明白它们的定义 字面解释的 ...

  9. git add和git commit

    git命令使用:提交前可指定要提交哪些文件,然后使用git commit来提交 样例: git status 输出: Changes to be committed: modified:   app/ ...

随机推荐

  1. 移动端 vconsole 的使用

    在微信和app里  我们没有办法使用谷歌提供的开发者工具,可以借助 vconsole 使用步骤如下 1.安装 npm install vconsole 2.app.js里引入 import VCons ...

  2. $.extend 的相关用法

    1.1 $.extend(result,item1,item2…..) 将所有的参数项都合并result中,返回result,会破坏result的结构. 1.2 $.extend({},item1,i ...

  3. 一起来学习android自定义控件—边缘凹凸的View

    1前言 最近做项目的时候遇到一个卡劵的效果,由于自己觉得用图片来做的话可以会出现适配效果不好,再加上自己自定义view方面的知识比较薄弱,所以想试试用自定义View来实现.但是由于自己知识点薄弱,一开 ...

  4. Flutter自定义标题栏之处理状态栏高度

    App在很多情况下由于各种需求需要自定义标题栏,而在能够构建Android和IOS应用的Flutter中,如果不在Scaffold中使用AppBar会发现默认是沉浸式. 猜想:我们使用自定义标题栏好像 ...

  5. 解决提交项目到GitHub,报错Please tell me who you are的问题

    描述: 在第一次提交项目到GitHub时,出现了以下问题 看了一下错误原因:Run git config --global user.email "you@example.com" ...

  6. ecloipse背景修改豆沙

    Eclipse背景色的修改 Eclipse背景色的修改,修改为豆沙色  值是85 123 205 一.修改编辑区   ①这个比较简单一般都会不多说. 1.首先点击Window 然后选择Preferen ...

  7. Error:Execution failed for task ':app:preDebugAndroidTestBuild'.错误解决

    在新建布局文件的时候,页面显示: design editor is unavailable until a successful build(设计编辑器不可用,直到成功创建.) 细看下面还有一行错误: ...

  8. 【Java】生成UUID

    import java.util.UUID; public class MainProcess { public static void main(String[] args) { UUID uuid ...

  9. SweetAlert插件 弹框插件

    sweetalert是一个漂亮的弹窗 中文网址: http://mishengqiang.com/sweetalert/ 它需要2个文件:sweetalert-dev.js和sweetalert.cs ...

  10. marquee 标签的鼠标放上去滚动效果 鼠标离开继续滚动

    效果很实用,可以轻松的实现鼠标放上去停止滚动.鼠标离开继续滚动的效果.下面是具体的用法(特别注意onMouseOver和onMouseOut是需要同时写进去才会出现比较好的效果):onMouseOut ...