久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

深入了解Git Hooks的使用

本篇文章給大家?guī)砹岁P(guān)于Git的相關(guān)知識(shí),其中主要介紹了Hooks使用說明,Git除了版本控制,還有一些其他的高級(jí)功能,其中之一就是Git Hooks,明面意思就是鉤子,可以類比于鉤子函數(shù),希望對(duì)大家有幫助。

深入了解Git Hooks的使用

推薦學(xué)習(xí):《Git學(xué)習(xí)教程》

Git 除了版本控制,還有一些其他的高級(jí)功能,其中之一就是Git Hooks,明面意思就是鉤子,可以類比于鉤子函數(shù)。簡(jiǎn)單說就是Hook會(huì)在做某些事情的前后被鉤子鉤走去一些額外事情,那么這些額外事情我們可以用作于檢查、測(cè)試和部署等操作。
在 Git 中有許多的事件(commit、push 等等),每個(gè)事件也是對(duì)應(yīng)了有不同的鉤子的(如 commit 前,commit 后),那么我們就可以在這些鉤子這里配置一些自己需要執(zhí)行的操作來實(shí)現(xiàn)各種各樣的需求。

Git Hooks 介紹

Git hooks 是 Git 在事件之前或之后執(zhí)行的腳本, 用于控制 git 工作的流程。Git hooks 腳本對(duì)于我們提交code review 之前識(shí)別一些簡(jiǎn)單的問題很有用。 我們?cè)诿看翁峤淮a時(shí)都會(huì)觸發(fā)這些 hooks,以自動(dòng)指出代碼中的問題,例如缺少分號(hào),尾隨空白和調(diào)試語句。通過在code review 之前指出這些問題,代碼審閱者可以專注于代碼結(jié)構(gòu)和功能的更改,而不需要浪費(fèi)時(shí)間來審查這些格式問題。
Git hooks 分為客戶端鉤子和服務(wù)端鉤子??蛻舳算^子由諸如提交和合并這樣的操作所調(diào)用,而服務(wù)器端鉤子作用于諸如接收被推送的提交這樣的聯(lián)網(wǎng)操作。
客戶端鉤子:pre-commit、prepare-commit-msg、commit-msgpost-commit等,主要用于控制客戶端 git 的提交和合并這樣的操作。
服務(wù)端鉤子:pre-receivepost-receive、update,主要在服務(wù)端接收提交對(duì)象時(shí)、推送到服務(wù)器之前調(diào)用。

  • pre-commit: Check the commit message for spelling errors.
  • pre-receive: Enforce project coding standards.
  • post-commit: Email/SMS team members of a new commit.
  • post-receive: Push the code to production.

Git hooks 如何工作

Git Hooks 就是在.git/hooks文件下,保存了一些 shell 腳本,然后在對(duì)應(yīng)的鉤子中執(zhí)行這些腳本就行了。比如下圖中,這是一個(gè)還沒有配置 Git Hooks 的倉庫,默認(rèn)會(huì)有很.sample結(jié)尾的文件,這些都是示例文件
深入了解Git Hooks的使用
例如打開pre-commit.sample文件看一下其中的內(nèi)容,意思是一個(gè)示例鉤子腳本,用于驗(yàn)證將要提交的內(nèi)容,由沒有參數(shù)的“git commit”調(diào)用,如果鉤子想要停止提交,那么它應(yīng)該在發(fā)出適當(dāng)?shù)南⒑笠苑橇銧顟B(tài)退出。這個(gè)腳本默認(rèn)是不生效的,如果要生效,把文件名改為pre-commit即可。pre-commit這個(gè)鉤子是在git commit命令執(zhí)行之前觸發(fā)。
Git 支持的所有鉤子見下表(加粗的為常用鉤子):
深入了解Git Hooks的使用

自定義使用方法

1. 添加命名相同的腳本文件

