git代碼審查以及l(fā)og規(guī)范化的解決方案

前言

公司前端團隊百廢待興,很多流程都沒有完善起來株旷,這不最近就接到了一個小任務(wù):規(guī)范化大家代碼提交的格式以及在提交前保證代碼的質(zhì)量再登。這里的質(zhì)量并沒有做到單元測試覆蓋率100%,集成測試全部通過灾常,而是簡單地通過語法檢查霎冯,單元測試的覆蓋問題在后續(xù)的項目完善中會加進來,所以今天只是講兩點:

  1. log提交格式規(guī)范化
  2. Eslint檢查100%通過

尋找解決方案

之前在上一家公司做過SVN的代碼提交規(guī)范化钞瀑,使用python在SVN服務(wù)器上做語法檢查沈撞,并且在客戶端提交log的時候可以自動化的填寫格式到log框里然后只需要按照給定的格式來寫就行了。

但是git的思想與SVN不一樣雕什,git的每次提交都是在本地完成的缠俺,只有最后的push才會和服務(wù)器交互显晶,所以不可能在服務(wù)器這邊寫腳本來檢查。

大家都知道git有hooks的概念壹士,在每個倉庫中都有.git/hooks/這個目錄磷雇,hooks可以在git中指定的一些重要節(jié)點上調(diào)用對應(yīng)的鉤子函數(shù)(文件),一想到這個就覺得應(yīng)該可以使用這個躏救。

但是后來失望了唯笙,因為本地倉庫的hooks的代碼不能上傳到服務(wù)器上,大家都共享不了這些配置盒使,并且這些配置在git初始化的時候都是默認的崩掘,總不能每次下載代碼之后還需要手工去修改這些hooks文件吧。

所以直接使用這個本地的hooks貌似不可行少办,于是谷歌搜一搜苞慢,終于找到一個神器:ghooks

ghooks簡單介紹

該軟件包是為nodejs打造的英妓,可以幫助我們實現(xiàn)本地的git hooks挽放,支持的git hooks的所有節(jié)點,關(guān)鍵它有很簡單的配置蔓纠。其配置在package.json文件中辑畦,所以npm有的命令都可以使用

如何規(guī)范化log的提交格式

有了ghooks這個神器,那么我們知道只需要在commit-msg的階段就可以檢查提交日志的格式贺纲,不符合格式即刻駁回航闺。那么有沒有插件可以幫助我們檢查代碼格式呢?

萬能的NPM圈中必然存在這么的猴誊,Angular代碼提交指定了一套嚴格的流程潦刃,從而衍生出了一些插件來幫助開發(fā)者log的規(guī)范化,所以這時隆重介紹validate-commit-msg懈叹,這款插件正是針對Angular代碼提交的規(guī)范做的一款檢查的插件乖杠。

于是我們有了這兩款神器,應(yīng)該可以滿足我們的要求了澄成。開始配置:

package.json的配置

我們給出的配置是:(給出的是需要配置的一些需要改的字段)

