1. 背景Git 是目前世界上最先進(jìn)的分布式版本控制系統(tǒng),在我們平時(shí)的項(xiàng)目開(kāi)發(fā)中已經(jīng)廣泛使用。而當(dāng)我們使用Git提交代碼時(shí),都需要寫(xiě)Commit Message提交說(shuō)明才能夠正常提交。 git commit -m "提交" 然而,我們平時(shí)在編寫(xiě)提交說(shuō)明時(shí),通常會(huì)直接填寫(xiě)如"fix"或"bug"等不規(guī)范的說(shuō)明,不規(guī)范的提交說(shuō)明很難讓人明白這次代碼提交究竟是為了什么。而在工作中,一份清晰簡(jiǎn)介規(guī)范的 Commit Message 能讓后續(xù)代碼審查、信息查找、版本回退都更加高效可靠。因此我們需要一些工具來(lái)約束開(kāi)發(fā)者編寫(xiě)符合規(guī)范的提交說(shuō)明。 2. 提交規(guī)范那么,什么樣的提交說(shuō)明才能符合規(guī)范的說(shuō)明呢?不同的團(tuán)隊(duì)可以制定不同的規(guī)范,當(dāng)然,我們也可以直接使用目前流行的規(guī)范,比如[Angular Git Commit Guidelines。接下來(lái)將會(huì)對(duì)目前流行的Angular提交規(guī)范進(jìn)行介紹。 2.1 提交格式符合規(guī)范的Commit Message的提交格式如下,包含了頁(yè)眉(header)、正文(body)和頁(yè)腳(footer)三部分。其中,header是必須的,body和footer可以 忽略。 <type>(<scope>): <subject>// 空一行<body>// 空一行<footer> 2.2 頁(yè)眉設(shè)置頁(yè)眉(header)通常只有一行,包括了提交類型(type)、作用域(scope)和主題(subject)。其中,type和subject是必須的,scope是可選的。 2.2.1 提交類型 提交類型(type)用于說(shuō)明此次提交的類型,需要指定為下面其中一個(gè): 2.2.2 作用域 作用域(scope)表示此次提交影響的范圍。比如可以取值api,表明只影響了接口。 2.2.3 主題 主題(subject)描述是簡(jiǎn)短的一句話,簡(jiǎn)單說(shuō)明此次提交的內(nèi)容。 2.3 正文和頁(yè)腳正文(body)和頁(yè)眉(footer)這兩部分不是必須的。 如果是破壞性的變更,那就必須在提交的正文或腳注加以展示。一個(gè)破壞性變更必須包含大寫(xiě)的文本 BREAKING CHANGE,緊跟冒號(hào)和空格。腳注必須只包含 BREAKINGCHANGE、外部鏈接、issue引用和其它元數(shù)據(jù)信息BREAKING CHANGE、外部鏈接、issue 引用和其它元數(shù)據(jù)信息BREAKINGCHANGE、外部鏈接、issue引用和其它元數(shù)據(jù)信息。例如修改了提交的流程,依賴了一些包,可以在正文寫(xiě)上:BREANKING CHANGE:需要重新npm install,使用npm run cm代替git commit。 下面給出了一個(gè)Commit Message例子,該例子中包含了header和body。 chore: 引入commitizenBREANKING CHANGE:需要重新npm install,使用npm run cm代替git commit 當(dāng)然,在平時(shí)的提交中,我們也可以只包含header,比如我們修改了登錄頁(yè)面的某個(gè)功能,那么可以這樣寫(xiě) Commit Message。 feat(登錄):添加登錄接口 3.使用Git命令行提交信息為了規(guī)范commit信息,可以配置一個(gè)全局的 commit message template ,所有提交的 commit message 都按照這個(gè)配置來(lái)寫(xiě) 首先新建模板文件: 在任意目錄下新建.getmessage.txt ,填入以下模板 # <類型>:(影響范圍) <主題> # <body># <footer># 類型字段包含: # feat:新功能(feature) # fix:修復(fù)bug # doc:文檔(documentation) # style: 格式化 ESLint調(diào)整等(不影響代碼運(yùn)行的變動(dòng)) # refactor:重構(gòu)(即不是新增功能,也不是修改bug的代碼變動(dòng)) # test:增加測(cè)試 # build: 影響構(gòu)建系統(tǒng)或外部依賴項(xiàng)的更改(maven,gradle,npm 等等) # ci: 對(duì)CI配置文件和腳本的更改 # chore:對(duì)非 src 和 test 目錄的修改 # revert: Revert a commit # 影響范圍: # 用于說(shuō)明 commit 影響的范圍,比如修改的登錄頁(yè)、賬戶中心頁(yè)等 # 主題: # commit目的的簡(jiǎn)短描述,不超過(guò)50個(gè)字符 # Body 部分是對(duì)本次 commit 的詳細(xì)描述,可以分成多行 # Footer用來(lái)關(guān)閉 Issue或以BREAKING CHANGE開(kāi)頭,后面是對(duì)變動(dòng)的描述、 # 以及變動(dòng)理由和遷移方法 3. Commitizen雖然有了規(guī)范,但是還是無(wú)法保證每個(gè)人都能夠遵守相應(yīng)的規(guī)范,因此就需要使用一些工具來(lái)保證大家都能夠提交符合規(guī)范的Commit Message。常用的工具包括了可視化工具和信息交互工具,其中Commitizen是常用的Commitizen工具,接下來(lái)將會(huì)先介紹Commitizen的使用方法。 3.1 什么是CommitizenCommitizen是一個(gè)撰寫(xiě)符合上面Commit Message標(biāo)準(zhǔn)的一款工具,可以幫助開(kāi)發(fā)者提交符合規(guī)范的Commit Message。 3.2 安裝Commitizen可以使用npm安裝Commitizen。其中,cz-conventional-changelog是本地適配器。 npm install commitizen cz-conventional-changelog --save-dev 3.3 配置Commitizen安裝好Commitizen之后,就需要配置Commitizen,我們需要在package.json中加入以下代碼。其中,需要增加一個(gè)script,使得我們可以通過(guò)執(zhí)行npm run cm 來(lái)代替git commit,而path為cz-conventional-changelog包相對(duì)于項(xiàng)目根目錄的路徑。 ”script": { "cm: "git-cz"},"config": {"commitizen": {"path": "./node_modules/cz-conventional-changelog"}} 配置完成之后,我們就可以通過(guò)執(zhí)行npm run cm來(lái)代替git commit,接著只需要安裝提示,完成header、body和footer的編寫(xiě),就能夠編寫(xiě)出符合規(guī)范的 Commit Message。 4. vscode可視化提交工具除了使用Commitizen信息交互工具來(lái)幫助我們規(guī)范Commit Message之外,我們也可以使用編譯器自帶的可視化提交工具。接下來(lái),將會(huì)介紹VSCode可視化提交工具的使用方法。 在VSCode的EXTENSIONS中找到 git-commit-plugin插件,點(diǎn)擊install進(jìn)行安裝。 安裝完成之后,可以通過(guò)git add添加要提交的文件,接著,在Source Control點(diǎn)擊show git commit template圖標(biāo),開(kāi)始編寫(xiě)Commit Message信息。 接下來(lái)只需要按照指引進(jìn)行Commit Message的編寫(xiě)。 當(dāng)編寫(xiě)完成之后,可以得到符合規(guī)范的Commit Message,這個(gè)時(shí)候就可以放心將Commit Message及所修改的文件進(jìn)行提交啦。 5. idea可視化工具idea 安裝此插件:Git Commit Template
影響范圍: 用于說(shuō)明commit影響的范圍,比如 修改的登錄頁(yè),賬戶中心等 Body 部分是對(duì)本次 commit 的詳細(xì)描述,可以分成多行 Footer用來(lái)關(guān)閉 Issue或以BREAKING CHANGE開(kāi)頭,后面是對(duì)變動(dòng)的描述、 以及變動(dòng)理由和遷移方法 https://www./show/4/705714.html https://blog.csdn.net/fd2025/article/details/124543690 |
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》