<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
git
大家都在用吧,相信現在沒公司程式碼不做版本控制的吧。git hooks
是git
提供的,在發生特定事件時,允許使用者新增自定義程式碼(或操作)的方式。
就像Vue
中元件的生命週期勾點,比如,你想在vue
元件建立後輸出一行log
, 你可能會這麼寫
export default { created () { console.log('Hello I am created.') } }
git commit -m "add"
,你也看不出來他提交了啥,這時候就可以使用commit-msg
勾點去限定下,提交資訊必須符合某種格式,否則不允許提交js
程式碼縮排用兩個空格,但是團隊中有人總是兩個空格和四個空格混用,十分的混亂,這時候就可以結合eslint
,在提交前進行程式碼格式的校驗git hooks
其實就存在倉庫根目錄中的.git/hooks/
目錄中(.git目錄可能是隱藏目錄,取消隱藏即可檢視),我們來看下預設的.git/hooks/
目錄是什麼樣子
發現了嗎,git
在初始化倉庫的時候,很貼心的為你初始化了很多個xxx.sample
檔案(這些檔案不會被執行),就是勾點的範例檔案,比如pre-commit.sample
就是git commit
前的勾點範例檔案。
為了更容易理解,讓我們設定一個場景:比如,你想在git commit
前在命令列輸出一個 Hello world
在 .git/hooks/
中將pre-commit.sample
檔案複製一份,刪除檔案字尾名,檔名變為pre-commit
,刪除除第一行以外的內容
#!/bin/sh # 以下為shell語法 echo "Hello world"
我們剛剛建立的是提交前的勾點,那麼我們要觸發它,就必須得提交程式碼(即執行git commit
)
在根目錄中建立一個檔案 1.js
var a = 12
建立後目錄結構
study ├── .git │ ├── hooks │ │ ├── pre-commit └── 1.js
新增進暫存區
git add .
提交
git commit -m "我新建了一個1.js"
此時命令列輸出
你看上面打出了 "Hello world"
,喲呼,我們建立了自己的第一個git hooks
,給自己點個贊!!!!
需求場景
假設,我們不允許在提交資訊中包含"大白"這種詞彙,那麼我們可以怎麼做?
在.git/hooks 中新建commit-msg檔案, 編寫 .git/hooks/commit-msg 檔案內容
#!/usr/bin/env node const fs = require('fs'); // 索引 2 對應的 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 表示程式執行異常退出 中斷git的流程 不允許提交 process.exit(1); } else { console.log('不包含') }
#!/bin/sh # 獲取當前提交的 commit msg 內容 # 就是你在 git commit -m "msg" 時輸入的 msg # 用 `` 可以將命令的輸出結果賦值給變數 commit_msg # $1 是git在執行勾點時提供給我們的引數,就是你在 git commit -m "msg" 時輸入的 msg commit_msg=`cat $1` # 輸出下獲取到的提交註釋 echo "您提交的commit_msg: $commit_msg" # 判斷 commit_msg中是否包含 "大白" # 若包含,則中斷git的流程 if [[ $commit_msg =~ "大白" ]] then echo "您的提交資訊中包含【大白】這個詞彙,請檢查!" # exit 1 表示程式執行異常退出 中斷git的流程 不允許提交 exit 1 else echo "不包含" fi
修改 1.js
var a = 12333
新增進暫存區
git add .
提交
git commit -m "我新建了一個1.js,大白"
執行結果
其實就是git
就是在使用者做特定事情的時候,去查詢.git/hooks/
,目錄中查詢對應事件的勾點檔案是否存在,若存在就執行這個勾點檔案中的shell
指令碼(上面的例子中就是git
在使用者執行git commit
操作的時候,找到了pre-commit
檔案並執行了其中的shell
)
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下檔案預設是不可執行的,執行以下操作即可
chmod 777 .git/hooks/commit-msg
pre-commit 提交前 commit-msg 提交資訊 pre-push push前
更多檔案請參看點我去官網看
用於編寫 git hooks
的指令碼語言是沒有限制的,你可以用 nodejs
、shell
、python
、ruby
等指令碼語言,非常的靈活方便。文中我使用的是shell
以上就是git hooks的作用及建立使用範例詳解的詳細內容,更多關於git hooks建立使用的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45