首页 编程语言 如何为GIT设置全局勾子,为每次提交追加信息

如何为GIT设置全局勾子,为每次提交追加信息

全局 Git 钩子整体设置流程
一、目标与行为摘要
在 /Your/work/dir 及其子目录下的 Git 仓库中,执行 git commit 时,若未设置 NO_XXX,则在提交说明第一行末尾自动追加 [xxx]。
不在上述路径下的仓库:不追加;仍会尝试执行该仓库 .git/hooks/prepare-commit-msg(若存在)。
使用环境变量 NO_XXX(无需赋值)可跳过本次追加。
全局通过 core.hooksPath 指向固定目录;Husky 仓库需在项目内增加转发脚本(见第五节)。
二、目录与 Git 配置
1. 创建钩子目录
mkdir -p "$HOME/.config/git/hooks"
2. 指向该目录(全局)
git config --global core.hooksPath "$HOME/.config/git/hooks"
查看:

git config --global --get core.hooksPath
应输出:/Users/macadmin/.config/git/hooks(或 $HOME 展开后的等价路径)。

3. 为何需要单独目录
设置 core.hooksPath 后,Git 只使用该目录下的钩子文件,不再自动读取各仓库 .git/hooks 下的同名文件。因此需要:

在 prepare-commit-msg 中实现追加逻辑,并在适当时先调用 .git/hooks/prepare-commit-msg;
为 pre-commit、commit-msg、pre-push 等常用钩子提供转发脚本,内部执行 .git/hooks/<同名>(若存在),以尽量保持与未配置全局 hooksPath 时一致的行为。
三、prepare-commit-msg 逻辑要点
脚本建议包含:

解析仓库根目录:git rev-parse --show-toplevel,并用 cd "$ROOT" && pwd -P 规范化路径。
前缀判断:仅当根目录为 /Your/work/dir 或以其为前缀的子路径时,才执行追加。
NO_XXX 判断:若 [ "${NO_XXX+x}" = "x" ],则不再追加(变量已设置即可,不要求有值)。
链式旧钩子:若 $GIT_DIR/hooks/prepare-commit-msg 存在且可执行,先执行(避免与历史安装方式冲突)。
追加前检查:首行非空、且不以 [xxx] 结尾;使用 sed 修改首行(注意 macOS 与 GNU sed 对 -i 的差异,可用 sed -i.bak ... && rm -f *.bak)。
具体实现以当前目录下 prepare-commit-msg 文件为准。

四、转发类钩子(pre-commit、commit-msg 等)
在全局 hooksPath 目录中为每个需要的钩子名建立可执行脚本,内容模式为:

#!/usr/bin/env sh
GIT_DIR=$(git rev-parse --git-dir 2>/dev/null) || exit 0
LEGACY="$GIT_DIR/hooks/<钩子名>"
[ -x "$LEGACY" ] && exec sh "$LEGACY" "$@"
exit 0
将 <钩子名> 替换为 pre-commit、commit-msg 等。这样未使用 Husky、仅依赖 .git/hooks 的仓库仍能跑原有检查。

五、Husky 仓库额外步骤
若仓库执行:

git config core.hooksPath
得到 .husky/_(或任意非全局路径),则 Git 不会调用 $HOME/.config/git/hooks/prepare-commit-msg。

在该仓库 /.husky/prepare-commit-msg 中写入转发(需可执行):

#!/usr/bin/env sh
[ -x "${HOME}/.config/git/hooks/prepare-commit-msg" ] || exit 0
exec sh "${HOME}/.config/git/hooks/prepare-commit-msg" "$@"
保存后:

chmod +x .husky/prepare-commit-msg
之后在该仓库提交时,会由 Husky 调用上述文件,再进入全局 prepare-commit-msg 逻辑。

六、验证步骤
无 Husky、在 Work/code 下的测试仓库:

cd /Your/work/dir/某测试仓库
git commit --allow-empty -m "chore: 钩子测试"
git log -1 --pretty=%B
首行应类似:chore: 钩子测试 [xxx]。

跳过追加:

NO_XXX git commit --allow-empty -m "chore: 无 AI 标"
首行应无 [xxx]。

