欧美精品在线一区二区三区_亚洲女同精品视频_日韩一区免费_国产欧美久久久精品免费_国产这里只有精品_僵尸再翻生在线观看_久久99精品国产一区二区三区_亚洲免费一区二区_女教师淫辱の教室蜜臀av软件_中文字幕国产一区二区

讓你的 commit 更有價值

2020-7-29    seo達人

提交規范

AngularJS 在開發者文檔中關于 git commit 的指導說明,提到嚴格的 git commit 格式規范可以在瀏覽項目歷史的過程中看到更易讀的信息,并且能用 git commit 的信息直接生成 AngularJS 的 change log 。


commit messages 格式規范

commit messages 由 header 、body 、footer 組成。


header 又包含 type 、scope 、subject 。header 是必需的,不過其中的 scope 是可選的。


body 和 footer 可以省略。


<type>(<scope>): <subject>

// 空行

<BLANK LINE>

<body>

// 空行

<BLANK LINE>

<footer>

注:為了能在 github 以及各種 git 工具中看得更清晰,commit messages 的每一行都不要超過 100 個字符。

Header

Type

類型必須是以下幾種之一:


feat: 新功能

fix: bug 修復

docs: 僅修改文檔

style: 修改格式(空格,格式化,省略分號等),對代碼運行沒有影響

refactor: 重構(既不是修 bug ,也不是加功能)

build: 構建流程、外部依賴變更,比如升級 npm 包、修改 webpack 配置等

perf: 性能優化

test: 測試相關

chore: 對構建過程或輔助工具和庫(如文檔生成)的更改

ci: ci 相關的更改

除此之外,還有一個特殊的類型 revert ,如果當前提交是為了撤銷之前的某次提交,應該用 revert 開頭,后面加上被撤銷的提交的 header,在 body 中應該注明: This reverts commit <hash>. ,hash 指的就是將要被撤銷的 commit SHA 。


// 例如


revert: feat(user): add user type


This reverts commit ca16a365467e17915f0273392f4a13331b17617d.

Scope

scope 可以指定提交更改的影響范圍,這個視項目而定,當修改影響超過單個的 scope 時,可以指定為 * 。


Sbuject

subject 是指更改的簡潔描述,長度約定在 50 個字符以內,通常遵循以下幾個規范:


用動詞開頭,第一人稱現在時表述,例如:change 代替 changed 或 changes

第一個字母小寫

結尾不加句號(.)

Body

body 部分是對本地 commit 的詳細描述,可以分成多行。


跟 subject 類似,用動詞開頭,第一人稱現在時表述,例如:change 代替 changed 或 changes。


body 應該說明修改的原因和更改前后的行為對比。


Footer

footer 基本用在這兩種情況:


不兼容的改動( Breaking Changes ),通常用 BREAKING CHANGE: 開頭,后面跟一個空格或兩個換行符。剩余的部分就是用來說明這個變動的信息和遷移方法等。

關閉 Issue, github 關閉 Issue 的例子

// BREAKING CHANGE: 的例子

BREAKING CHANGE: isolate scope bindings definition has changed and

   the inject option for the directive controller injection was removed.


   To migrate the code follow the example below:


   Before:


   scope: {

     myAttr: 'attribute',

     myBind: 'bind',

     myExpression: 'expression',

     myEval: 'evaluate',

     myAccessor: 'accessor'

   }


   After:


   scope: {

     myAttr: '@',

     myBind: '@',

     myExpression: '&',

     // myEval - usually not useful, but in cases where the expression is assignable, you can use '='

     myAccessor: '=' // in directive's template change myAccessor() to myAccessor

   }


   The removed `inject` wasn't generaly useful for directives so there should be no code using it.




// Closes Issue 例子

Closes #2314, #3421

完整的例子

例一: feat

feat($browser): onUrlChange event (popstate/hashchange/polling)


Added new event to $browser:

- forward popstate event if available

- forward hashchange event if popstate not available

- do polling when neither popstate nor hashchange available


Breaks $browser.onHashChange, which was removed (use onUrlChange instead)

例二: fix

fix($compile): couple of unit tests for IE9


