当前位置: 首页 > news >正文

Git工程实践(一)巧用commit message

背景

大家都知道所有的版本控制系统比如svn,git等设计的核心价值之一就是为了让代码变更有迹可循,而commit mesage的价值在于让有迹可循的代码对人类更加友好,通常一个恰如其分的commit message表达的信息往往先于代码。

而现实的工程实践中,尤其是大型分布式协作的团队,因开发成员背景、习惯、经验多差异性,commit message的风格参差不齐。

那么有没有优雅而简单方式将commit message按照工程标准来落地呢?

下面分享一个git commit message的实践,其核心是通过git commit template标准化comments,希望可以抛砖引玉。

配置commit message template

通过配置相同的git commit template & markdown syntax 来标准化git message。步骤如下:

  1. 进入~/ 目录,新增__.gitmessage, 内容如下:__
brief introduction.

#brief introdction 必填,概要描述变更内容。
#change item list 选填,针对变更不同模块/业务进行分条描述,使用markdown语法。
#demo
#add xxx open api.
#- add xxx api.
#- add xxx api.
#- add xxx api.
  1. 编辑.gitconfig文件,新增.gitmessage模版配置。

[commit]

template = ~/.gitmessage

后续在提交代码时候(使用git commit没有指定-m参数)git message将会自动按照模版格式生成。效果如下:

image.png | left | 747x372

实践建议

  • 正式的commit尽量不要使用 git commit -m指定message信息,避免生成的git log可读性差。
  • commit message 格式优先使用markdown格式,生成的格式将更优雅,通过git log查看可读性更佳。
  • 较大feature发布,git message尽可能丰富,通过概要+变更列表的格式表达,如上图。
  • commit mesaage尽量使用英文。

一些思考

  • 自动化视角,通过git commit template 自动生成comments模版的方式,可以在一定程度减少漏填AoneID的情况,同时可以提升commit message质量,如果要实现严格管控可以增加githook在checkin之前增加校验,或者接入持续集成在静态检测阶段校验git commit log的有效性。
  • 工程视角,git comment, code comment即代码,应该以标准优雅的方式在团队传承。

相关文章:

  • 使用渲染纹理的制作摄像头
  • 如何实现文件上传 - JavaWeb
  • Shiro之身份认证、与spring集成(入门级)
  • ES6语法详解(一)
  • 设计模式之六大原则
  • -HTMLCSS- 之京东首页学习
  • 导读
  • SSL/TLS协议运行机制的概述
  • dva/dynamic
  • Java基础-线程操作共享数据的安全问题
  • 三、Mac平台下集成 FFmpeg 框架
  • (汇总)os模块以及shutil模块对文件的操作
  • windows2008搭建FTP限制上传文件大小
  • 「转载」用户使用分享_开源PaaS Rainbond
  • 京东架构师-----解析Hystrix线程隔离技术
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript DOM 10 - 滚动
  • JavaScript实现分页效果
  • Java知识点总结(JavaIO-打印流)
  • Nacos系列:Nacos的Java SDK使用
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • PHP 的 SAPI 是个什么东西
  • React的组件模式
  • SQLServer之创建显式事务
  • vue-cli3搭建项目
  • 翻译--Thinking in React
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • PostgreSQL之连接数修改
  • ​linux启动进程的方式
  • ​批处理文件中的errorlevel用法
  • ​一些不规范的GTID使用场景
  • #pragma data_seg 共享数据区(转)
  • (1)(1.13) SiK无线电高级配置(六)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (接口自动化)Python3操作MySQL数据库
  • (四) 虚拟摄像头vivi体验
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net连接oracle数据库
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @ConditionalOnProperty注解使用说明
  • @RestControllerAdvice异常统一处理类失效原因
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [2016.7 day.5] T2
  • [BT]BUUCTF刷题第4天(3.22)