任何正確命名的可執(zhí)行腳本都可以正常使用 ,也可以用Ruby或Python,或其他腳本語言。如下我們編寫一個(gè)與prepare-commit-msg相同命名的python腳本即可,注意第一行改成了python解釋器的路徑。

#!/usr/bin/env python  import sys, os  commit_msg_filepath = sys.argv[1] with open(commit_msg_filepath, 'w') as f:     f.write("# Please include a useful commit message!")

此外,這里用sys.argv[1]而不是$1來獲取第一個(gè)參數(shù)。這個(gè)特性非常強(qiáng)大,因?yàn)槟憧梢杂萌魏文阆矚g的語言來編寫Git鉤子。

2. 直接修改sample文件

使用shell 這里嘗試寫一個(gè)簡(jiǎn)單的鉤子,安裝一個(gè)prepare-commit-msg鉤子。去掉腳本的.sample拓展名,在文件中加上下面這兩行:

#!/bin/sh echo "# Please include a useful commit message!" > $1

接下來你每次運(yùn)行g(shù)it commit時(shí),你會(huì)看到默認(rèn)的提交信息都被替換了。
內(nèi)置的樣例腳本是非常有用的參考資料,因?yàn)槊總€(gè)鉤子傳入的參數(shù)都有非常詳細(xì)的說明(不同鉤子不一樣)。

3. 鏈接自定義文件

因?yàn)閔ook文件其實(shí)就是個(gè)腳本文件,我們可以寫一個(gè)腳本文件到項(xiàng)目被git管理的任意目錄里即可,只要在.git/hooks/里的默認(rèn)腳本文件中,執(zhí)行我們外部的這個(gè)文件即可。

  • 自定義腳本文件:項(xiàng)目根目錄/githooks/commit-msg-impl.py
#!/usr/bin/env python import sys, os, re from subprocess import check_output # 收集參數(shù),第一個(gè)參數(shù)是commit的信息的文件 commit_msg_filepath = sys.argv[1] # 打開commit提交消息的文件,檢測(cè)消息是否以指定格式開頭的,不是則異常退出,終止這次commit消息的提交 with open(commit_msg_filepath, 'r') as f:     content = f.read()     if not content.startswith("xxxx"):         print "commit-msg: ERROR! The commit message must start with xxxx"         sys.exit(1)  - 默認(rèn)hooks文件:.git/hooks/commit-msg #!/bin/bash GIT_ROOT="$(git rev-parse --show-toplevel)" FILE_NAME=$GIT_ROOT/githooks/commit-msg-impl.py if  [ -f "$FILE_NAME" ]; then     source $FILE_NAME fi

Husky 配置

從上面的介紹中,我們知道 Git Hook 保存在 .git 文件夾中,Git 是一個(gè)多人協(xié)作工具,那按理說 Git 倉庫中的所有文件都應(yīng)該被跟蹤并且上傳至遠(yuǎn)程倉庫的。但有個(gè)例外,.git文件夾不會(huì),這就導(dǎo)致一個(gè)問題,我們?cè)诒镜嘏渲煤?Git Hook 后,怎么分享給其他小伙伴兒呢?這時(shí)候,就輪到 Husky 出場(chǎng)了。
Husky 的原理是讓我們?cè)陧?xiàng)目根目錄中寫一個(gè)配置文件,然后在安裝 Husky的時(shí)候把配置文件和 Git Hook 關(guān)聯(lián)起來,這樣我們就能在團(tuán)隊(duì)中使用 Git Hook 了。

第一步

使用 npm 初始化你的項(xiàng)目(如果項(xiàng)目已有 package.json,請(qǐng)?zhí)恋诙剑?/p>

npm init -y

第二步

安裝 Husky

// 注意 Node.js 版本要 >=10 npm install husky -D

第三步

