Git: 教你如何在Commit时有话可说
NewPickens
9年前
<p>不知道大家有没有观察过那些在Github上Star数位居前列的项目,它们无一例外的都拥有完善的文档体系和高覆盖的测试用例。要做到完善没有规范肯定是不行的,代码要有代码的规范,协作要有协作的规范。我们今天要说的主题就是关于Git中记录Commit Message的参考规范。先来看两张图,一张来自国际知名项目,一张是国内某知名项目(笑)。</p> <p>国际知名项目AngularJS</p> <p><img src="https://simg.open-open.com/show/05b963fc7aa039cedf48c6ae629d6b88.png"></p> <p>国内知名项目MingGeJS</p> <p><img src="https://simg.open-open.com/show/0e6b7dac2882785f31aa929925826f2c.png"></p> <p>从上面两张图中,我想你已经能看出一些端倪来了吧,相较而言哪种更加能促进开发不言自明。当然,我举这个国内知名项目比较极端,不过整体而言都普遍存在Commit Message比较随意的现象。</p> <h3>Commit规范</h3> <p>顺着思路,这一步应该给方案了,方案就是上图AngularJS项目中用到的Git Commit Guidelines。</p> <p>Commit Message 格式</p> <pre> <code><type>(<scope>): <subject> <空行> <body> <空行> <footer></code></pre> <p><code>上面是一次Commit后Message格式规范,分成标题,内容详情,结尾三个部分,各有各的用处,没有多余项。</code></p> <p><code>头部即首行,是可以直接在页面中预览的部分,入上面图中所示,一共有三个部分<type> ,<scope> ,<subject> ,含义分别如下 </code></p> <p><code>Type</code></p> <ul> <li> <p><code>feat:新功能(feature)</code></p> </li> <li> <p><code>fix:修补bug</code></p> </li> <li> <p><code>docs:文档(documentation)</code></p> </li> <li> <p><code>style: 格式(不影响代码运行的变动)</code></p> </li> <li> <p><code>refactor:重构(即不是新增功能,也不是修改bug的代码变动)</code></p> </li> <li> <p><code>test:增加测试</code></p> </li> <li> <p><code>chore:构建过程或辅助工具的变动</code></p> </li> </ul> <p><code>Scope</code></p> <p><code>用来说明本次Commit影响的范围,即简要说明修改会涉及的部分。这个本来是选填项,但从AngularJS实际项目中可以看出基本上也成了必填项了。</code></p> <p><code>Subject</code></p> <p><code>用来简要描述本次改动,概述就好了,因为后面还会在Body里给出具体信息。并且最好遵循下面三条:</code></p> <ul> <li> <p><code>以动词开头,使用第一人称现在时,比如change,而不是changed或changes</code></p> </li> <li> <p><code>首字母不要大写</code></p> </li> <li> <p><code>结尾不用句号(.)</code></p> </li> </ul> <p><code>Body</code></p> <p><code><body>里的内容是对上面subject 里内容的展开,在此做更加详尽的描述,内容里应该包含修改动机和修改前后的对比。 </code></p> <p><code>Footer</code></p> <p><code>footer里的主要放置 <strong>不兼容变更</strong> 和 <strong>Issue关闭</strong> 的信息,参考下面两个例子 </code></p> <p><code><img src="https://simg.open-open.com/show/d91b35b0163795e303e328624458c1e0.jpg"> </code></p> <p><code><img src="https://simg.open-open.com/show/49c37ad9a5a46550bfc6e83094aade79.jpg"> </code></p> <p>来自: <a href="http://mp.weixin.qq.com/s?__biz=MzAwNDYwNzU2MQ==&mid=401622986&idx=1&sn=470717939914b956ac372667ed23863c&scene=23&srcid=0114ZcTNyAMH8CLwTKlj6CTN#rd">微信</a></p>