与你的团队分享git hooks的两种方式

Git hooks 是git非常好用的一个特性,在我自己的项目中,我需要保证我的所有go源文件都能够被正确地格式化,然后才能够被commit。因此,我用了一个很简单的git hook完成这项工作,你可以把这个文件的内容保存到.git/hooks/pre-commit来实现这个功能。

对我个人而言,这样的工作已经足够,但是我想把这个好主意分享给我的小伙伴们。这篇Stack Overflow 文章给了我一些灵感,我在这里进行一些扩展。

创建你的受控的Hooks文件夹

由于.git文件夹是不会被git跟踪的,因此我们需要在根目录创建一个.githooks来存储我们的hooks脚本。你可以选择任意的文件夹名,只要能够work即可。记住所有的hooks需要可执行权限,所以需要保证所有的hook脚本都执行过chmod +x命令,否则,脚本将不会工作。

选择你的分享策略

如果你的 Git版本为Version 2.9或者更高,你可以简单地通过设置core.hooksPath配置项来实现你的功能:

$ git config core.hooksPath .githooks

如果你在使用低版本的Git,你可以通过符号链接实现上述功能,你可以通过这个命令实现git的重定向:

$ find .git/hooks -type l -exec rm {} \; && find .githooks -type f -exec ln -sf ../../{} .git/hooks/ \;

共享你的脚本

虽然hooks通常是本地脚本,但是在共享的时候,通常需要确保团队的成员都能够将hooks放置在合适的位置,并且能够正常地工作。特别是在他们每次做了新的checkout的时候,因此我把我的脚本放在了Makefile中,在每次我的项目初始化的时候自动去执行,下面是我的两个任务:

init:
  git config core.hooksPath .githooks

earlier version:

init: 
  find .git/hooks -type l -exec rm {} \;
  find .githooks -type f -exec ln -sf ../../{} .git/hooks/ \;

codestack
分享代码相关的经验及感悟,主要专注于golang,haskell

Blockchain从业者,Go, JavaScript, Haskell爱好者,函数式编程,高性能并发。

448 声望
51 粉丝
0 条评论
推荐阅读
理解 LSM Tree : 是什么让数据库这么能写?
log-structured merge-tree (LSM tree) 是一种被精心设计的数据结构,常用于处理大量写入的场景。通过对写入操作进行顺序写入优化实现性能提升。LSM tree 是很多数据库内部的核心数据结构,包括BigTable, Cassand...

terasum4阅读 6.9k

封面图
Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2.4k评论 2

封面图
Git 入门与实践
Git 入门与实践推荐:猴子都能懂的 GIT 入门Git --everything-is-loca 官方文档Git 教程-廖雪峰Git 的使用方式有很多。图形化 —— 小乌龟(Tortoise Git )、命令行—— git bash、IDE 集成等 ......目录1. 基础配置...

RainBow1阅读 2.2k

openKylin 0.9.5版本正式发布,加速国产操作系统自主创新进程!
2023年1月12日,中国桌面操作系统根社区openKylin(开放麒麟)正式发布openKylin 0.9.5操作系统版本。此版本充分适应5G时代需求,打通平板,PC等设备,实现多端融合,弥补了国产操作系统的短板,有效推动国产操作...

openKylin6阅读 7.5k

封面图
SegmentFault 思否技术周刊 Vol.78 — Git 必看技术补给
Git 的诞生是一个非常有趣的故事。1991年 Linus 开源了 Linux 内核,无数 Linux 爱好者在世界各地为 Linux 编写代码,那么问题来了,这些代码该如何管理呢?起初 Linus 使用 BitKeeper(BitMover 公司的版本控制软...

Beverly3阅读 1.6k

封面图
openSSH升级公钥失效Permission denied (publickey)解决方案
背景centos系统升级openSSH后,服务器上无法再拉取代码,报错如下:原因服务器重新安装SSH后公钥改变,需要重新安装ssh-keygen -t rsa -C "邮箱地址"生成公钥,删除gitlab原有公钥,但是git pull依然报错如下:依...

兰俊秋雨2阅读 1.3k

Git 分支管理策略汇总
我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的流程。所以查了一些资料,总结出下面这篇文章,一共包含四种常见的分支管理策略,分享给大家。

alwaysbeta3阅读 941

封面图

Blockchain从业者,Go, JavaScript, Haskell爱好者,函数式编程,高性能并发。

448 声望
51 粉丝
宣传栏