成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

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

深入了解Git Hooks的使用

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

深入了解Git Hooks的使用

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

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

Git Hooks 介紹

Git hooks 是 Git 在事件之前或之后執(zhí)行的腳本, 用于控制 git 工作的流程。Git hooks 腳本對于我們提交code review 之前識別一些簡單的問題很有用。 我們在每次提交代碼時都會觸發(fā)這些 hooks,以自動指出代碼中的問題,例如缺少分號,尾隨空白和調(diào)試語句。通過在code review 之前指出這些問題,代碼審閱者可以專注于代碼結(jié)構(gòu)和功能的更改,而不需要浪費時間來審查這些格式問題。
Git hooks 分為客戶端鉤子和服務(wù)端鉤子。客戶端鉤子由諸如提交和合并這樣的操作所調(diào)用,而服務(wù)器端鉤子作用于諸如接收被推送的提交這樣的聯(lián)網(wǎng)操作。
客戶端鉤子:pre-commitprepare-commit-msgcommit-msgpost-commit等,主要用于控制客戶端 git 的提交和合并這樣的操作。
服務(wù)端鉤子:pre-receivepost-receiveupdate,主要在服務(wù)端接收提交對象時、推送到服務(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 腳本,然后在對應(yīng)的鉤子中執(zhí)行這些腳本就行了。比如下圖中,這是一個還沒有配置 Git Hooks 的倉庫,默認會有很.sample結(jié)尾的文件,這些都是示例文件
深入了解Git Hooks的使用
例如打開pre-commit.sample文件看一下其中的內(nèi)容,意思是一個示例鉤子腳本,用于驗證將要提交的內(nèi)容,由沒有參數(shù)的“git commit”調(diào)用,如果鉤子想要停止提交,那么它應(yīng)該在發(fā)出適當?shù)南⒑笠苑橇銧顟B(tài)退出。這個腳本默認是不生效的,如果要生效,把文件名改為pre-commit即可。pre-commit這個鉤子是在git commit命令執(zhí)行之前觸發(fā)。
Git 支持的所有鉤子見下表(加粗的為常用鉤子):
深入了解Git Hooks的使用

自定義使用方法

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

任何正確命名的可執(zhí)行腳本都可以正常使用 ,也可以用Ruby或Python,或其他腳本語言。如下我們編寫一個與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來獲取第一個參數(shù)。這個特性非常強大,因為你可以用任何你喜歡的語言來編寫Git鉤子。

2. 直接修改sample文件

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

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

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

3. 鏈接自定義文件

因為hook文件其實就是個腳本文件,我們可以寫一個腳本文件到項目被git管理的任意目錄里即可,只要在.git/hooks/里的默認腳本文件中,執(zhí)行我們外部的這個文件即可。

  • 自定義腳本文件:項目根目錄/githooks/commit-msg-impl.py
#!/usr/bin/env python import sys, os, re from subprocess import check_output # 收集參數(shù),第一個參數(shù)是commit的信息的文件 commit_msg_filepath = sys.argv[1] # 打開commit提交消息的文件,檢測消息是否以指定格式開頭的,不是則異常退出,終止這次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)  - 默認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 是一個多人協(xié)作工具,那按理說 Git 倉庫中的所有文件都應(yīng)該被跟蹤并且上傳至遠程倉庫的。但有個例外,.git文件夾不會,這就導(dǎo)致一個問題,我們在本地配置好 Git Hook 后,怎么分享給其他小伙伴兒呢?這時候,就輪到 Husky 出場了。
Husky 的原理是讓我們在項目根目錄中寫一個配置文件,然后在安裝 Husky的時候把配置文件和 Git Hook 關(guān)聯(lián)起來,這樣我們就能在團隊中使用 Git Hook 了。

第一步