Husky 仓库:确认已存在 .husky/prepare-commit-msg 转发且可执行后,重复步骤 1。

七、撤销与排错
撤销全局 hooksPath
git config --global --unset core.hooksPath
撤销后,各仓库恢复默认使用 .git/hooks(以仓库内是否另有 core.hooksPath 为准)。

未追加时的检查清单
检查项 说明
是否在 Work/code 下 根目录须匹配 /Your/work/dir 前缀
是否设置了 NO_XXX env | grep NO_XXX
首行是否已有 [xxx] 已有则不再追加
仓库是否使用 Husky 是则需 .husky/prepare-commit-msg 转发
全局 core.hooksPath git config --global --get core.hooksPath
全局 Git 钩子使用说明
git config --global core.hooksPath 指向的钩子目录,用于在提交说明首行末尾追加 [xxx](见 prepare-commit-msg),并转发其它钩子到各仓库的 .git/hooks。

追加 [xxx] 何时生效
同时满足以下条件时,会在提交说明第一行(标题)末尾追加空格 + [xxx]:

仓库根目录(git rev-parse --show-toplevel 规范化后)位于 /Your/work/dir 或其子目录下。
环境变量 NO_XXX 未设置(见下文「如何跳过」)。
首行非空,且尚未以 [xxx] 结尾(避免 git commit --amend 重复追加)。
不满足第 1 条时:仍会执行 .git/hooks/prepare-commit-msg(若存在),但不会改说明、不追加。

如何跳过追加
只要 NO_XXX 已被设置(无需赋值),本次提交不会追加 [xxx]:

NO_XXX git commit -m "feat: 某功能"
export NO_XXX
git commit -m "feat: 另一功能"
NO_XXX= git commit -m "feat: 空值也算已设置"
取消跳过:unset NO_XXX。

Husky 仓库为何还要在项目里加钩子
若某仓库在本地配置了 core.hooksPath(例如 Husky 的 .husky/_),Git 只会执行该路径下的钩子,不会自动执行 prepare-commit-msg。

此类仓库需在 .husky/prepare-commit-msg 中转发到本机脚本,例如:

#!/usr/bin/env sh
[ -x "${HOME}/.config/git/hooks/prepare-commit-msg" ] || exit 0
exec sh "${HOME}/.config/git/hooks/prepare-commit-msg" "$@"
并赋予可执行权限:chmod +x .husky/prepare-commit-msg。

其它钩子(pre-commit、commit-msg 等)
pre-commit、commit-msg、pre-push 等为薄转发:若存在 .git/hooks/<同名> 且可执行,则执行之;否则直接退出。用于在设置了全局 core.hooksPath 后,仍能使用各仓库原先放在 .git/hooks 里的逻辑。

与 commitlint 等
prepare-commit-msg 在打开编辑器或写入 -m 说明之后、commit-msg 校验之前执行。追加后首行形如:feat: 描述 [xxx]。若与 commitlint 规则冲突,需在 commitlint.config.js 中放宽对 subject 的规则。

站星网

全局 Git 钩子整体设置流程一、目标与行为摘要在 /Your/work/dir 及其子目录下的 Git 仓库中,执行 git com..

为您推荐

Gitnuro:一款免费开源的跨平台 Git 可视化客户端

为什么需要 Git 可视化客户端?对于许多开发者来说,Git 命令行是最基础、最灵活的选择。但在以下场景中,图形界面客户端依然能够带来不少优势:降低学习门槛:新手不必记住复杂的命令就能直观地进行提交、分支、合..

Git Merge 与 Rebase 的区别与用法详解:如何选择更合适的分支合并策略

在 Git 的日常使用中,将一个分支的变更“合并”回另一个分支是常见操作。而在 Git 中,有两种主流方式可以实现这一目标:merge 和 rebase。二者都可以将两个分支的修改融合起来,但它们对提交历史的影响..

git版本管理全流程命令操作

git完整使用流程:# 1. 从远程仓库拉取代码git clone <repo link># 2. 从mian分支创建其他分支git checkout -b <my_branch># 3. 查看main分支最新提交,但不合并(pull会合并merge)git fetch origin# 3. 从远程仓库..

ThinkPHP5.0如何全局替换前端某个字符串

