Git Hooks (1):介紹

最近我在嘗試搭建一個利用Git直接部署生產代碼的服務器,查了許多資料,瞭解到須要用到Git Hooks這一特性,就順便看了一下。node

什麼是Git Hooks?

話說,如同其餘許多的版本控制系統同樣,Git也具備在特定事件發生以前以後執行特定腳本代碼功能(從概念上類比,就與監聽事件、觸發器之類的東西相似)。Git Hooks就是那些在Git執行特定事件(如commit、push、receive等)後觸發運行的腳本。git

按照Git Hooks腳本所在的位置能夠分爲兩類:github

  • 本地Hooks,觸發事件如commit、merge等。
  • 服務端Hooks,觸發事件如receive等。

Git Hooks能作什麼?

Git Hooks是定製化的腳本程序,因此它實現的功能與相應的git動做相關;在實際工做中,Git Hooks仍是相對比較萬能的。下面僅舉幾個簡單的例子:npm

  • pre-commit: 檢查每次的commit message是否有拼寫錯誤,或是否符合某種規範。
  • pre-receive: 統一上傳到遠程庫的代碼的編碼。
  • post-receive: 每當有新的提交的時候就通知項目成員(可使用Email或SMS等方式)。
  • post-receive: 把代碼推送到生產環境。(這就是我想要作的)
  • etc...

更多的功能能夠按照生產環境的需求寫出來。segmentfault

Git Hooks是如何工做的?

每個Git repo下都包含有.git/hoooks這個目錄(沒錯,本地和遠程都是這樣),這裏面就是放置Hooks的地方。你能夠在這個目錄下自由定製Hooks的功能,當觸發一些Git行爲時,相應地Hooks將被執行。服務器

這裏是一個Git Hooks列表,如今若是以爲不是很明白,不用擔憂,之後我會繼續講:app

  • applypatch-msg
  • pre-applypatch
  • post-applypatch
  • pre-commit
  • prepare-commit-msg
  • commit-msg
  • post-commit
  • pre-rebase
  • post-checkout
  • post-merge
  • pre-receive
  • update
  • post-receive
  • post-update
  • pre-auto-gc
  • post-rewrite

image
圖中是我一個本地repo的git hooks示例。框架

如何開始使用Git Hooks?

好了,前面囉嗦一大堆,這裏纔是重點。工具

如圖中所示的文件,是由本地執行的腳本語言寫成的,儘管這些文件默認會是Shell Script,你徹底能夠給它替換成本身喜歡的RubyPython或者Perlpost

舉個例子,它是這個樣子的:

image

關於這些腳本文件的命名,細心的讀者就會發現圖中的文件都是上面Git行爲列表中列出的名稱加上後綴.sample。沒錯就是這樣,把那些文件的後綴去掉,或者以列表中的名字直接命名,就會把該腳本綁定到特定的Git行爲上。

因此說,Git Hooks的正確操做方式是:寫腳本。

Git Hooks項目介紹

  • node-hooks: 一個命令行下的Git Hooks管理工具
  • git-hooks: 一個全面的Git Hooks管理工具
  • Git::Hooks: 一個實現Git Hooks的框架
  • etc...

本篇完,第二篇在這裏

相關文章
相關標籤/搜索