使用 npm 初始化你的項目(如果項目已有 package.json,請?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
    個人習(xí)慣,這里我采用的是.huskyrc,在其中書寫 json 格式的配置,如下:
{   "hooks": {     "pre-commit": "git restore -W -S dist examples/dist"   } }

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

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

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

Husky 注意事項

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

不支持的鉤子

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

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

禁用自動安裝

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

HUSKY_SKIP_INSTALL=1 npm install

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
欧美无MATE30PRO巨| 午夜无码免费福利视频网址| 日本牲交大片免费观看| 日日噜噜夜夜狠狠VA视频| 施主就让贫僧C进去吧| 性爱xxxx在线xxxx欧美| 亚洲国产成人VA在线观看| 亚洲色一色鲁一鲁鲁| 中文字幕亚洲乱码熟女1区2区| A级国产乱理伦片在线观看 | 国色天香卡一卡二乱码| 精品无人乱码一区二区三区| 男j插女p无遮挡100%| 日本工口里番H彩色无遮挡全彩 | 久久这里精品国产99丫E6| 男女爽到高潮的免费网站| 人妻丝袜另类欧美偷拍视频| 婷婷蜜桃国产精品一区| 亚洲精品无码久久久久久久| 中文字幕被公侵犯的漂亮人妻| JAPANESEⅩⅩⅩHD日本| 国产AV精品白浆一区二| 狠狠亚洲婷婷综合色香五月加勒比| 巨胸喷奶水视频WWW免费动漫| 亲子伦AV一区的三区| 婷婷久久综合九色综合97| 亚洲成AV人在线播放无码| 中文字幕久久久久人妻中出| 成人欧美一区二区三区在线观看| 国产日韩一区二区三区在线观看| 久久蜜桃86人妻arvi| 人人狠狠综合久久88成人| 亚洲AⅤ精品一区二区三区| 再深点灬舒服灬太大了添动视频| 成年女人WWXX免费国产| 韩国18禁电影风暴尺度大| 男女一起差差差差差| 视频在线一区二区| 亚洲午夜久久久久久久久电影网| А√中文在线资源库| 国产亚洲精选美女久久久久| 免费无码AV片在线观看网站| 天天爱天天做天天做天天吃中文| 亚洲一码和欧洲二码的尺码区别| 菠萝蜜视频在线观看| 国内精品视频在线观看九九| 欧美电影在线观看| 亚洲 另类 在线 欧美 制服| 91人妻人人做人碰人人爽蜜闫 | 黑人巨大BBWBBW| 欧美性色欧美A在线播放| 亚洲 日韩 欧美 成人 在线观 | 亚洲国产欧美在线综合| ZOZ○ZO女人和另类ZOZ0| 黑人GAY大长雕TUBE| 青草伊人久久综在合线亚洲观看 | 一个吃我奶头两个舔我下面| 高清色惰WWW日本午夜色视频| 久久国产精品久久久久久 | 从厨房一路干到卧室好吗| 久久国产精品99久久人人澡| 上面一个奶下面一个顶是什么字 | 无码人妻AV一二区二区三区| 最新无码国产在线视频9299| 国产麻豆天美果冻无码视频| 欧美人与动牲猛交XXXXBBB| 亚洲AV永久无码精品无码电影| WWW国产精品内射熟女| 精品无码一区二区三区| 少妇呻吟翘臀后进爆白浆| 在线看AV的网站| 国精产品无人区一码二码三蘑菇 | ているの天堂资源WWW| 久久精品国产亚洲AV影院| 手机在线看永久AV片免费高潮| 中文字幕日本乱码仑区在线| 国精无码欧精品亚洲一区| 日本一本2017国产| 再深点灬舒服灬太大了下载| 国产一二三四区乱码免费| 日韩一区二区视频在线| 18禁黄无遮挡网站免费高清| 国内精品久久久久久久影院| 色一情一乱一乱一区91Av奶水| 曰曰摸天天添天天湿| 黑人精品一区二区三区| 天天爽天天爽夜夜爽毛片| BGMBGMBGM毛多多| 久久久久亚洲精品无码网址| 性一交一乱一伦一| 公交车上噗嗤一声尽根而没| 欧美老少配XXXOOO性HD| 野花香在线观看免费观看大全动漫| 国产日韩精品SUV| 少妇愉情理仑片高潮| A级精品国产片在线观看| 久久夜色噜噜噜亚洲AV| 亚洲成A人片在线观看无码专区 | 婷婷色丁香五月激情综合| 边做饭边被躁BD小说| 欧美成人性生免费看的| 曰本无码人妻丰满熟妇啪| 精品亚洲AⅤ无码午夜在线| 五十路熟妇高熟无码视频| 动漫AV纯肉无码AV在线播放| 琪琪无码午夜伦埋影院| 18禁黄无遮挡网站免费高清| 久久人人爽爽爽人久久久| 亚洲国产欧美在线人成最新| 国产曰的好深好爽免费视频| 无码人妻丰满熟妇区96| 公翁的粗大放进我的秘密小说| 人人妻人人爽人人爽| GOOD电影网韩国三级无码| 妺妺窝人体色聚窝窝www偷窥| 野花日本HD免费高清版7| 精品无码国产日韩制服丝袜| 亚洲AV永久无码精品网站| 国产亚洲精品第一综合麻豆| 无码一区在线视频| 国产成人影院一区二区三区| 色黄啪啪网18以下勿进| 吃了继兄开的药我做的梦更 | 久久久久精品精品6精品精品| 亚洲精品中文字幕乱码| 精品国产你懂的在线观看| 亚洲国产成人久久综合| 狠狠噜天天噜日日噜AV| 亚洲成A人V欧美综合天堂| 国自产拍亚洲免费视频| 亚洲AV中文AⅤ无码AV浪潮| 国色天香A区与B区| 亚洲AV无码国产精品色午夜软件| 国产特级毛片AAAAAA高清| 亚洲AV极品无码专区在线观看| 国产又猛又黄又爽| 亚洲AV综合AV一区| 精品乱码一区二区三区av| 亚洲午夜久久久久久久久电影网 | 人妻人人澡人人添人人爽| 啊灬啊灬啊灬快灬高潮了老 | 菠萝菠萝蜜在线观看| 日韩精品无码一区二区忘忧草| 大胸美女污污污WWW网站| 爽到憋不住潮喷大喷水视频| 国产盗摄XXXX视频XXXⅩ| 性VIDEOS欧美熟妇HDX| 黑人狂桶女人高潮嗷嗷叫小说| 亚洲男男GAY 18自慰网站| 久久久亚洲一区少妇无码| 中文字幕亚洲综合久久蜜桃| 欧美熟妇呻吟猛交XX牲| 波多波多野结衣中文无| 丝瓜草莓榴莲向日葵秋葵| 国产清纯白嫩大学生正在播放 | 色8久久人人97超碰香蕉987| 国产粗语刺激对白ⅩXX| 性无码免费一区二区三区在线 | 国产AV电影区二区三区曰曰骚网| 无码无套少妇毛多18PX| 娇妻被朋友玩得呻吟在线电影| 野花日本大全免费观看10中文 | 18大禁漫画吃奶羞羞漫画| 欧洲肉欲K8播放毛片| 国产成 人 在线观看 亚洲 | 国产又爽又黄又爽又刺激| 亚洲综合日韩AV无码毛片| 内射干少妇亚洲69XXX| 成熟丰满熟妇AV无码区| 无码口爆内射颜射后入| 精品久久久久久成人AV| 18禁网站在线永久免费观看| 日韩精品无码综合福利网| 国产农村乱子伦精品视频| 亚洲一区二区三区无码影院| 欧美乱熟妇XXXX白浆| 国产成人AV大片在线播放| 亚洲精品成人久久久| 男女性杂交内射妇女BBWXZ| 动漫RH男男车车好快的车车| 亚洲国产精品久久久久久| 免费女人18毛片A级毛片视频| 成熟丰满熟妇偷拍XXXXX| 亚洲AV无码成人精品区日韩| 浪荡女天天不停挨CAO日常视频| 被三个男人躁一夜好爽小说| 亚洲AV秘 无码一区二区三l| 美女扒开腿让男人桶爽| 丰满少妇爆乳无码专区| 亚洲人成电影网站色MP4| 欧美猛少妇色XXXXX猛叫| 国产农村妇女毛片精品久久| 中国女人内射6XXXXX| 色欲久久久天天天综合网精品| 精品国产AⅤ一区二区三区在线看| 91人人澡人人爽内射电影院| 无码AV无码免费一区二区| 性孕交大肚子孕妇| 久久99精品久久久久久2021| はるとゆき温泉旅馆攻略|