Gitlab Code Review

本文档介绍了GitLab中的代码审查流程,包括开发规范、Code Review和gitstats代码统计。开发规范涵盖分支命名、Commit Message格式,推荐遵循Angular规范,并提供Idea Git Commit Template插件。Code Review涉及前置检查、人工审查和静态代码扫描。最后,通过gitstats工具对代码进行统计分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 开发规范

1 分支命名规范

在这里插入图片描述

名称说明命名规范命名示例目标合并操作
master线上稳定版本,发布需要打Tag。mastermaster
test测试分支,待发布版本。testtestmastermerge request
dev当前正在开发的分支devdevtestmerge request
feature功能分支,每个功能需分别建立自己的子分支feature-功能模块feature-orderdevmerge request

2 CommitMessage 规范

Git提交代码必须输入commit message,否则不允许提交。commit message应该尽量清晰明了,说明本次提交的目的。关于commit message写法规范,我们将采用社区使用最广的angular规范,比较合理和系统化,并且有配套的工具。

commit message格式

每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

Header

(1) type

type用于说明commit的类别,常用的标识如下:

  • feat:新功能
  • fix:修补bug
  • docs:文档
  • style: 格式(不影响代码运行的变动,空格,格式化,等等)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • perf: 性能 (提高代码性能的改变)
  • test:增加测试或者修改测试
  • build: 影响构建系统或外部依赖项的更改(maven,gradle,npm 等等)
  • ci: 对CI配置文件和脚本的更改
  • chore:对非 src 和 test 目录的修改
  • revert: Revert a commit

(2) scope

scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

(3) subject

subject是 commit 目的的简短描述,不超过50个字符,主要介绍此次代码变更的主要内容。

Body

Body 部分是对本次 commit 的详细描述,可以分成多行。

例如:

-修改菜单查询接口

-增加菜单删除接口

日常项目开发中,如果Header中subject已经描述清楚此次代码变更的内容后,Body部分就可以为空。

Footer

(1) 不兼容变动

(2) 关闭 Issue

日常项目中开发,Footer不常用,可为空。

3 Idea Git Commit Template插件

在这里插入图片描述
在这里插入图片描述

4 开发手册

目前使用阿里巴巴开发手册-嵩山版本

二 Code Review

1 前置代码Review

提交代码到gitlab时,主要做下面两件事情:

  • 检查commit message是否合理
  • 通过p3c插件检查代码质量,p3c是专门用来检测代码是否符合阿里巴巴开发规范的。
    在这里插入图片描述

2 人工代码Review

采用MergeRequest形式,合并代码时进行代码Review,或者发起Issue。

3 静态代码扫描配置

准备代码Review需要的环境
在gitlab数据目录建立git-hooks,准备jdk、p3c-pmd jar包、代码规则xml文件。注意git-hooks目录以及子目录和子文件需要 chown -R git:root git-hooks, Jar包和xml规则来源alibaba p3c开源项目。
在这里插入图片描述
在这里插入图片描述
配置代码钩子和代码Review执行脚本

在gitlab的版本库里面配置下面的目录结构,并且指定属主和属组,chown -R git:root custom_hooks, chmod +x pre-receive。
在这里插入图片描述
pre-receive脚本内容
把git-hooks目录挂载到了gitlab的数据目录,脚本是在gitlab容器里面运行的,因此脚本里面配置的相关路径是容器内部的路径。

#!/bin/bash
echo "开始检测代码质量"
export JAVA_HOME=/var/opt/gitlab/git-hooks/jdk1.8.0_211
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:JAVA_HOME/lib:JRE_HOME/lib:$CLASSPATH
export PATH=JAVA_HOME/bin:JRE_HOME/bin:$PATH
REJECT=0

while read oldrev newrev refname; do
    if [ "$oldrev" = "0000000000000000000000000000000000000000" ];then
        oldrev="${newrev}^"
    fi
    # 先检测commit message
    commitmsg=git log -1 $newrev --pretty=%s
    echo $commitmsg

    if [[ commitmsg =~ ^(feat|fix|test|refactor|docs|style|chroe)\(.*\):.* ]]
    then
      echo "commit message通过"
    else
      echo -e "\033[31m Error: the commit message is irregular \033[m"
      echo -e "\033[31m Error: type must be one of [feat,fix,docs,style,refactor,test,chore] \033[m"
      echo -e "\033[31m eg: feat(user): add the user login \033[m"
      exit 1
    fi
    
    committer=git log -1 $newrev --pretty=%ce
    files=git diff --name-only ${oldrev} ${newrev}  | grep -e ".java$"
    echo $committer
    if [ -n "$files" ]; then
        TEMPDIR="tmp"
        for file in ${files}; do
            mkdir -p "{TEMPDIR}/`dirname {file}`" >/dev/null
            git show newrev:file > {TEMPDIR}/{file}
        done;
        files_to_check=find $TEMPDIR -name '*.java'
        java -Dpmd.language=en -cp /var/opt/gitlab/git-hooks/p3c-pmd-2.0.1-jar-with-dependencies.jar net.sourceforge.pmd.PMD -d $TEMPDIR -R /var/opt/gitlab/git-hooks/rulesets/ali-comment.xml,/var/opt/gitlab/git-hooks/rulesets/ali-concurrent.xml,/var/opt/gitlab/git-hooks/rulesets/ali-constant.xml,/var/opt/gitlab/git-hooks/rulesets/ali-exception.xml,/var/opt/gitlab/git-hooks/rulesets/ali-flowcontrol.xml,/var/opt/gitlab/git-hooks/rulesets/ali-naming.xml,/var/opt/gitlab/git-hooks/rulesets/ali-oop.xml,/var/opt/gitlab/git-hooks/rulesets/ali-orm.xml,/var/opt/gitlab/git-hooks/rulesets/ali-other.xml,/var/opt/gitlab/git-hooks/rulesets/ali-set.xml -f text -shortnames
         REJECT=$?
        echo "reject = "$REJECT
          if [ $REJECT = 0 ] ;then
              echo "恭喜你代码通过质量检测!"
           elif [ $committer = 'admin@domain.com' ]; then
               echo "在白名单中,临时允许通过"
               REJECT=0
          else  
                echo  "请及时修改代码并再次尝试!"
          fi
        rm -rf $TEMPDIR
    fi
done
exit $REJECT

三 gitstats 代码统计

安装gitstats命令

  • git clone https://github.com/hoxu/gitstats
  • 把gitstats改成gitstats.py
  • yum install gnuplot -y

生成仓库统计结果

  • python gitstats/gitstats.py ./macao/ ./git-stats-macao-mpw
  • 生成的./git-stats-macao-mpw目录是仓库代码的统计结果,可以通过ngxin访问该目录。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值