iOS项目配置Git Commit Message规范

一. commit规范

1、type(必需): 用于说明 commit 的类别,可选值有:
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
build: 构建
ci: 持续集成
perf: 性能优化
revert: 回滚
2、scope(非必需): 用于说明 commit 影响的范围
3、subject(必需): 是 commit 的描述
示例: git commit -m "feat: 增加xxx功能"
示例: git commit -m "feat(user): add the user login"

二. 使用git hooks校验

1、如果只需要配置单独项目git hooks,可按如下配置:
在.git/hooks目录下有很多钩子,我们可以根据需要自定义不同的内容,这里我们只需要修改commit-msg即可。

首先将commit-msg.sample 改为 commit-msg,也就是去掉后缀。
将里面的内容修改为下面内容

#!/bin/bash
MSG=`awk '{printf("%s",$0)}' $1`
if [[ $MSG =~ ^ (feat|fix|test|refactor|docs|style|chroe|build|ci|perf|revert):.*$ ]]
then
    echo -e "\033[32m commit success! \033[0m"
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

当我们提交不规范的commit信息时就会提醒用户,并终止此提交
2、如果需要配置全局git hooks,可按如下配置:

全局hook
1.在用户根目录下创建git_template目录
mkdir -p ~/.git_template/hooks
2.将第一步中创建的commit_msg文件拷贝至上方目录
3.使用该命令将git全局配置模版重定向到第一步中创建到目录
git config --global init.templatedir ~/.git_template
4.如上三步完成后即可在创建新的使用git管理的项目的时候自动将全局模版拷贝至项目根目录/.git/目录下
如果完成如上三步后需要对已经存在对git项目使用该模版,可直接git clone 项目以后直接使用(项目中.git/hooks中可发现全局配置的commit_msg文件)

三.现有iOS项目问题
1、sourcetree克隆代码没有 hooks 文件夹的问题
sourcetree clone 到本地的代码后 .git 目录下没有发现 hooks 文件夹,但是通过终端 git clone 完的仓库里就有,我想不明白,sourcetree 只不过是个 git 客户端而已,还能给我过滤掉了文件夹吗。后来看到别人写的 hooks 的应用才明白,原来对于任何 Git 仓库来说钩子(hooks)都是本地的,而且它不会随着 git clone 一起复制到新的仓库。 但是在终端里的 git clone 密令是可以把它克隆下来的。


hooks文件夹找不到.png

如图所示:以仓项目为例,sourceTree拉取下来的代码是找不到hooks文件夹的,因此无法按照2的方法进行操作。

2、我们需要做的事:
方法1:
重新使用git命令克隆我们的项目,如果一直使用git命令管理仓库,就可以克隆好项目,直接按照上面所述“二. 使用git hooks校验”中的方法操作完,可以进行提交,此时已生效。

1、本地创建文件夹用于存放拉取的代码,git clone 项目地址((默认拉取的是master分支代码)
2、切换分支拉取代码(wyl为远程代码仓库分支名)
  git fetch origin wyl(更新分支最新状态)
  git checkout wyl(切换分支)
  git pull origin wyl(拉取代码)
3、改动本地文件
      git add 文件
      git commit -m '提交信息' 
      检验git钩子是否生效了,如果生效了可以看到如下图:

命令行clone的.git文件.png
commit-message校验报错以及提交成功例子

方法2:
依然要做完方法1的前面两步
需要关联sourceTree和克隆好的本地仓库

sourceTree.png

添加好就可以继续原来熟悉的代码提交了,此时你会发现commit-message的钩子仍然有效,当然如果格式校验通过,你就是正常的提交代码了。
sourceTree报错页面.png

四、如果需要模版提示,可以根据下面两个方法去进行配置提示的模版。
这里给出两种方案,也是业界比较通用的
1. commitizen 交互式约束命令 提交
2.配置git commit 模板
先来介绍第一种:(基于MAC OS 安装)
知名前端web项目AngularJS的提交记录在业内被许多人称赞,其规范同时也逐渐被大家引用,为了把这些规范实际应用到项目中,我们就需要 commitizen 这个小工具,该工具是基于Node的,因此我们首先必须先安装node环境 ,node环境好了后便可以开始安装我们的利器了,步骤很简单:
  a. npm 全局安装利器 commitizen
npm install -g commitizen
b.安转规范模板文件
这里有个要注意的地方 规范模板文件分全局(也就是说 这个规范适用于你电脑上所有的git 项目)的和单个仓库(只针对一个git工程)的
  全局安装 :
先全局下载 规范模板文件
1. npm install -g cz-conventional-changelog 其中 cz-conventional-changelog 这个东西就是AngularJS的规范
2. echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc ,此时你当前用户的根目录下应该可以看到一个 .czrc的文件了
然后你切换到你的git 工程下 ,在当你需要使用 git commit 的地方更换成 git cz就能显示出 commit 的交互界面
局部安装:
1.直接 cd到你的git工程下
2.commitizen init cz-conventional-changelog --save --save-exact 安装规范文件,如果你的项目本身就是 node系列的 如 web 前端项目 ,你的项目下应该是有个 package.json文件的,此时你运行 上面的命令不会报错 直接成功,但如果你的项目是 ios 、Android
工程根目录下没有 package.json的话你就需要 npm init 一下,然后会看到一个package.json的目录
3.commitizen init cz-conventional-changelog --save --save-exact 此时你会发现又多了个nodes_modules文件夹没办法 ,你两个文件你应该不会导入到工程中吧,直接加入到 gitignore文件中去好了
    所以推荐全局安装 ,好的规范应该用在所有的工程上.
你是否注意到,当你执行 git cz后的那些提示信息,最后生成的 commit 信息大概是这样的 简洁又明了

image

那现在来讲讲第二种 :git 设置模板
   步骤如下:
1.首先建立一个模板文件 最好直接在用户根目录下建(为啥? 稍后解释)
  如:建立 vim .template_git
如果 按 i 编辑 ,输入自己想要的规范 ,刚上面说了AngularJS的 commit规范很好,那我们应该模拟它的,然后保存退出
2.git config --global commit.templte 模板文件名, 我的模板文件是 .template_git 所有直接
git config --global commit.template /Users/tao/.template_git (PS:一定要是绝对路径,因为commit 的时候git会去到根据具体的路径名去加载模板)
其中 --global 参数是为了指明是全局配置git,就是影响你电脑上的所有git工程,当然你也可以直接去对应的工程根目录下
执行不带 --global参数的命令 则只会影响当前工程 (还是推荐全局 ,好东西要一起用)
配置完成后 你直接在需要commit的时候输入 git commit
然后会出来一些文本提示 只要大家都按照上面的格式填写我们就也能有和AngularJS一样美观的提交信息了 ,这里有个按照AngularJS规范编写的模板文件
可以直接下载下来配置

PS:对于上面两种方式 个人觉得 commitizen 无疑是利器了,能用尽量用,但有些开发小伙伴可能对纯命令的形式不太喜欢,或者就是不会git 命令,也有些正在使用 如sourceTree一样有着界面的git工具,这个时候就可以采用 git 配置模板的方式了, 由于sourceTree默认也会去加载git全局配置的commit模板(全局配置的重要性),而且这个配置文件还只能在当前用户根目录的下,这也是为什么上面要在用户根目录下建配置文件的原因。

(可根据自身情况决定是否需要模版提示)配置完如图所示:

模版提示.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容