Older IEs serialize html uppercased, but IE9 does not...

Would be better to expect case insensitive, unfortunately jasmine does

not allow to user regexps for throw expectations.


Closes #392

Breaks foo.bar api, foo.baz should be used instead

例三: style

style($location): add couple of missing semi colons

查看更多例子

規范 commit message 的好處

首行就是簡潔實用的關鍵信息,方便在 git history 中快速瀏覽

具有詳實的 body 和 footer ,可以清晰的看出某次提交的目的和影響

可以通過 type 過濾出想要查找的信息,也可以通過關鍵字快速查找相關提交

可以直接從 commit 生成 change log

// 列舉幾個常用的 log 參數


// 輸出 log 的首行

git log --pretty=oneline


// 只輸出首行的 commit 信息。不包含 hash 和 合并信息等

git log --pretty=format:%s


// 查找有關“更新菜單配置項”的提交

git log --grep="更新菜單配置項"


// 打印出 chenfangxu 的提交

git log --author=chenfangxu


// 紅色的短 hash,黃色的 ref , 綠色的相對時間

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'

用工具實現規范提交

上面介紹了規范提交的格式,如果讓各位同學在 git commit 的時候嚴格按照上面的規范來寫,首先心智是有負擔的,得記住不同的類型到底是用來定義什么的,subject 怎么寫,body 怎么寫,footer 要不要寫。其次,對人的規范大部分都是反人性的,所以很可能在過不了多久,就會有同學漸漸的不按照規范來寫。靠意志力來控制自己嚴格按照規范來寫是需要額外耗費一些精力的,把精力耗費在這種事情上面實在有些浪費。


用工具實現規范提交的方案,一種是在提交的時候就提示必填字段,另一種是在提交后校驗字段是否符合規范。這兩種在實際項目中都是很有必要的。


Commitizen

Zen-like commit messages for internet citizens. 嗯~~一種禪意

Commitizen 是一個幫助撰寫規范 commit message 的工具。他有一個命令行工具 cz-cli,接下來會把使用 Commitizen 分成幾個階段來介紹。


體驗 git cz

// 全局安裝 Commitizen

npm install -g commitizen

你的倉庫可能還不是對 Commitizen 友好的,此時運行 git cz 的效果跟 git commit 一樣,也就是沒有效果。 不過,可以執行 npx git-cz 來體驗。


如果想直接運行 git cz 實現語義化的提交,可以根據 streamich/git-cz 文檔中說的全局安裝 git cz。


// 全局安裝 git cz

npm install -g git-cz

除此之外還有一種更推薦的方式,就是讓你的倉庫對 Commitizen 友好。


Commitizen 友好

全局安裝 Commitizen 后,用 cz-conventional-changelog 適配器來初始化你的項目


// 初始化 cz-conventional-changelog 適配器

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

上面的初始化做了三件事:


安裝 cz-conventional-changelog 依賴

把依賴保存到 package.json 的 dependencies 或 devDependencies 中

在根目錄的 package.json 中 添加如下所示的 config.commitizen

"config": {

   "commitizen": {

     "path": "./node_modules/cz-conventional-changelog"

   }

 }

或者,在項目根目錄下新建一個 .czrc 文件,內容設置為


{

 "path": "cz-conventional-changelog"

}

現在運行 git cz 效果如下:




cz-customizable 自定義中文配置

通過上面的截圖可以看到,提交的配置選項都是英文的,如果想改成中文的,可以使用 cz-customizable 適配器。


運行下面的命令,注意之前已經初始化過一次了,這次再初始化,需要加 --force 覆蓋


npm install cz-customizable --save-dev


commitizen init cz-customizable --save-dev --save-exact --force

現在 package.json 中 config.commitizen 字段為:


"config": {

   "commitizen": {

     "path": "./node_modules/cz-customizable"

   }

 }

cz-customizable 文檔中說明了查找配置文件的方式有三種,我們按照第一種,在項目根目錄創建一個 .cz-config.js 的文件。按照給出的示例 cz-config-EXAMPLE.js 編寫我們的 config。 commit-type 可以參考 conventional-commit-types 。


