android commit规范

Commit规范

在团队开发过程中,如果大家Commit Message不统一或者写的不清晰,很难看出一次提交修改了哪些内容。对于codereview来说也很难作为参考。目前,社区有多种 Commit message 的写法规范,这里推荐使用angular规范,格式如下:

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

其中 head((): )是必须的,body和footer是可选的。angular规范详细说明,网上有很多,随便贴一篇:https://juejin.cn/post/6844903720761688077

Header

Type

commit的类别,包涵以下七种:

feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
Scope

commit的影响范围,比如会影响到哪个模块/性能/哪一层(业务层,持久层,缓存,rpc),如果是特性代码,可以写特性名称

Subject

commit的简短描述,不超过50个字符。

注意:一条commit只能包含一条内容,不能将多个bug或功能合并提交。因为各种各样的原因,我们会有一些没有什么意义的commit信息或一个bug提交多次。我们可以使用git rebase来合并多次commit。注意:git rebase只能作用未push的commit,并且为避免不必要的冲突,建议git rebase只在自己的分支中使用,不能在公共分支中使用

git rebase -i HEAD~4 #HEAD~4代表修改最近的四次提交

git rebase使用详见:https://segmentfault.com/a/1190000020953109

Git Commit Template

android studio安装Git Commit Template提交模板插件(Settings>Plugins直接搜索Git Commit Template),我们安装完在git提交页面写message的地方会有个小按钮,打开就能辅助我们写好标准angular格式的commit message
在这里插入图片描述
在这里插入图片描述
注意:由于脚本的限制commit描述中不能出现#号。针对fix类型,如果tapd上有关联bug,需要再Closed issues中写上对应bug号,便于change log中bug关联

changelog.sh脚本

changelog.sh脚本是用来生成change log

#!/bin/bash
#获取两个 commitId 之间的 message
function getInputCommitId(){
  tag1=$1
  tag2=$2
  #获取的 message 区间为[),这里添加将提交信息放在<start><end>之间编译内容分割,和bug号提取
  git log --pretty=format:"<start>%n%s%n%b%n<end>" ${tag1}...${tag2} >commits.txt
}
temp=""
type=0
startFlag="<start>"
endFlag="<end>"
# 使用正则判断 commits.txt 每行开头是否符合我嗯的规则,并生成feat.txt和fix.txt
function generateDoc(){
    if [ "$1" == "$startFlag" ]
        then
        temp=""
        type=0
    fi
    # $1 代表方法 第一个入参数,方法参数为每行文本
    if [[ "$1" =~ ^feat.*:$ ]]
        then
        msg="${@}"
        temp=$temp$msg
        type=1
#        echo ${msg} >> feat.txt
    elif [[ "$1" =~ ^fix.*:$ ]]
        then
        msg="${@}"
        temp=$temp$msg
        type=2
#        echo $msg >> fix.txt
    elif [[ "$1" =~ ^refactor.*:$ ]]
        then
        msg="${@}"
        temp=$temp$msg
        type=3
#        echo $msg >> refactor.txt
    elif [[ "$1" =~ ^Closes.*$ ]]
        then
        msg="${@:2}"
        temp=$temp$msg
    fi
    if [ "$1" == "$endFlag" ]
      then
        if [ $type == 1 ]
          then
          echo ${temp} >> feat.txt
        elif [ $type == 2 ]
          then
          echo ${temp} >> fix.txt
        elif [ $type == 3 ]
          then
          echo ${temp} >> refactor.txt
        fi
    fi
}
$(rm -rf CHANGELOG.md)
getInputCommitId $1 $2
# 读取 commits.txt 每行文本
while read line || [[ -n ${line} ]]
do
    message=${line}
    generateDoc ${message}
done < commits.txt
# 删除 commits.txt
$(rm -rf commits.txt)
# 生成标题
branch=$(git symbolic-ref --short -q HEAD)
time=$(git log --pretty=format:"%ai" ${tag2} -1)
echo "## $tag2 - $tag1 $branch ($time)" >>CHANGELOG.md

