最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

git?hooks的作用及創(chuàng)建使用示例詳解

 更新時間:2022年08月23日 14:02:19   作者:小楓學幽默  
這篇文章主要為大家介紹了git?hooks的作用及創(chuàng)建使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1. 什么是git hooks ?有什么用???

1.1 是個啥

git大家都在用吧,相信現(xiàn)在沒公司代碼不做版本控制的吧。git hooksgit提供的,在發(fā)生特定事件時,允許用戶添加自定義代碼(或操作)的方式。

就像Vue中組件的生命周期鉤子,比如,你想在vue組件創(chuàng)建后輸出一行log, 你可能會這么寫

export default {
    created () {
        console.log('Hello I am created.')
    }
}

1.2 有啥用?我以前沒用過它不也一樣好好的嗎?我干嘛要用它?

  • 你在git commit -m "feat: 修復bug=51234"時,總是提交的很規(guī)范,很明確自己提交了什么,但是團隊中有人提交時只寫一個git commit -m "add",你也看不出來他提交了啥,這時候就可以使用commit-msg鉤子去限定下,提交信息必須符合某種格式,否則不允許提交
  • 你喜歡js代碼縮進用兩個空格,但是團隊中有人總是兩個空格和四個空格混用,十分的混亂,這時候就可以結(jié)合eslint,在提交前進行代碼格式的校驗

2. 怎么創(chuàng)建一個 git hooks ?

2.1 首先看git hooks存在哪里

git hooks其實就存在倉庫根目錄中的.git/hooks/目錄中(.git目錄可能是隱藏目錄,取消隱藏即可查看),我們來看下默認的.git/hooks/目錄是什么樣子

發(fā)現(xiàn)了嗎,git在初始化倉庫的時候,很貼心的為你初始化了很多個xxx.sample文件(這些文件不會被執(zhí)行),就是鉤子的示例文件,比如pre-commit.sample就是git commit前的鉤子示例文件。

2.2 創(chuàng)建一個pre-commit鉤子

為了更容易理解,讓我們設(shè)定一個場景:比如,你想在git commit 前在命令行輸出一個 Hello world

.git/hooks/中將pre-commit.sample文件復制一份,刪除文件后綴名,文件名變?yōu)?code>pre-commit,刪除除第一行以外的內(nèi)容

#!/bin/sh
# 以下為shell語法
echo "Hello world"

2.3 觸發(fā)鉤子