書寫配置文件,4.2.5 版本的 Husky 共支持以下幾種格式的配置文件:

  • .huskyrc
  • .huskyrc.json
  • .huskyrc.yaml
  • .huskyrc.yml
  • .huskyrc.js
  • husky.config.js
    個(gè)人習(xí)慣,這里我采用的是.huskyrc,在其中書寫 json 格式的配置,如下:
{   "hooks": {     "pre-commit": "git restore -W -S dist examples/dist"   } }

是不是很簡(jiǎn)單,我們來解讀一下這個(gè)配置文件。hooks這個(gè)對(duì)象中,key 就是鉤子名,而 value 就是需要執(zhí)行的命令。上面這個(gè)配置的含義就是,在每次執(zhí)行 git commit之前,都會(huì)把dist和examples/dit目錄下的修改回滾,即不想這個(gè)目錄的文件被上傳。
上面我們只寫了一條命令,如果想執(zhí)行兩條命令怎么辦呢?比如我還想在git commit之前用 EsLint 檢查一下代碼質(zhì)量,我們可以像下面這樣寫:

{   "hooks": {     "pre-commit": "git restore -W -S dist examples/dist && eslint ."   } }

是的,就是這么簡(jiǎn)單。如果 EsLint 檢測(cè)不通過,那么git commit是會(huì)被阻止的,就不用擔(dān)心"垃圾代碼"被提交到線上倉庫了。

Husky 注意事項(xiàng)

Husky 讓我們可以很方便的配置 Git Hooks,同時(shí),也提供了一些實(shí)用方便的小技巧以及一些我們需要注意的點(diǎn)

不支持的鉤子

Husky 不支持服務(wù)端 Git 的鉤子:

  • pre-receive
  • update
  • post-receive
    跳過所有鉤子
    有時(shí)你可能不想運(yùn)行鉤子,那么可以像下面這樣跳過:
HUSKY_SKIP_HOOKS=1 git rebase ...

禁用自動(dòng)安裝

如果你不想 Husky 為你自動(dòng)安裝鉤子(比如 clone 了一個(gè)第三方的庫,想要自己開發(fā)時(shí)),可以這樣做:

HUSKY_SKIP_INSTALL=1 npm install

