为Git设置全局勾子,自动追加提交信息
当多人一起开发软件时我们通常希望 Git 提交日志里能自动带上一些额外内容比如项目名称、任务编号像 JIRA ID或者分支类型因为这些信息对之后做代码审查、追踪修改记录或者配合自动化流程都很有帮助虽然每个 Git 仓库都能在.git/hooks/文件夹里放自己的钩子脚本但这种方式不仅麻烦而且新建项目时很容易被忘记所以本文会介绍如何通过设置 Git 全局钩子做到只配一次所有本地仓库都能自动用上。一、Git 钩子是什么Git 钩子Hooks是一种可以在你执行某些 Git 操作比如提交或推送之前或之后自动运行你自己写的小脚本的功能这些脚本默认都放在每个仓库的.git/hooks/目录里。其中用来修改提交信息的主要有两个钩子prepare-commit-msg在 Git 打开编辑器让你写提交内容之前触发可以提前填好一部分文字commit-msg在你写完提交信息但还没真正完成提交时运行一般用来检查格式是否符合要求。我们这里主要用的是prepare-commit-msg。二、设置全局钩子目录Git 允许你指定一个统一的钩子文件夹只要设置了这个文件夹里的脚本就会被所有本地仓库自动使用前提是仓库自己没有同名的钩子。1. 先建一个专门放钩子的目录mkdir -p ~/.git-hooks2. 告诉 Git 以后新建仓库时用这个目录当模板git config --global init.templateDir ~/.git-hooks注意这样改完之后只有新创建的仓库会用上这个设置已经存在的老项目不会自动生效需要另外处理。三、写一个全局的 prepare-commit-msg 脚本进入~/.git-hooks/目录创建脚本文件并给它加上执行权限touch ~/.git-hooks/prepare-commit-msg chmod x ~/.git-hooks/prepare-commit-msg下面是一个简单的例子它会在每条提交信息的开头自动加上[AUTO]这个标记#!/bin/sh # MSG_FILE 是 Git 传过来的提交信息文件路径 MSG_FILE$1 # SOURCE_TYPE 表示这次提交是怎么来的比如是直接用 -m 写的还是从模板生成的 SOURCE_TYPE$2 # COMMIT_SHA 是提交的哈希值在某些操作中才有 COMMIT_SHA$3 # 定义要加到提交信息里的文字 EXTRA_TAG[AUTO] # 如果不是用 -m 参数直接提交也就是会打开编辑器的情况就加上标记 if [ $SOURCE_TYPE ! message ]; then # 用 sed 在第一行末尾插入 EXTRA_TAG sed -i.bak 1s/$/ $EXTRA_TAG/ $MSG_FILE fi说明sed -i.bak会在改文件前先备份一份万一出问题还能恢复跳过-m提交是为了避免影响 CI 系统或者自动化脚本。四、让老项目也能用上全局钩子对于已经存在的项目你可以手动把钩子脚本复制过去cp ~/.git-hooks/prepare-commit-msg /path/to/existing/repo/.git/hooks/或者更简单一点在项目根目录重新运行git init这不会删你的代码或历史记录cd your-existing-project git init提示在已有 Git 仓库里执行git init是安全的它只会更新模板相关的设置不会动你的文件。五、更灵活的做法根据项目位置加不同内容你还可以让脚本看看当前在哪个文件夹然后决定加什么标记。例如CURRENT_DIR$(pwd) if ; then TAG[ALPHA] elif ; then TAG[BETA] else TAG fi # 如果有标记并且不是 -m 提交就加到提交信息里 if [ -n $TAG ] [ $SOURCE_TYPE ! message ]; then sed -i.bak 1s/$/ $TAG/ $MSG_FILE fi你甚至可以读取环境变量、配置文件或者从外部工具获取信息实现更复杂的逻辑。六、需要注意的地方脚本必须能运行记得用chmod x给它执行权限Windows 用户要小心确保脚本能在 Git Bash 或 WSL 里正常工作别改得太猛自动加内容可能会和团队的提交规范冲突最好先和大家商量好保留原始内容用sed -i.bak备份原文件防止不小心弄丢用户自己写的东西。七、总结一下通过 Git 的全局钩子功能你可以轻松实现在每次提交时自动加上有用的信息这样不仅让提交记录更清楚也省去了重复手动输入的麻烦如果你再结合当前路径、环境变量或者其他判断条件还能做出更聪明的提交辅助工具。小建议你也可以配上commit-msg钩子用来检查提交信息是否符合某种格式比如 Conventional Commits这样就能在源头上保证提交质量。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2524888.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!