可以點擊查看我配置好的文件 qiqihaobenben/commitizen-git/.cz-config.js ,里面中詳細的注釋。


commitlint 校驗提交

Commitizen 文檔中開始就介紹到,Commitizen 可以在觸發 git commit 鉤子之前就能給出提示,但是也明確表示提交時對 commit messages 的校驗也是很有用的。畢竟即使用了 Commitzen,也是能繞過去,所以提交最后的校驗很重要。


commitlint 可以檢查 commit messages 是否符合常規提交格式,需要一份校驗配置,推薦 @commitlint/config-conventional 。


npm i --save-dev @commitlint/config-conventional @commitlint/cli

在項目根目錄創建 commitlint.config.js 文件并設置校驗規則:


module.exports = {

 extends: ["@commitlint/config-conventional"],

 // rules 里面可以設置一些自定義的校驗規則

 rules: {},

};

在項目中安裝 husky ,并在項目根目錄新建 husky.config.js 文件,加入以下設置:


// 安裝 husky

npm install --save-dev husky



// husky.config.js 中加入以下代碼

module.exports = {

 "hooks": {

   "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"

 }

}

注意:因為 @commitlint/config-conventional 校驗規則遵循 Angular 的規范, 所以我們在用 cz-customizable 自定義中文配置時, 是按照給出的符合 Angular 規范的示例 cz-config-EXAMPLE.js 編寫.cz-config.js 的。但是如果你自定義的 Commitizen 配置不符合 Angular 規范,可以使用 commitlint-config-cz 設置校驗規則。(推薦還是按照 Angular 規范進行 cz-customizable 自定義配置)

// 安裝 commitlint-config-cz

npm install commitlint-config-cz --save-dev



// commitlint.config.js 改為

module.exports = {

 extends: [

   'cz'

 ]

};

git commit 觸發 git cz

在提交的時候,我們都習慣了 git commit ,雖然換成 git cz 不難,但是如果讓開發者在 git commit 時無感知的觸發 git cz 肯定是更好的,

而且也能避免不熟悉項目的人直接 git commit 提交一些不符合規范的信息。


我們可以在 husky.config.js 中設置:


"hooks": {

 "prepare-commit-msg": "exec < /dev/tty && git cz --hook || true",

}

注意: 在 window 系統,可能需要在 git base 中才能生效。

生成 CHANGELOG

standard-version

是一個使用 semver 和 conventional-commits 支持生成 CHANGELOG 進行版本控制的實用程序。

standard-version 不只是能生成 CHANGELOG , 還能根據 commit 的 type 來進行版本控制。


// 安裝 standard-verison

npm i --save-dev standard-version


// 在 package.json 中的 scripts 加入 standard-version

{

 "scripts": {

   "release": "standard-version"

 }

}

示例項目

可以查看 commitizen-git ,里面歸納了快速配置 Commitizen 友好倉庫的步驟。

差不多三五分鐘就能搞定。


可以看一下配置完后,執行 git commit 的效果。




擴展

更復雜的自定義提示

cz-customizable 中自定義配置項通常情況是夠用的,

commitlint 中校驗的規則基本上也是夠用的,但是會有比較硬核的開發者會覺得還是不夠,還要更多。比如一些 prompt 更加自定義,

提交時詢問的 question 添加更多的邏輯,比如可以把一些重要的字段校驗提前到 Commitizen 中,或者添加更多自定義的校驗。


如果真想這么干,那就去 fork 一份 cz-conventional-changelog 或者 cz-customizable 來改,

或者直接自己寫一個 adapter。


Commitizen 友好徽章

如果把倉庫配置成了對 Commitizen 友好的話,可以在 README.md 中加上這個小徽章

藍藍設計www.ocunn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://www.ocunn.cn

存檔