推薦學(xué)習(xí):《Git教程》

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
亚洲精品888| 视频福利一区| 麻豆91精品| 一区二区三区四区精品视频| 日韩美女精品| 九九99久久精品在免费线bt| 成人一区而且| 日韩午夜高潮| 婷婷精品在线| 麻豆一区二区三区| 久久视频精品| 亚洲精品进入| 精品免费视频| 欧洲激情综合| 久久国产三级| 欧美国产一级| 婷婷成人基地| 亚洲97av| 色欧美自拍视频| 亚洲欧美激情诱惑| 欧美激情福利| 女人天堂亚洲aⅴ在线观看| 亚州av日韩av| 久久久一本精品| 日本不卡不码高清免费观看| 国产一区一一区高清不卡| 亚洲精品一区三区三区在线观看| 性色av一区二区怡红| 麻豆一区二区在线| 偷拍欧美精品| 美女尤物国产一区| 欧美1区2区3区| 国产欧美一区二区色老头| 久久国产影院| 国产精品毛片aⅴ一区二区三区| 香蕉精品久久| 国产精品色婷婷在线观看| 欧美日韩国产探花| 国产精品白丝av嫩草影院| 欧美日韩国产免费观看| 精品国产黄a∨片高清在线| 国产视频久久| 高清在线一区| 涩涩涩久久久成人精品| 亚洲香蕉网站| 国产精品第一| 亚洲深夜影院| 日韩在线精品| 欧美视频久久| 国产婷婷精品| 国产69精品久久| 久久国产精品色av免费看| 日韩午夜av| 亚洲永久av| 国产精品入口久久| 中文字幕免费一区二区| 999久久久精品国产| 欧美一级网址| 石原莉奈一区二区三区在线观看| 97se综合| 精品久久久亚洲| 亚洲精品少妇| 婷婷亚洲综合| 日韩天堂在线| 亚洲精品**中文毛片| 国产精品成人3p一区二区三区| 亚洲香蕉视频| 国产视频亚洲| 激情婷婷综合| 久久亚洲专区| 国产盗摄——sm在线视频| 久久国产三级| 日韩欧美中文字幕电影| 蜜桃久久av| 国产亚洲一级| 久久亚洲成人| 成人久久一区| 国产精品蜜芽在线观看| 精品免费在线| 精品国产一区二| 国产精品欧美大片| 国产精品一站二站| 久久国产婷婷国产香蕉| 亚洲aa在线| 午夜电影一区| 欧美一级一区| 欧美欧美黄在线二区| 亚洲一级大片| 亚洲精品美女91| 午夜亚洲福利| 欧美在线观看天堂一区二区三区| 亚洲精选成人| 亚洲一二av| 日韩精品一区二区三区中文| 一区二区三区网站| 亚洲毛片在线| 青青伊人久久| 国产精品久久久亚洲一区| 欧美xxxx性| аⅴ资源天堂资源库在线| 久久毛片亚洲| 久久精品卡一| 午夜电影亚洲| 伊人久久大香伊蕉在人线观看热v| 蜜臀91精品一区二区三区| 日本在线不卡视频| 国产精品日韩精品在线播放 | 久久av影视| 精品三区视频| 日韩中文字幕高清在线观看| 成人久久一区| 国产视频一区在线观看一区免费| 免费看日韩精品| 国产欧美大片| 国产拍在线视频| 亚洲黄色在线| 日韩精品三级| 国产一区二区视频在线看| 亚洲午夜久久久久久尤物 | 婷婷综合五月| 中文一区一区三区免费在线观 | 日韩激情一区| 久久aⅴ国产紧身牛仔裤| 日韩av资源网| av资源中文在线天堂| 夜夜嗨av一区二区三区网站四季av| 视频一区日韩| 高潮一区二区| 蜜桃久久av一区| 久久精品国产亚洲一区二区三区| 高清一区二区| 99热精品在线观看| 久久国产日韩欧美精品| 国产精品13p| 国产精品美女久久久浪潮软件| 亚洲97av| 日本黄色精品| 亚洲专区视频| 激情国产在线| 日韩激情一区二区| а√天堂8资源中文在线| 丝袜诱惑制服诱惑色一区在线观看 | 欧美成人国产| 7777精品| 久久影院一区| 国产亚洲高清一区| 久久精品1区| 国产精品色在线网站| 91精品福利| 精品美女久久| 综合欧美精品| 日韩不卡视频在线观看| 日韩久久99| 激情婷婷综合| 老色鬼精品视频在线观看播放| 午夜国产欧美理论在线播放| 国产麻豆一区| 蜜桃tv一区二区三区| 久久wwww| 视频一区免费在线观看| 吉吉日韩欧美| 国产日韩欧美一区二区三区在线观看| 亚洲午夜黄色| 国产理论在线| 欧美午夜三级| 国产一级久久| 日韩精品久久久久久久电影99爱| 国产日韩欧美一区二区三区 | 久久精品av麻豆的观看方式| 亚洲精品va| 裤袜国产欧美精品一区| 美美哒免费高清在线观看视频一区二区| 国产不卡av一区二区| 18国产精品| 免费在线看一区| 99视频在线精品国自产拍免费观看| 国产传媒av在线| 精品五月天堂| 免费在线亚洲欧美| 国产精品中文字幕制服诱惑| 亚洲一二av| 午夜影院欧美| 午夜精品久久久久久久久久蜜桃| 久久97视频| 免费在线观看一区| 日本少妇精品亚洲第一区| 蜜芽一区二区三区| 国产日韩专区| 久久亚洲视频| 性欧美长视频| 99视频精品免费观看| 亚洲一级网站| 久久麻豆精品| 亚洲成人精品| 91精品久久久久久久久久不卡| 日韩理论片av| 蜜臀国产一区| 天堂√8在线中文| 超碰99在线| 国产精品精品|