当前位置:   article > 正文

GitLab远程提交注释格式校验_gitlab限制commit备注格式

gitlab限制commit备注格式

更新推送校验hooks

更新pre-commit

服务器层校验,需要找到push操作触发的钩子pre-commit,例如文件位置:

/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/pre-commit

加入更新hooks校验逻辑,使用正则表达式校验提交注释格式,要求使用定义的规范格式,同时忽略合并类型Merge注释内容。该方法仅能做简单校验,需回收普通用户Merge操作权限。

  1. #!/bin/bash
  2. # echo "开始提交信息检查..."
  3. # 从标准输入获取本次提交的commit id及分支的信息
  4. read normalInput
  5. ARR=($normalInput)
  6. parentCommitId=${ARR[0]}
  7. currentCommitId=${ARR[1]}
  8. branch=${ARR[2]}
  9. #echo "$parentCommitId"
  10. #echo "$currentCommitId"
  11. if [ "$parentCommitId" == "0000000000000000000000000000000000000000" ]; then
  12. exit 0
  13. fi
  14. if [ "$currentCommitId" == "0000000000000000000000000000000000000000" ]; then
  15. exit 0
  16. fi
  17. allMsg=$(git log $currentCommitId -1)
  18. #echo "全部信息: $allMsg"
  19. if [[ $allMsg =~ '^commit ' ]]; then
  20. exit 0
  21. fi
  22. echo "提交分支:$branch"
  23. # 获取coomit的信息,用户,邮箱,msg等
  24. user=$(git log --pretty=format:"%an" $currentCommitId -1)
  25. echo "提交用户:$user"
  26. commitDate=$(git log --pretty=format:"%cd" $currentCommitId -1)
  27. echo "提交日期:$commitDate"
  28. msg=$(git log --pretty=format:"%s" $currentCommitId -1)
  29. msg="$(echo -e "${msg}" | awk '{$1=$1};1')"
  30. #msg="$(echo -e "${msg}" | tr -d '[:space:]')"
  31. echo "提交注释:$msg"
  32. # exit 0
  33. # if the msg is merge then skip it
  34. mergePattern='^Merge '
  35. if [[ $msg =~ $mergePattern ]]; then
  36. echo "push Merge success"
  37. exit 0
  38. fi
  39. commitPattern='^(feat|fix|test|refactor|docs|style|chore|revert|build|perf):(task|req)-([0-9]*):[^\n]{1,200}$'
  40. #echo "提交注释:$msg"
  41. if [[ $msg =~ $commitPattern ]]; then
  42. echo "提交成功"
  43. exit 0
  44. else
  45. echo "提交失败"
  46. echo "提交格式不规范,必须以 [feat,fix,test,refactor,docs,style,chore,revert,build,perf] 开头"
  47. echo "提交注释长度不超过200,且包含task-id/req-id, 格式如 [feat:task-100:ex mesg...]"

钩子中可以获取的信息列表

  1. git log --pretty=format:'%H' -n 1
  2. %H: commit hash
  3. %h: 缩短的commit hash
  4. %T: tree hash
  5. %t: 缩短的 tree hash
  6. %P: parent hashes
  7. %p: 缩短的 parent hashes
  8. %an: 作者名字
  9. %aN: mailmap的作者名字 (.mailmap对应,详情参照[git-shortlog(1)](http://linux.die.net/man/1/git-shortlog)或者[git-blame(1)](http://linux.die.net/man/1/git-blame))
  10. %ae: 作者邮箱
  11. %aE: 作者邮箱 (.mailmap对应,详情参照[git-shortlog(1)](http://linux.die.net/man/1/git-shortlog)或者[git-blame(1)](http://linux.die.net/man/1/git-blame))
  12. %ad: 日期 (--date= 制定的格式)
  13. %aD: 日期, RFC2822格式
  14. %ar: 日期, 相对格式(1 day ago)
  15. %at: 日期, UNIX timestamp
  16. %ai: 日期, ISO 8601 格式
  17. %cn: 提交者名字
  18. %cN: 提交者名字 (.mailmap对应,详情参照[git-shortlog(1)](http://linux.die.net/man/1/git-shortlog)或者[git-blame(1)](http://linux.die.net/man/1/git-blame))
  19. %ce: 提交者 email
  20. %cE: 提交者 email (.mailmap对应,详情参照[git-shortlog(1)](http://linux.die.net/man/1/git-shortlog)或者[git-blame(1)](http://linux.die.net/man/1/git-blame))
  21. %cd: 提交日期 (--date= 制定的格式)
  22. %cD: 提交日期, RFC2822格式
  23. %cr: 提交日期, 相对格式(1 day ago)
  24. %ct: 提交日期, UNIX timestamp
  25. %ci: 提交日期, ISO 8601 格式
  26. %d: ref名称
  27. %e: encoding
  28. %s: commit信息标题
  29. %f: sanitized subject line, suitable for a filename
  30. %b: commit信息内容
  31. %N: commit notes
  32. %gD: reflog selector, e.g., refs/stash@{1}
  33. %gd: shortened reflog selector, e.g., stash@{1}
  34. %gs: reflog subject
  35. %Cred: 切换到红色
  36. %Cgreen: 切换到绿色
  37. %Cblue: 切换到蓝色
  38. %Creset: 重设颜色
  39. %C(...): 制定颜色, as described in color.branch.* config option
  40. %m: left, right or boundary mark
  41. %n: 换行
  42. %%: a raw %
  43. %x00: print a byte from a hex code
  44. %w([[,[,]]]): switch line wrapping, like the -w option of git-shortlog(1).

提交注释格式说明

示例格式头部

[feat,fix,test,refactor,docs,style,chore,revert,build,perf] 开头,续接 req-[禅道需求id]或task-[禅道任务id],续接注释说明。

分号":"和连接符"-"使用英文符号,最后注释说明在200字符以内。

示例格式正例

fix:task-119:修复开票sdk提示报错异常

feat:req-201:加入开票错误远程同步逻辑

id=0时表示无关联需求/任务的特殊提交

定义提交注释规范(自定义)

注释前缀

feat         新功能
fix           修复
docs       文档变更
style       代码格式
refactor  重构
perf        性能优化
test        增加测试
revert     回退
build      打包
chore    构建过程或辅助工具变动

关联id

task表示禅道或其他需求产品管理系统的任务,req表示需求,如task-100表示id为100的任务等等。

注意:当任务或者需求id未知或特殊提交无需关联id,使用task-000、req-000提交,需做相关校验。

关联id可通过在hooks中,发起请求校验,请求服务具备产品需求管理系统的数据访问权限,用以校验id的正确性。

例:

  1. #!/bin/bash
  2. # 获取提交信息注释消息
  3. msg=$(git log -1 --pretty=%B)
  4. # 构建请求的 JSON 数据
  5. data="{\"msg\":\"$msg\"}"
  6. # 发送 POST 请求并将返回内容保存到 tips 变量
  7. tips=$(curl -s -X POST -H "Content-Type: application/json" -d "$data" http://xxx.com/check)
  8. # 输出提示消息
  9. echo "$tips"

自此完整的达到了校验目的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/914636
推荐阅读
相关标签
  

闽ICP备14008679号