與你的團隊分享git hooks的兩種方式

Git hooks 是git很是好用的一個特性,在我本身的項目中,我須要保證個人全部go源文件都可以被正確地格式化,而後纔可以被commit。所以,我用了一個很簡單的git hook完成這項工做,你能夠把這個文件的內容保存到.git/hooks/pre-commit來實現這個功能。git

對我我的而言,這樣的工做已經足夠,可是我想把這個好主意分享給個人小夥伴們。這篇Stack Overflow 文章給了我一些靈感,我在這裏進行一些擴展。github

建立你的受控的Hooks文件夾

因爲.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/ \;
相關文章
相關標籤/搜索