# 生成Features行
echo "### Features" >>CHANGELOG.md
while read line
do
    echo "* "${line} >> CHANGELOG.md
done < feat.txt
(rm -rf feat.txt)

# 生成Fixs行
echo "### Fixs" >>CHANGELOG.md
while read line
do
array=(${line//#/ })
if [ ${#array[*]} == 3 ]
    then
    # 关联bug链接,这样以tapd为例
    msg=${array[0]}${array[1]}"#["${array[2]}"](https://www.tapd.cn/42576611/bugtrace/bugs/view?bug_id="${array[2]}")"
    echo "* "${msg} >> CHANGELOG.md
else
  echo "* "${line} >> CHANGELOG.md
fi
done < fix.txt
(rm -rf fix.txt)

# 生成Refactor行
echo "### Refactor" >>CHANGELOG.md
while read line
do
echo "* "${line} >> CHANGELOG.md
done < refactor.txt
(rm -rf refactor.txt)

# 判断文件是否存在
if [[ -f "./CHANGELOG.md" ]]
then
    echo CHANGELOG.md is exsit
else
    echo '# ChangeLog' >CHANGELOG.md
fi

# 读取 ChangeLog 文件,删除重复输入一直的内容,使用第一个输入的参数作为锚点对比
while read text
do
    ((++i))
    if [[ ${text} =~ "## $tag2" ]]
        then
        start=$i
    elif [[ $tag1 != "" && ${text} =~ "## $tag1" ]]
        then
        end=$i
    fi
done < CHANGELOG.md

# ${start} 为起始行
# ${end} 为结束行

if [[ "" = "$end" ]]
    then
    if [[ "" != "$start" ]]
        then
        # 如果没有结束行,则删除起始行以后所有的内容
        $(sed -i "" "$start,\$d" CHANGELOG.md)
    fi
else
    ((--end))
    # 应换为插入
    if [[ "$start" -gt "$end" ]]
        then
        $(sed -i "" "$start,\$d" CHANGELOG.md)
    else
    # 如果有结束行 则删除之间所有的内容
        $(sed -i "" "$start,${end}d" CHANGELOG.md)
    fi
fi
$(rm -rf commits.txt)

生成change log

使用changelog.sh脚本生成change log,脚本接收两个参数(开始commit id与结束commit id,不包括开始结束)。不传结束commit id默认到最新提交记录。将changelog.sh脚本复制到工程下,执行:

changelog.sh 2d1e8535 3e1d9536

在脚本同目录下生成CHANGELOG.md,可将change log信息作为提测内容

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Git Commit规范是一种约定俗成的方式,用于规范化提交信息的格式和内容,使得提交历史更加清晰、易读和易于管理。以下是一种常见的Git Commit规范: 1. 提交信息的结构:每个提交信息由三个部分组成:标题、正文和页脚。 标题:简明扼要地描述这次提交的内容,通常以动词开头,使用一般现在时,不超过50个字符。 正文:对提交的详细描述,可以包括为什么进行该提交、做了哪些修改等信息。 页脚:可包含与提交相关的其他附加信息,如关联的Issue编号、作者等。 2. 提交信息的格式:为了保持统一和易读性,可以采用以下格式: ``` <type>(<scope>): <subject> <body> <footer> ``` 其中,`<type>`代表提交的类型,如`feat`(新功能)、`fix`(修复bug)、`docs`(文档更新)等。 `<scope>`代表本次提交的范围,可以是具体的文件、模块或功能名称。 `<subject>`是对本次提交内容的简要描述。 `<body>`是对本次提交内容的详细描述。 `<footer>`是页脚部分,可以包含相关链接、引用等信息。 3. 示例: ``` feat(user): 添加用户注册功能 - 在用户界面增加注册表单 - 后端增加注册接口 Issue #123 ``` 通过遵循Git Commit规范,可以提高团队协作效率、减少沟通成本,并且更好地追踪和管理项目的提交历史。当然,具体的规范可以根据团队的实际需求和偏好进行调整和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值