"scripts": {
    "lint": "eslint ./ --cache --fix --ignore-pattern .gitignore",
    "precommit-msg": "echo Pre-commit checking...please wait && exit 0"
  },
  "config": {
    "validate-commit-msg": {
      "types": [
        "feat",
        "fix",
        "docs",
        "style",
        "refactor",
        "perf",
        "test",
        "chore",
        "revert"
      ],
      "warnOnFail": false,
      "maxSubjectLength": 100,
      "subjectPattern": ".+",
      "subjectPatternErrorMsg": "subject does not match subject pattern!",
      "helpMessage": ""
    },
    "ghooks": {
      "pre-commit": "npm run precommit-msg && npm run lint",
      "commit-msg": "validate-commit-msg"
    }

更加詳細的可以參考:demo-for-ghooks

哈哈胧洒,貌似大功告成了~~~~

進一步優(yōu)化

查看Angular給的代碼提交規(guī)范,可以發(fā)現(xiàn)貌似很長的一大段標(biāo)準(zhǔn)墨状,有的時候我們總是記不住格式以及那些字段的含義卫漫,那么怎么辦呢?

還好git hooks提供了一個重要的節(jié)點:prepare-commit-msg肾砂,這個節(jié)點可以提供給我們在打開git log編輯器之前生成一個默認的git log模板列赎。于是NPM中又有另外一個神器來生成這些信息:prepare-commit-msg-angular

該神器可以生成一個很標(biāo)準(zhǔn)的log模板镐确,如下:

#???????????????????????????????????????????????????????????????????????????????????????????????????
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch develop
# Your branch is up-to-date with 'origin/develop'.
#
# Changes to be committed:
#       modified:   package.json
#
# ------------------------ >8 ------------------------
# <type>(<scope>): <subject>
# <BLANK LINE>
# <body>
# <BLANK LINE>
# <footer>
#---
# TYPE must be one of the following:
# - feat: A new feature (will appear in CHANGELOG)
# - fix: A bug fix (will appear in CHANGELOG)
# - docs: Documentation only changes
# - style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
# - refactor: A code change that neither fixes a bug nor adds a feature
# - perf: A code change that improves performance (will appear in CHANGELOG)
# - test: Adding missing tests
# - chore: Changes to the build process or auxiliary tools and libraries such as documentation generation
#
# SCOPE could be anything specifying place of the commit change.
# For example $location, $browser, $compile, $rootScope, ngHref, ngClick, ngView, etc...
#
# SUBJECT contains succinct description of the change:
# - use the imperative, present tense: "change" not "changed" nor "changes"
# - do not capitalize first letter
# - no dot (.) at the end
#---
# https://github.com/ajoslin/conventional-changelog/blob/master/conventions/angular.md

于是你在寫日志的時候哪些字段忘記了可以參考下面的提示包吝,如果這個你覺得太麻煩饼煞,還有一款可交互的日志填寫神器:commitizen

該神器可以交互地提示你填寫git log诗越,唯一一個我在應(yīng)用中覺得缺點的是:每次都是先書寫完git log信息后才執(zhí)行g(shù)hooks那些檢查砖瞧,此時如果我的Eslint或者單元測試失敗的話那么你剛才寫的檢查就全白寫了。嚷狞。块促。。

所以最后就沒有集成該插件進去床未。

該神器的配置可以參考:http://mp.weixin.qq.com/s?__biz=MzAwNDYwNzU2MQ==&mid=401622986&idx=1&sn=470717939914b956ac372667ed23863c&scene=1&srcid=0114ZcTNyAMH8CLwTKlj6CTN#rd

完整的配置可以參考:https://github.com/linxiaowu66/demo-for-ghooks

其中prepare-commit-msg-angular和validate-commit-msg有一個地方不匹配褂乍,所以后來自己更新了一下源碼,參考:https://github.com/linxiaowu66/prepare-commit-msg-angular

缺點

該方案不支持使用Git UI工具即硼,只能使用命令行來提交代碼。所以想使用Git UI工具的請忽略~~~~

參考

  1. http://codeheaven.io/simple-git-hooks-with-ghooks/
  2. https://github.com/cmalard/prepare-commit-msg-angular
  3. https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

最后

歡迎訪問我的個人博客主頁:豆米的博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屡拨,一起剝皮案震驚了整個濱河市只酥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呀狼,老刑警劉巖裂允,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哥艇,居然都是意外死亡绝编,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門貌踏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來十饥,“玉大人,你說我怎么就攤上這事祖乳《憾拢” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵眷昆,是天一觀的道長蜒秤。 經(jīng)常有香客問我,道長亚斋,這世上最難降的妖魔是什么作媚? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮帅刊,結(jié)果婚禮上纸泡,老公的妹妹穿的比我還像新娘。我一直安慰自己厚掷,他們只是感情好弟灼,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布级解。 她就那樣靜靜地躺著,像睡著了一般田绑。 火紅的嫁衣襯著肌膚如雪勤哗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天掩驱,我揣著相機與錄音芒划,去河邊找鬼。 笑死欧穴,一個胖子當(dāng)著我的面吹牛民逼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涮帘,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拼苍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了调缨?” 一聲冷哼從身側(cè)響起疮鲫,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弦叶,沒想到半個月后俊犯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡伤哺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年燕侠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立莉。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绢彤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜓耻,到底是詐尸還是另有隱情杖虾,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布媒熊,位于F島的核電站奇适,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芦鳍。R本人自食惡果不足惜嚷往,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柠衅。 院中可真熱鬧皮仁,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至势誊,卻和暖如春呜达,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粟耻。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工查近, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挤忙。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓霜威,卻偏偏與公主長得像,于是被迫代替她去往敵國和親册烈。 傳聞我的和親對象是個殘疾皇子戈泼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容