自拍偷拍亚洲综合| 好吊操视频这里只有精品| 久精品国产欧美| 国产精品日韩久久久久| 成人一级黄色片| 久久精品一区| 国内自拍一区| 久久国产中文字幕| 少妇精品久久久一区二区三区| 成人免费在线观看视频| 波多野结衣视频一区二区| av在线天堂播放| 欧美套图亚洲一区| 中文字幕在线资源| 欧美视频在线观看一区二区三区| 一级特黄aa大片| 自拍偷拍福利视频| 日韩不卡高清视频| 亚洲黄网在线观看| 九九热精品视频在线| 日韩大片免费在线观看| 精品少妇久久久久久888优播| 免费黄色国产视频| 国产又粗又长免费视频| 色欲AV无码精品一区二区久久| 成人免费无码大片a毛片| 精品一区二区视频在线观看| 国产a√精品区二区三区四区| 一级片免费在线观看视频| 999这里有精品| 久久久久久国产精品日本| 中文字幕欧美视频| 国产xxxx视频| 韩国女同性做爰三级| 女人又爽又黄免费女仆| 中文字幕第4页| 久久国产波多野结衣| 欧美日韩国产精品综合| 天天操天天射天天爽| 国产成人自拍视频在线| 波多野结衣视频观看| 91theporn国产在线观看| 国产裸体永久免费无遮挡| www.久久色| 超碰在线中文| 国产美女视频一区二区三区| 国产美女在线观看| 成av人片在线观看www| jizzjizz少妇亚洲水多| 亚洲精品a区| 在线观看爽视频| 国产在线|日韩| 亚洲日本va中文字幕| 乱亲女h秽乱长久久久| 日韩免费久久| 亚洲女人av| 国产精品一区二区久久精品爱涩| av影院午夜一区| 亚洲国产精品v| 亚洲h精品动漫在线观看| 在线观看视频欧美| 亚洲福利在线看| 久久国产加勒比精品无码| 欧美亚洲国产成人精品| 91在线中文字幕| 日韩电影大全在线观看| 日本免费不卡一区二区| 自拍一级黄色片| 嘿嘿视频在线观看| 国产免费一级视频| 人妻少妇精品无码专区久久| 巨骚激情综合| 欧美gv在线观看| 日本一区二区三区视频在线看| 丝袜av一区| 在线精品福利| 成人h动漫精品一区二| 精彩视频一区二区| 久久精品日韩一区二区三区| 日日夜夜一区二区| 97se亚洲国产综合自在线| 中文字幕人成不卡一区| 欧美伊人精品成人久久综合97| 精品动漫一区二区三区在线观看| 久久亚洲私人国产精品va| 国产精品男人的天堂| 日韩欧美亚洲日产国| 女人另类性混交zo| 国产一二三四区在线| 成年人视频免费| 无线免费在线视频| 国模冰冰炮一区二区| 国产在线日韩精品| 美腿丝袜一区二区三区| 亚洲欧洲av色图| 91精品国产综合久久久蜜臀粉嫩 | 欧美大片专区| 国产麻豆日韩欧美久久| 亚洲精品成人天堂一二三| 日韩欧美国产一区在线观看| 久久久久久久久久久av| 精品一区二区三区视频日产| 欧洲av无码放荡人妇网站| 五月婷婷综合在线观看| 日韩欧美在线观看免费| 神马久久精品| 成人豆花视频| 日韩香蕉视频| 国产精品少妇自拍| 日韩欧美视频一区| 日本国产一区二区三区| 亚洲啪啪av| 天堂va欧美va亚洲va老司机| caoporn国产| 黄色大片在线看| 在线精品视频一区| 日韩精品色哟哟| 亚洲综合成人在线| 中文字幕在线亚洲| 久久久精品有限公司| 第四色婷婷基地| 欧美三级韩国三级日本三斤在线观看 | 不卡av电影在线播放| 欧美亚洲动漫另类| 97国产在线视频| av动漫免费观看| 中文字幕第4页| 嫩草影院一区二区| 成人交换视频| 日本视频免费一区| 精品日本美女福利在线观看| 久久国内精品一国内精品| 欧美高清视频一区| 一级黄色免费视频| 亚洲国产精品久久久久久久| 蜜桃精品在线| 久久精品人人做人人爽电影蜜月| 亚洲国产日韩综合久久精品| www.久久撸.com| 亚洲国产精品123| 鲁丝一区二区三区| 在线视频三级| 欧美18xxxx| 99久久99久久精品免费看蜜桃| 日韩一区二区三区视频在线观看 | 欧美国产精品劲爆| 亚洲视频999| 久久久久资源| av女人的天堂| 最新国产在线| 欧洲vs亚洲vs国产| 99久久er热在这里只有精品66| 精品国产一区二区在线观看| 91手机在线播放| 91人人澡人人爽| 天天操天天干天天| 欧美绝顶高潮抽搐喷水合集| caoporn国产精品| 亚洲精品大尺度| 清纯唯美一区二区三区| 人妻精品久久久久中文| 国产二区视频在线观看| 日韩黄色大片| 一区二区三区四区五区视频在线观看 | 久操视频在线播放| 国产综合精品| 欧美性xxxxxxx| 国产盗摄xxxx视频xxx69| 欧美日韩亚洲自拍| 999久久久久久| 国产精品久久久久久久久久辛辛 | 国产亚洲欧洲997久久综合| 国产亚洲在线播放| 中文字幕日韩精品无码内射| 日韩精品在线免费看| www.综合| 国产精品综合网| 亚洲精选一区二区| 亚洲激情免费视频| 久久影视中文字幕| 91精品一区| 久久噜噜亚洲综合| 欧美精品性视频| 午夜免费精品视频| 亚洲黄色在线播放| 国产一区二区三区日韩精品| 亚洲欧美日韩在线不卡| 国产91在线视频| 亚洲av熟女高潮一区二区| 日韩a级作爱片一二三区免费观看| 不卡一区2区| 好吊成人免视频| 99免费在线视频观看| 一级在线观看视频| 国产精品186在线观看在线播放| 久久久国产精品一区二区中文| 欧美一区中文字幕| 视频一区二区三区免费观看| 国产精品99无码一区二区| 欧美美女日韩| 97久久超碰国产精品电影| 久久天天躁狠狠躁夜夜躁2014| 老熟妇仑乱视频一区二区| 亚洲欧美另类视频| 四虎成人av| 欧美日韩在线亚洲一区蜜芽| 蜜桃av噜噜一区二区三| 91久久国产视频| 亚洲一区二区三区日本久久九| 国产精品女同一区二区三区| 日韩av色综合| 女人又爽又黄免费女仆| 超碰成人av| 久久久久久久一区| 国产成人精品亚洲精品| 熟女俱乐部一区二区| 丁香花高清在线观看完整版| 国产成人aaa| 久久99久久99精品免观看粉嫩| 婷婷中文字幕在线观看| 成人高清免费观看mv| 理论电影国产精品| 久久精品久久久久| 日本黄色www| 国产原厂视频在线观看| 国产精品77777| 久久久久久国产精品| 中文字幕免费高清视频| 波多野结衣在线高清| xfplay精品久久| 国产精品久久久久久av福利| 国产尤物在线播放| 亚洲欧美久久精品| 天天亚洲美女在线视频| 欧洲一区二区在线| 97人妻一区二区精品免费视频| 国产日韩欧美一区二区三区| 欧美高清视频不卡网| 五月丁香综合缴情六月小说| 天堂在线第六区| 青青草原综合久久大伊人精品优势 | 91麻豆蜜桃一区二区三区| 国产精品福利久久久| 外国一级黄色片| 97久久综合精品久久久综合| 一本色道久久综合亚洲aⅴ蜜桃| 日产精品久久久一区二区| 99久久久国产精品无码免费| 亚洲视频碰碰| 最新中文字幕亚洲| 免费无码一区二区三区| se69色成人网wwwsex| 亚洲第一成人在线| 路边理发店露脸熟妇泻火| 国产在线制服美女| 国产毛片精品一区| 国产精品久久久久久久久久尿| 黄色一级片在线免费观看| 日韩av三区| 精品国产一区二区三区av性色 | 综合激情在线| 中文日韩在线观看| 国产精品亚洲无码| 精品国产一区二| 欧美日韩国产中文| 黄色av免费在线播放| 好吊日视频在线观看| 国产精品区一区二区三| 欧美日韩在线不卡一区| 天天综合网在线| 黑人精品欧美一区二区蜜桃| 国产精品成久久久久三级| 综合激情网五月| 亚洲精品97| 欧美成年人视频| 日本在线一级片| 国语产色综合| 亚洲欧美一区二区三区在线| 久久久久亚洲AV成人无码国产| 欧美aaaaaa| 欧美久久久一区| 永久免费黄色片| 国内自拍亚洲| 欧美乱妇一区二区三区不卡视频| 国产又粗又长又大的视频| 松下纱荣子在线观看| 狠狠色香婷婷久久亚洲精品| 成人在线观看黄| 欧美片第1页| 欧美三级中文字幕在线观看| 一级黄色录像在线观看| 成人高清一区| 91精品国产黑色紧身裤美女| 在线观看视频在线观看| 欧美2区3区4区| 日韩激情片免费| 国产18无套直看片| 日韩av片子| 欧美日本在线视频中文字字幕| 国产午夜福利片| 国产亚洲成人一区| 91精品久久久久久久久中文字幕 | 日韩video| 三级资源在线| 在线观看网站黄不卡| 99精品999| 91亚洲无吗| 欲色天天网综合久久| 欧美精品一级片| 国产精品尤物| 国产女精品视频网站免费| 六月婷婷综合网| 国产无遮挡一区二区三区毛片日本| 亚洲欧美在线网| 日本在线视频中文有码| 欧美综合视频在线观看| 亚洲国产精品狼友在线观看| 日韩电影不卡一区| 久久综合伊人77777| 天干夜夜爽爽日日日日| 精品一区二区久久久| 国精产品99永久一区一区| 黄色片视频在线观看| 亚洲一区二区精品3399| 我要看一级黄色大片| 视频成人永久免费视频| 日韩一区二区三区在线播放| 在线观看日本视频| 国产麻豆日韩欧美久久| 色一情一乱一伦一区二区三欧美| 成人在线资源网址| 日韩av在线电影| 美腿丝袜在线亚洲一区| 美国av一区二区三区| 成人短视频在线观看| 日本电影亚洲天堂一区| 国产精品一区二区人妻喷水| 欧美一站二站| 国产精品video| 一个人免费观看视频www在线播放| 亚洲欧美另类小说视频| www.cao超碰| 九热爱视频精品视频| 热re91久久精品国99热蜜臀| 日韩在线视频观看免费| 亚洲欧美怡红院| 国产农村妇女精品久久| 欧美日韩久久精品| 国产精品久久久久久久7电影| 一本到av在线| 精品美女久久久久久免费| 少妇一级淫免费观看| 欧美激情第二页| 国产精品国产一区二区| 主播国产精品| 亚洲国产一区二区三区四区| 精品成人久久久| 从欧美一区二区三区| 日韩中字在线观看| 国产精品白丝av嫩草影院| 97精品国产97久久久久久免费| 亚洲精选一区二区三区| 亚洲一级二级三级在线免费观看| 91精产国品一二三| 欧美日本一区| 精品视频在线观看| 韩日毛片在线观看| 最新国产精品亚洲| 欧美视频久久久| 欧美网站在线观看| av成人免费网站| 成人一级视频在线观看| 欧美日韩一区二区在线免费观看| 欧美三级午夜理伦三级小说| 国产91网红主播在线观看| аⅴ资源新版在线天堂| 91精品蜜臀在线一区尤物| 日韩大片免费在线观看| 久久综合色婷婷| 国产乱叫456| 亚洲茄子视频| 亚洲在线色站| 9l视频自拍蝌蚪9l视频成人| 欧美尤物巨大精品爽| 国产免费av高清在线| 精品欧美乱码久久久久久1区2区| 国产午夜麻豆影院在线观看| 中文字幕在线免费不卡| 中文字幕 亚洲一区| 美女视频免费一区| 免费毛片网站在线观看| 欧美精选视频在线观看| 精品视频一区在线| 99国内精品久久久久| 国产精品电影久久久久电影网| 老司机福利在线视频| 亚洲欧美制服第一页| 亚洲国产精品久久久久久6q| 欧美在线观看视频一区二区 | 免费欧美一级视频|