Git: 教你如何在Commit時有話可說


Git: 教你如何在Commit時有話可說

 

不知道大家有沒有觀察過那些在Github上Star數位居前列的項目,它們無一例外的都擁有完善的文檔體系和高覆蓋的測試用例。要做到完善沒有規范肯定是不行的,代碼要有代碼的規范,協作要有協作的規范。我們今天要說的主題就是關於Git中記錄Commit Message的參考規范。先來看兩張圖,一張來自國際知名項目,一張是國內某知名項目(笑)。

國際知名項目AngularJS

國內知名項目MingGeJS

從上面兩張圖中,我想你已經能看出一些端倪來了吧,相較而言哪種更加能促進開發不言自明。當然,我舉這個國內知名項目比較極端,不過整體而言都普遍存在Commit Message比較隨意的現象。

Commit規范

順着思路,這一步應該給方案了,方案就是上圖AngularJS項目中用到的Git Commit Guidelines。

Commit Message 格式
<type>(<scope>): <subject>
<空行>
<body>
<空行>
<footer>

上面是一次Commit后Message格式規范,分成標題,內容詳情,結尾三個部分,各有各的用處,沒有多余項。

頭部即首行,是可以直接在頁面中預覽的部分,入上面圖中所示,一共有三個部分<type>,<scope>,<subject>,含義分別如下

Type
  • feat:新功能(feature)

  • fix:修補bug

  • docs:文檔(documentation)

  • style: 格式(不影響代碼運行的變動)

  • refactor:重構(即不是新增功能,也不是修改bug的代碼變動)

  • test:增加測試

  • chore:構建過程或輔助工具的變動

Scope

用來說明本次Commit影響的范圍,即簡要說明修改會涉及的部分。這個本來是選填項,但從AngularJS實際項目中可以看出基本上也成了必填項了。

Subject

用來簡要描述本次改動,概述就好了,因為后面還會在Body里給出具體信息。並且最好遵循下面三條:

  • 以動詞開頭,使用第一人稱現在時,比如change,而不是changed或changes

  • 首字母不要大寫

  • 結尾不用句號(.)

Body

<body>里的內容是對上面subject里內容的展開,在此做更加詳盡的描述,內容里應該包含修改動機和修改前后的對比。

Footer

footer里的主要放置不兼容變更Issue關閉的信息,參考下面兩個例子

Revert

此外如果需要撤銷之前的Commit,那么本次Commit Message中必須以revert:開頭,后面緊跟前面描述的Header部分,格式不變。並且,Body部分的格式也是固定的,必須要記錄撤銷前Commit的SHA值。

實踐利器

上面就是AngularJS目前的Commit規范,相信第一次接觸的話不免會有些頭大,這時如果有什么能Step by Step的提醒或者可視化的演示就好了。OK,你來對地兒了,現在就來說說如何把規范變為可執行的具體步驟!

安裝利器Commitiz

為了讓我們能把這些規范應用到實際使用中,我們要借助於Commitizen這個Node工具,它會在我們Commit的過程中更具規范的內容來引導我們如何一步一步實施規范。當然,規范這種東西就沒有唯一的,各家有各家的不同,這一點當然也被該工具想到了,你也可以自定義一份自己的規范,以插件的形式讓Commitizen來根據自家規范提醒你。

安裝
npm install -g commitizen
配置

上一步我們在全局范圍內安裝了commitizen,之后我們就可以在Git倉庫中配置我們的Commit規范了。打開項目執行如下命令:

commitizen init cz-conventional-changelog --save --save-exact

上面的cz-conventional-changelog就是AngularJS的規范,其它的規范你可以自行到官網上找找看,不行就自己花時間擬定一份吧。此命令幫你完成了下載cz-conventional-changelog規范,配置package.json(添加依賴和配置應用規范),想看具體改動打開package.json即可。

使用

至此就算完整的安裝完了,之后在需要git commit的地方更換成git cz指令即可呼出Commit的交互界面,來step by step的提醒你上面規范的各處該怎么填,是在不明在自己建一個項目練習幾次就好了。順手貼張動圖,沒看到文末的同學可惜了。(PS: 覺得有用要轉發哈)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM