Git hooks 是git很是好用的一個特性,在我本身的項目中,我須要保證個人全部go源文件都可以被正確地格式化,而後纔可以被commit。所以,我用了一個很簡單的git hook完成這項工做,你能夠把這個文件的內容保存到.git/hooks/pre-commit
來實現這個功能。git
對我我的而言,這樣的工做已經足夠,可是我想把這個好主意分享給個人小夥伴們。這篇Stack Overflow 文章給了我一些靈感,我在這裏進行一些擴展。github
因爲.git
文件夾是不會被git跟蹤的,所以咱們須要在根目錄建立一個.githooks
來存儲咱們的hooks腳本。你能夠選擇任意的文件夾名,只要可以work便可。記住全部的hooks須要可執行權限,因此須要保證全部的hook腳本都執行過chmod +x
命令,不然,腳本將不會工做。golang
若是你的 Git版本爲Version 2.9或者更高,你能夠簡單地經過設置core.hooksPath
配置項來實現你的功能:bash
$ git config core.hooksPath .githooks
若是你在使用低版本的Git,你能夠經過符號連接實現上述功能,你能夠經過這個命令實現git的重定向:code
$ find .git/hooks -type l -exec rm {} \; && find .githooks -type f -exec ln -sf ../../{} .git/hooks/ \;
雖然hooks一般是本地腳本,可是在共享的時候,一般須要確保團隊的成員都可以將hooks放置在合適的位置,而且可以正常地工做。特別是在他們每次作了新的checkout的時候,所以我把個人腳本放在了Makefile
中,在每次個人項目初始化的時候自動去執行,下面是個人兩個任務:ip
init: git config core.hooksPath .githooks
earlier version:get
init: find .git/hooks -type l -exec rm {} \; find .githooks -type f -exec ln -sf ../../{} .git/hooks/ \;