在 Nginx 配置文件中添加以下内容:sub_filter'旧字符串''新字符串';sub_filter_onceoff;在.htaccess文件中添加以下内容:<IfModulemod_substitute.c>AddOutputFilterByTypeSUBSTITUTEtext/htmlSubs..

7大Git实用技巧和命令总结

Git 是一个非常强大的工具,它包含丰富的工具用以维护项目。本文介绍了一些 Git 日常使用过程中的实用技巧和命令,希望这些内容能够对大家有所帮助。Git diff通常情况下,我们会在自己的独立分支中完成需求开发,此..

网站统计中的访问信息收集的前端实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascri..

.NET C# 使用Hook钩子实现全局监听键盘和鼠标

C# 是一种面向对象的编程语言,具有丰富的类库和工具支持,适用于各种类型的应用程序开发。Windows 提供了一种称为"钩子"(Hook)的机制,允许拦截并处理系统级别的事件,如键盘按键和鼠标移动。通过结合 C# 和 Hook..

SQL Server EF使用Sequence全局自增ID

在使用 Entity Framework (EF) 时,如果需要在 SQL Server 中实现一个 全局自增 ID,可以通过以下方法来实现。全局自增 ID 的需求通常是为了在多表之间实现唯一性递增 ID。实现方式 1:使用 SQL Server 的 SequenceS..

C# .NET Core 使用Snowflake.Core生成全局唯一ID

