久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

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

      深入了解Git Hooks的使用

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

      深入了解Git Hooks的使用

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

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

      Git Hooks 介紹

      Git hooks 是 Git 在事件之前或之后執(zhí)行的腳本, 用于控制 git 工作的流程。Git hooks 腳本對(duì)于我們提交code review 之前識(shí)別一些簡(jiǎn)單的問(wèn)題很有用。 我們?cè)诿看翁峤淮a時(shí)都會(huì)觸發(fā)這些 hooks,以自動(dòng)指出代碼中的問(wèn)題,例如缺少分號(hào),尾隨空白和調(diào)試語(yǔ)句。通過(guò)在code review 之前指出這些問(wèn)題,代碼審閱者可以專注于代碼結(jié)構(gòu)和功能的更改,而不需要浪費(fèi)時(shí)間來(lái)審查這些格式問(wèn)題。
      Git hooks 分為客戶端鉤子和服務(wù)端鉤子??蛻舳算^子由諸如提交和合并這樣的操作所調(diào)用,而服務(wù)器端鉤子作用于諸如接收被推送的提交這樣的聯(lián)網(wǎng)操作。
      客戶端鉤子:pre-commitprepare-commit-msg、commit-msgpost-commit等,主要用于控制客戶端 git 的提交和合并這樣的操作。
      服務(wù)端鉤子:pre-receive、post-receiveupdate,主要在服務(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è)還沒(méi)有配置 Git Hooks 的倉(cāng)庫(kù),默認(rèn)會(huì)有很.sample結(jié)尾的文件,這些都是示例文件
      深入了解Git Hooks的使用
      例如打開(kāi)pre-commit.sample文件看一下其中的內(nèi)容,意思是一個(gè)示例鉤子腳本,用于驗(yàn)證將要提交的內(nèi)容,由沒(mé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 支持的所有鉤子見(jiàn)下表(加粗的為常用鉤子):
      深入了解Git Hooks的使用

      自定義使用方法

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

      任何正確命名的可執(zhí)行腳本都可以正常使用 ,也可以用Ruby或Python,或其他腳本語(yǔ)言。如下我們編寫一個(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來(lái)獲取第一個(gè)參數(shù)。這個(gè)特性非常強(qiáng)大,因?yàn)槟憧梢杂萌魏文阆矚g的語(yǔ)言來(lái)編寫Git鉤子。

      2. 直接修改sample文件

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

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

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

      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] # 打開(kāi)commit提交消息的文件,檢測(cè)消息是否以指定格式開(kāi)頭的,不是則異常退出,終止這次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é)作工具,那按理說(shuō) Git 倉(cāng)庫(kù)中的所有文件都應(yīng)該被跟蹤并且上傳至遠(yuǎn)程倉(cāng)庫(kù)的。但有個(gè)例外,.git文件夾不會(huì),這就導(dǎo)致一個(gè)問(wèn)題,我們?cè)诒镜嘏渲煤?Git Hook 后,怎么分享給其他小伙伴兒呢?這時(shí)候,就輪到 Husky 出場(chǎng)了。
      Husky 的原理是讓我們?cè)陧?xiàng)目根目錄中寫一個(gè)配置文件,然后在安裝 Husky的時(shí)候把配置文件和 Git Hook 關(guān)聯(lián)起來(lái),這樣我們就能在團(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)單,我們來(lái)解讀一下這個(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è)不通過(guò),那么git commit是會(huì)被阻止的,就不用擔(dān)心"垃圾代碼"被提交到線上倉(cāng)庫(kù)了。

      Husky 注意事項(xiàng)

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

      不支持的鉤子

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

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

      禁用自動(dòng)安裝

      如果你不想 Husky 為你自動(dòng)安裝鉤子(比如 clone 了一個(gè)第三方的庫(kù),想要自己開(kāi)發(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)