「約定大於配置」的思想在軟體工程領域得到了廣泛的應用,例如 spring、angular 等大型專案。其目的只有乙個:減少軟體開發人員做決定的數量,提公升開發效率。這種思想同樣被應用到 git 提交當中,即「約定式提交」。
約定式提交規範是一種基於提交訊息的輕量級約定。所謂輕量級約定,說白了,就是有一套用於建立提交訊息的簡單規則,這套規則源自於angular 提交規範,規定了提交訊息的整體結構:
():
翻譯成中文就是:
《提交型別》(《作用域》): 《簡要描述》
// 空一行
《正文》
// 空一行
《腳注》
第一行是 header 部分,必須使用型別字段字首,它由乙個名詞組成,只能是下面幾種之一:
其後接乙個可選的作用域字段,作用域必須是乙個描述某部分**的名詞,並用圓括號包圍,例如:fix(parser)
。每個專案的作用域都不一樣,在基於 lerna 的 monorepo 倉庫中,通常用 package 名稱作為 scope,例如:
body 部分是對本次 commit 的詳細描述,可以分成多行,提交者自由發揮。$ tree packages
然後緊接著乙個冒號(英文半形)和空格。packages
├── api
└── web
最後是簡短描述,建議不要超過 50 個字元。
總結如下:
(): │ │ │
│ │ └─⫸ 描述:指的是對**變更的簡短總結
│ │
│ └─⫸ 作用域: animations|bazel|benchpress|common|compiler|...
│ └─⫸ 提交型別:build|ci|docs|feat|fix|perf|refactor|test...
footer 部分一般用於記錄不相容的改動,以breaking change
開頭,後面是對變動的描述、以及變動理由和遷移方法。最後還可以新增關閉的 issue。
breaking
change
:// 空一行
// 空一行
// 空一行
fixes #
有了約定式提交,不僅降低了開發者的心智負擔、增強團隊凝聚力,還可以編寫基於約定的自動化工具,優點如下:
在專案提交過程中,為了防止亂寫提交訊息,可使用 commitlint 配合 husky 來實現如下的效果:
可以看到,當提交訊息不符合「約定」的時候,直接拒絕此次提交。首先安裝依賴包:
$ yarn add husky @commitlint/config-conventional @commitlint/cli --dev
然後新增commitlint.config.js
檔案:
module.exports =
最後在 package.json 中新增如下配置即可:
"husky"
:}
@commitlint/prompt-cli 包還提供了乙個命令列互動式建立提交訊息的方式,效果如下:
這個工具嚴格按照提交訊息撰寫的流程引導開發者就行填寫,而且可以看到,每一步都有詳細的提示,安裝方法:
$ yarn add @commitlint/prompt-cli --dev
然後在 package.json 中新增 scripts:
"scripts"
:,
下次提交不要直接用git commit -am '***'
,而是用npm run commit
,會自動開啟上面的命令列互動流程。
有了規範化的提交訊息,還可以用 conventional-changelog-cli 來自動生成 changelog,例如提交資訊為:
可自動讀取所有提交訊息,並生成 changelog:
首先安裝依賴:
$ yarn add conventional-changelog-cli --dev
然後在 pacakge.json 中新增 scripts:
"scripts"
:,
最後執行:
$ npm run changelogs
命名規範 C 命名規範約定
命名規則約定 序 號描述示例 1類命名混合使用大小寫,首字母大寫 classname 2型別定義,包括列舉和typedef,混合使用大小寫,首字母大寫 typename 3區域性變數混合使用大小寫,且首字母小寫,名字與底層資料型別無關,且應該反映其所代表的事物 localvariable 4子程式引...
Git 提交規範
無規矩不成方圓,程式設計也一樣。乙個commit只做一件事情,若乙個commit做了多件事情需要拆分成多個commit 嚴格遵循commit message格式 每次只允許提交乙個commit,若本地有多個commit等待提交,必須等前面的commit合併進入主版本庫並在本地合併完成後才可提交後面的...
Git提交規範
type為必填項,用於指定commit的型別,約定了feat fix兩個主要type,以及docs style build refactor revert五個特殊type,其餘type暫不使用。主要type feat 增加新功能 fix 修復bug 特殊type docs 只改動了文件相關的內容 s...