Snowflake.Core 通常指的是Twitter开源的分布式唯一ID生成器Snowflake的核心算法部分。Snowflake用于生成分布式环境中的唯一ID,以避免ID冲突。Snowflake的核心思想是将一个64位的整数ID分为多个部分:时间戳(41位..

获取ip信息的api有哪些?

获取 IP 信息的 API 很多,以下是一些常用的 IP 信息查询 API:IPInfo.io: https://ipinfo.io/IP-API.com: https://ip-api.com/GeoIPify: https://geoipify.whoisxmlapi.com/IPStack: https://ipstack.com/IPLoc..

C#修改注册表信息示例

在C#中操作Windows注册表(Registry)是很常见的任务。你可以使用 Microsoft.Win32.Registry 命名空间提供的类和方法来修改注册表信息。以下是一个简单的示例,展示了如何使用C#来修改注册表信息:修改注册表键值:..

C#中通过代码获取当前系统主板BIOS中序列号等信息的方法

在Windows中获取系统BIOS中的各种信息,可以用wmic命令,如下:wmic BIOS get name,manufacturer,version,serialnumber,releasedate,currentlanguage,descriptionName: 主板BIOS名称SerialNumber: 主板BIOS序列号Ver..

C#全局互斥锁的安全实践与性能优化

在C#中使用全局互斥锁是一种跨进程同步的有效方法。通过`Mutex`类,创建全局唯一的互斥锁,可确保多个进程安全访问共享资源。在关键代码段内,使用`WaitOne`获取锁,执行完后用`ReleaseMutex`释放。异常处理确保程序..

全局处理ASP.NET Core异常错误的几种方法

异常处理程序页若要为生产环境配置自定义错误处理页,请调用 UseExceptionHandler。 此异常处理中间件:捕获并记录未经处理的异常。使用指示的路径在备用管道中重新执行请求。 如果响应已启动,则不会重新执行请求。..

.NET Core MVC全局捕获和处理异常

在 ASP.NET Core MVC 中,全局捕获和处理异常有两种主要方法:1. 使用异常过滤器异常过滤器是一种 ASP.NET Core MVC 提供的机制,用于在应用程序中的任何位置捕获和处理异常。您可以创建自定义异常过滤器来处理特定..

如何移除驱动和软件程序文件的数字签名信息

问题描述在windows中,发布驱动程序(sys,cat),软件程序(exe,msi,dll等)文件的时候,正规的做法是需要做软件数字签名的,而有时候需要重新签名,或者想把之前的签名移除。解决方法这里分享一个可以直接移除数..

Linux下使用命令查看网卡速率驱动等信息

前言在Linux下查看网卡相关的速率,驱动,连接状态等信息有多个命令可以实现,比如ethtool, mii-tool等,下面就给出几个常用的查看网卡信息的命令。ethtool使用ethtool命令查看基本信息ethtool ethx #查看支持的速率..

C#中控制台程序(Console)注册全局快捷键

需求描述在C#开发应用时,有时候需要注册到快捷键(HotKey),二在控制台程序中由于没有消息循环,无法直接处理快捷键的事件,这里记录一下在控制台程序中,如何注册全局的快捷键。实现方法先上代码,HotKeyManager..

.NET WebApi全局修改返回的时间格式

在 .NET WebApi 中,你可以通过以下两种方式全局修改返回的时间格式:1. 使用 Newtonsoft.Json 配置Newtonsoft.Json 是一个流行的 JSON 序列化库,它提供了多种配置选项来控制 JSON 序列化的行为,包括时间格式化。..

Neofetch 替代品:3 个顶级 Linux 系统信息工具

Neofetch 是一种流行的命令行工具,用于以具有视觉吸引力的 ASCII 格式显示系统信息,但已不再积极开发。该项目的主要开发人员已将 GitHub 存储库存档,表明开发已停止。这一消息促使 Linux 社区探索可以填补 Neofet..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制
木德育儿网-健康孕育知识分享_育儿百科知识大全观知健康-健康知识小常识_养生知识分享交流平台三省养生网-养生文化分享与交流_健康知识传播知识库乾藏国学网-国学文化传播_国学经典分享与传承易学新知网-风水知识分享平台好孕堂-助孕健康知识--查询、助孕小知识分享无双运势网 - 易学爱好者交流平台!一步达贷款社区--·中介办卡贷款技术·网贷口子·卡民论坛app好运来网-易学知识分享平台_易经入门零基础自学曲大夫助孕-助孕知识分享交流平台道情先生-风水交流平台_道可道非常道巧农网 - 农业技术知识_乡村创业致富好帮手天慧理财网 - 专注财富增长_最全面的综合理财知识分享网站亿福缘网 - 风水知识分享平台亿洋易学-专注于易学知识分享的平台健康助孕科普内容平台,分享专业助孕知识-孕知网孕好网_专注试管婴儿科普_助孕问答_助您有好孕!包天龙运势网 - 易学爱好者交流平台!九六易学网 - 为易学爱好者提供一个优秀的学习知识平台来好孕 - 愿好运伴您而行风水知识网算命久久网-今日运势分享_祝您好运常伴品千年雅韵,书一纸风华 - 诗词百科诗词名句网叮当历史 - 古文排行榜_历史人物文化经典故事大全来福网 - 传统国学典故_国学文化感悟人生斗转星移网富凯风水孕力加持网-好孕汇聚之地_孕力加持_好孕终至幸孕方舟网-专业试管助孕资讯解析速配精选网-专注于理财知识分享交流平台看测运势网-周易生辰八字测算_免费八字合婚_婚姻配对测试迪肯风水头条-风水知识交流分享平台易学迷-易学风水学入门知识分享与交流久道网 - 传统国学典故_国学文化感悟人生乐禧易学网 - 专注于易学高质量案例分享网站历史时间网 - 全球历史上的今天大事件风水388 - 风水学入门_居家风水小常识伍贰易学网-专注于易学知识分享平台星座爱-专注于星座运势知识分享巴巴百科 - 专业知识问答百科分享平台族女网-引领国学新时尚_让国学流行起来_传统易学风水文化学佛笔记句子汇-每日经典语录短句推荐叶翁网-风水易学知识分享_周易易学知识占卦塔尘网素食购--素味禅心、膳养菩提术灿网-风水国学起名十二生肖运势_易学阴阳风水秘术雀牛网-2026热门汽车品牌排行榜_新能源汽车推荐_床车房车选购攻略_您身边的汽车专家植物迷-探索植物属性_种植技术知识分享平台龙哥易学网古诗词名句_诗词名句大全_古籍文学资料库-好再来网番茄免费文学平台_免费网络小说_无弹窗广告小说阅读网_诗词古文文学知识分享-番茄文学网工作岗位职责网-本年度各行业部门工作职责大全_提供各行各业岗位职责范本久图网-唯美图片_卡通动漫图片_天堂图片_帅哥美女艺术图片_数以万计美图资料库醋椒影视网-2026年热门电影作品推荐_最火爆的电视剧导航网站常能网-带您了解那些经典的历史故事超追影视网-2026最新热门电影_热播电视剧在线追剧_高清免费短剧视频导航巴佩体育网-体育赛事新闻资讯_2026最新实时体育赛事比分捷报站星网 - 用心服务每一位站长,助力每一份梦想八万四千法门助好孕 - 助孕小贴士助你有好孕经书网 - 以音声作佛事,聆听与观想的修学园地 jingshu.net佛教音乐网 - 海量佛乐、梵呗、禅音在线试听与下载塔尊佛教网|借视频之舟,渡烦恼之海 Tazun.Cn聚合地图网好客运势网 - 经典典籍文化传承者听佛音 - 最好听的静心天籁之音老司机知识库--你的自学加速引擎,海量资源带你极速成长!唯美图片 - 高清唯美壁纸头像背景图库_PicURL图集素超人 - 国内领先的素食分享平台点优作文网 - 优秀作文大全_日记周记_读后感_历年中考高考范文顺发万年历-2026年日历,2026年老黄历查询,2026年黄道吉日素食学佛网佛教导航 - 开启智慧之旅,连接十方法缘 | fjdh.org.cn顺运堂 - 专业家居风水布局,八字命理分析,助您家宅兴旺,运势亨通地藏论坛-佛教网络净土_佛法综合社区生食主义哦嘿养殖网 - 热门乡村养殖发展项目_养殖技术知识分享大师看风水道秘相取名网-生辰八字五行取名_十二生肖取名品读名篇佳句,涵养诗意人生 - 古诗词网新华字典在线查字_在线汉语学习_汉字拼音_笔画顺序_组词造句_英语词典_诗词名句-诗文谜藏佛寺官网国学在线 - 国学网,国学学校,国学经典,国学地图弘善佛教网-传播正信正知佛法的佛教网站素食美-关爱健康_素食之美藏佛坑官网必过留学网_海外院校库_留学申请条件_留学费用_排名查询江湖以冷网 - 品读历史故事,感悟世间冷暖。生死书 - 佛教文化传承与生命智慧探索平台乐乐易学网-易学知识分享_生辰八字查询_五行八卦测算久食宿 - 旅游出行特色民宿推荐_全国名宿信息一览表趣知道 - 提问与分享,人人都是知识分享家 | Quzhidao.Com地藏孝亲网--南无大愿地藏王菩萨给农网吃好素-让生活因素而美情感语录网-婚姻情感语录_经典爱情语录_情感短信七七爱生活网十二星座_十二生肖运势_配对表_查询- 星座袋风水人家-国学文化风水知识交流平台道法网-风水运势解析_家居风水知识分享玖爱星座网-星座运势配对知识分享交流就识趣_专业中国传统文化网站_风水学藏经阁-最全的佛教经典典籍文库108工具网——您的全能在线工具箱中医文献网-中医古籍全文数据库推荐奇闻网-探索历史故事_带您了解历史上那些事儿八零生活网品酒啦-酒文化知识分享平台古籍文学网-最全的古文化知识分享平台公司起名-专注于弘扬传统文化的平台_宝藏典籍网非常易学网-生辰八字预测_生肖运势星座匹配居士之家-最全面的华人居士在线交流网站平台素超人-专注于善知识分享交流平台素超人 - 正能量善知识分享平台素超市 - 纯素生活购物平台VisaMastercardAmerican ExpressPayPalDiners ClubDiscover斗图趣 - 斗图表情包_有趣的斗图资源库富达裕-古文化经典藏品知识分享平台学佛网手机版笑一个吧 O(∩_∩)O 笑话大全_给生活加点笑料-XiaoYiGe.Cn班超文学网-优秀文学知识分享交流平台政卿事迹网-带您了解历史上的那些事儿素满香取名去 - 姓氏取名一览表_百家姓名字大全学佛网 - 佛弟子在线网络分享交流平台正能量网 - 传递正能量_真善美美文推荐搞笑gif动图网 - 内涵爆笑段子gif动态图_QQ表情包恶搞图片大全_97Gif.Com