core.hooksPath 是什么
core.hooksPath 把 Git 查找钩子的目录从默认的 .git/hooks 改成指定目录(常见做法是指向仓库内的 .githooks/)。这样钩子脚本可以随仓库提交、参与评审,全队共享同一套本地检查;代价是 .git/hooks 下的内容不再生效,而且每位成员要各自执行一次配置。
基本信息
| 配置 | git config core.hooksPath .githooks |
|---|---|
| 目录约定 | .githooks/ 入库;脚本需要可执行位 |
| 生效范围 | 本地配置,新克隆需重配或用初始化脚本代劳 |
| 覆盖关系 | .git/hooks 默认目录被完全覆盖 |
典型使用场景
- 团队统一的 pre-commit 检查:格式、lint、敏感词扫描随仓库分发
- 仓库自带 commit-msg 校验:提交信息规范不依赖每个人手工安装
- 本地门禁随分支演进:改规则走评审,而不是聊天群发脚本
- 分支切换与合并后的提醒:post-checkout 类钩子做差异化准备,需控制耗时
- 替代把脚本手工拷进 .git/hooks 的口头流程,新人克隆即得同等检查
常用示例
常用示例
mkdir -p .githooks # 建目录
git config core.hooksPath .githooks # 指向它(每个克隆各配一次)
printf '#!/bin/sh\necho pre-commit ok\n' > .githooks/pre-commit # 最小示例钩子
chmod +x .githooks/pre-commit # 可执行位必须给
git config --get core.hooksPath # 确认配置已生效常用钩子与时机
| 钩子 | 触发时机 | 典型用途 |
|---|---|---|
| pre-commit | 提交前 | 格式与轻量 lint,失败即终止提交 |
| commit-msg | 提交信息生成后 | 校验信息规范、追加签发行 |
| pre-push | 推送前 | 测试或急体检查、拦截直推主干 |
| post-checkout 与 post-merge | 检出与合并后 | 依赖变更提醒,注意可能拖慢操作 |
钩子只在本机执行且可被 --no-verify 跳过,定位是快速反馈而非强制门禁;统一约束要靠 CI 或服务端钩子,CI 里最好复刻一份同等检查。
Windows 下钩子由 Git for Windows 自带的 sh 执行:注意脚本换行符(CRLF 会破坏 shebang),入库后用 git ls-files -s 检查可执行位是否被记录。