我們剛剛創(chuàng)建的是提交前的鉤子,那么我們要觸發(fā)它,就必須得提交代碼(即執(zhí)行git commit

在根目錄中創(chuàng)建一個文件 1.js

var a = 12

創(chuàng)建后目錄結(jié)構(gòu)

study
├── .git
│   ├── hooks
│   │   ├── pre-commit
└── 1.js

添加進暫存區(qū)

git add .

提交

git commit -m "我新建了一個1.js"

此時命令行輸出

你看上面打出了 "Hello world",喲呼,我們創(chuàng)建了自己的第一個git hooks,給自己點個贊!?。?!

3 有用點的實戰(zhàn)

需求場景

假設(shè),我們不允許在提交信息中包含"大白"這種詞匯,那么我們可以怎么做?

在.git/hooks 中新建commit-msg文件, 編寫 .git/hooks/commit-msg 文件內(nèi)容

  • node版
#!/usr/bin/env node
const fs = require('fs');
// 索引 2 對應(yīng)的 commit 消息文件 里面包含提交信息
// 就是你在 git commit -m "msg" 時輸入的 msg
const msg = fs.readFileSync(process.argv[2], 'utf-8').trim();
// 判斷 commit_msg中是否包含 "大白"
// 若包含,則中斷git的流程
if (msg.indexOf('大白') > -1) {
  console.error('您的提交信息中包含【大白】這個詞匯,請檢查!');
  // exit 1 表示程序執(zhí)行異常退出 中斷git的流程 不允許提交
  process.exit(1);
} else {
    console.log('不包含')
}
  • shell 版
#!/bin/sh
# 獲取當前提交的 commit msg 內(nèi)容
# 就是你在 git commit -m "msg" 時輸入的 msg
# 用 `` 可以將命令的輸出結(jié)果賦值給變量 commit_msg
# $1 是git在執(zhí)行鉤子時提供給我們的參數(shù),就是你在 git commit -m "msg" 時輸入的 msg
commit_msg=`cat $1`
# 輸出下獲取到的提交注釋
echo "您提交的commit_msg: $commit_msg"
# 判斷 commit_msg中是否包含 "大白"
# 若包含,則中斷git的流程
if [[ $commit_msg =~ "大白" ]]
then
  echo "您的提交信息中包含【大白】這個詞匯,請檢查!"
  # exit 1 表示程序執(zhí)行異常退出 中斷git的流程 不允許提交
  exit 1
else
  echo "不包含"
fi

修改 1.js

var a = 12333

添加進暫存區(qū)

git add .

提交

git commit -m "我新建了一個1.js,大白"

運行結(jié)果

4 總結(jié)

其實就是git就是在用戶做特定事情的時候,去查找.git/hooks/,目錄中查找對應(yīng)事件的鉤子文件是否存在,若存在就執(zhí)行這個鉤子文件中的shell腳本(上面的例子中就是git在用戶執(zhí)行git commit操作的時候,找到了pre-commit文件并執(zhí)行了其中的shell

5 其他

5.1 如果在mac下報以下異常

hint: The ‘.git/hooks/pre-auto-gc’ hook was ignored because it’s not set as executable.
hint: You can disable this warning with git config advice.ignoredHook false.

那是因為在mac下文件默認是不可執(zhí)行的,執(zhí)行以下操作即可

chmod 777 .git/hooks/commit-msg

5.2 常用鉤子

pre-commit 提交前
commit-msg 提交信息
pre-push push前

更多文檔請參看點我去官網(wǎng)看

5.3 hooks可以使用什么語言?

用于編寫 git hooks 的腳本語言是沒有限制的,你可以用 nodejsshellpython、ruby等腳本語言,非常的靈活方便。文中我使用的是shell

以上就是git hooks的作用及創(chuàng)建使用示例詳解的詳細內(nèi)容,更多關(guān)于git hooks創(chuàng)建使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序之頁面跳轉(zhuǎn)和參數(shù)傳遞的實現(xiàn)

    微信小程序之頁面跳轉(zhuǎn)和參數(shù)傳遞的實現(xiàn)

    這篇文章主要介紹了微信小程序之頁面跳轉(zhuǎn)和參數(shù)傳遞的實現(xiàn)的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • 微信小程序 轉(zhuǎn)發(fā)功能的實現(xiàn)

    微信小程序 轉(zhuǎn)發(fā)功能的實現(xiàn)

    這篇文章主要介紹了微信小程序 轉(zhuǎn)發(fā)功能的實現(xiàn)的相關(guān)資料,這里提供實現(xiàn)方法及實例幫助大家學習理解,需要的朋友可以參考下
    2017-08-08
  • Javascript作用域與閉包詳情

    Javascript作用域與閉包詳情

    相信絕大多數(shù)同學都聽過閉包這個概念,但閉包具體是什么估計很少有人能夠說的很詳細。說實話閉包在我們平時開發(fā)中應(yīng)該是很常見的,并且在前端面試中閉包也是常見的重要考點,在學習閉包之前我們先來看看作用域與作用域鏈,因為這是閉包的關(guān)鍵。
    2021-10-10
  • JavaScript前端實現(xiàn)小說分頁功能示例

    JavaScript前端實現(xiàn)小說分頁功能示例

    這篇文章主要為大家介紹了JavaScript前端實現(xiàn)小說分頁功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 微信小程序 簡單教程實例詳解

    微信小程序 簡單教程實例詳解

    這篇文章主要介紹了微信小程序 簡單教程實例詳解的相關(guān)資料,這里對開發(fā)微信小程序步驟做了一一詳解,需要的朋友可以參考下
    2017-01-01
  • Javascript 解構(gòu)賦值詳情

    Javascript 解構(gòu)賦值詳情

    這篇文章主要介紹了Javascript 解構(gòu)賦值詳情,解構(gòu)賦值是ES6中的特性,可以將對象或數(shù)組中的值同時賦值給多個變量。西阿棉一起來看看詳細內(nèi)容吧,需要的朋友可以參考下
    2021-11-11
  • 微信小程序之MaterialDesign--input組件詳解

    微信小程序之MaterialDesign--input組件詳解

    本篇文章主要介紹了微信小程序之MaterialDesign--input組件詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Java  Spring 事務(wù)回滾詳解

    Java Spring 事務(wù)回滾詳解

    這篇文章主要介紹了java Spring事務(wù)回滾的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • JS實現(xiàn)一個文件選擇組件詳解

    JS實現(xiàn)一個文件選擇組件詳解

    這篇文章主要為大家介紹了JS實現(xiàn)一個文件選擇組件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 兩表格傳遞變量

    兩表格傳遞變量

    兩表格傳遞變量...
    2006-06-06

最新評論

昆明市| 河东区| 巴中市| 鸡泽县| 霍山县| 吉林省| 文登市| 津市市| 安多县| 鲜城| 固原市| 罗江县| 兖州市| 济源市| 内乡县| 宜城市| 和林格尔县| 娄底市| 勃利县| 射洪县| 浠水县| 纳雍县| 台湾省| 铁力市| 栖霞市| 成武县| 乐清市| 花莲市| 松桃| 沂水县| 弥勒县| 丹阳市| 新安县| 罗源县| 绥江县| 福海县| 蒙自县| 衡东县| 石首市| 霞浦县| 铅山县|