与你的团队分享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/ \;
相关文章
相关标签/搜索