提交前与合并后钩子
通过实际示例,实现用于代码检查的提交前钩子和用于通知的合并后钩子。
提交前与合并后钩子 是 CoddyKit 上的免费 Git & GitHub Professional Workflow 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Git & GitHub Professional Workflow 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Git & GitHub Professional Workflow 课程共包含 4 节课。
Git 钩子实战简介
在上一课中,我们学习了 Git 钩子及其不同类型。现在,让我们开始实践吧!
我们将深入实现两个强大的钩子:pre-commit 和 post-merge。它们可以让您在提交前自动执行检查,并在合并后自动执行操作。
Pre-commit:您的质量门
pre-commit 钩子会在提交操作之前运行,但会在您使用 git add 暂存更改之后运行。
- 它非常适合强制执行代码质量和代码风格要求。
- 您可以用它运行代码检查器、风格检查器,甚至基础单元测试。
- 如果脚本以非零状态退出,提交会自动中止。
这样可以确保只有高质量且符合要求的代码进入您的仓库。
设置 Pre-commit 钩子
要创建 pre-commit 钩子,您需要在项目的 .git/hooks/ 目录中创建一个名为 pre-commit 的可执行文件。
Git 会提供扩展名为 .sample 的示例钩子。您需要移除该扩展名,然后添加自己的脚本。
请记得使用以下命令使文件可执行:chmod +x .git/hooks/pre-commit
示例:阻止包含 TODO 的提交
让我们创建一个简单的 pre-commit 钩子,阻止您提交仍包含“TODO”一词的文件。这是一种常见做法,可确保未完成的任务不会混入代码库。
该脚本会检查所有已暂存的文件中是否包含这个关键词。如果找到,它就会停止提交。
Pre-commit 钩子:禁止 TODO!
下面是适用于您的 .git/hooks/pre-commit 文件的简单 shell 脚本。它会检查已暂存的 .txt 文件中是否包含“TODO”一词。
步骤:
- 创建
.git/hooks/pre-commit - 粘贴这段代码
- 运行
chmod +x .git/hooks/pre-commit
#!/bin/sh
# Check staged .txt files for "TODO"
for file in $(git diff --cached --name-only --diff-filter=ACM | grep '\.txt$'); do
if grep -q "TODO" "$file"; then
echo "ERROR: Found 'TODO' in staged file: $file"
echo "Please remove TODOs before committing."
exit 1
fi
done
exit 0测试您的 Pre-commit 钩子
要测试这个钩子,请先创建一个文件(例如 test.txt),并在其中添加“TODO: Finish this”。然后尝试提交它:
git add test.txtgit commit -m "Add test file"
提交应该会被中止,您将看到钩子输出的错误消息。从 test.txt 中移除“TODO”后,提交就会成功!
Post-merge:自动执行合并后的操作
post-merge 钩子会在 git merge 命令成功完成后自动运行。
- 它适合处理代码合并后应执行的集成任务。
- 例如通知团队成员、更新项目依赖项(如
npm install),或运行构建脚本。 - 与 pre-commit 不同,这个钩子不会影响合并结果。
这是自动执行合并后流程的好方法。
设置 Post-merge 钩子
与 pre-commit 类似,您需要在 .git/hooks/ 目录中创建一个名为 post-merge 的文件。
同样,请确保它是可执行文件:
chmod +x .git/hooks/post-merge
这样,每次仓库中的合并完成后,这个脚本都会运行。
示例:合并完成提醒
让我们创建一个 post-merge 钩子,让它简单地向控制台输出一条消息,确认刚刚发生了合并。在实际场景中,它还可以触发持续集成/持续交付流水线,或向聊天应用发送通知。
Post-merge 钩子:通知
下面是适用于您的 .git/hooks/post-merge 文件的简单 shell 脚本。它会输出一条确认消息。
步骤:
- 创建
.git/hooks/post-merge - 粘贴这段代码
- 运行
chmod +x .git/hooks/post-merge
#!/bin/sh
# This hook runs after a merge operation.
echo "--- Post-merge hook triggered ---"
echo "A merge has just completed in your repository."
echo "You might want to run 'npm install' or 'bundle install' now."
echo "---------------------------------"
exit 0钩子检查:Pre-commit 与 Post-merge
以下哪项任务通常应由 pre-commit 钩子处理?
回顾:让钩子发挥作用
做得很好!在本课中,您学会了实现实用的 Git 钩子。
- Pre-commit 钩子充当质量门,在提交*之前*运行代码检查或测试等检查。
- Post-merge 钩子会在合并*之后*自动执行操作,例如发送通知或更新依赖项。
这些钩子是强制执行标准和自动化 Git 仓库工作流的强大工具。继续探索其他钩子类型,进一步定制您的 Git 使用体验吧!
常见问题解答
「提交前与合并后钩子」课时是免费的吗?
是的 — 「提交前与合并后钩子」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Git & GitHub Professional Workflow 课程的其余内容,请升级到 CoddyKit PRO。 Git & GitHub Professional Workflow 课程共包含 4 节课。
「提交前与合并后钩子」这节课中我会学到什么?
通过实际示例,实现用于代码检查的提交前钩子和用于通知的合并后钩子。 你通过在浏览器中直接运行的动手代码来练习 Git & GitHub Professional Workflow,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Git & GitHub Professional Workflow 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Git & GitHub Professional Workflow 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「提交前与合并后钩子」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Git & GitHub Professional Workflow 课中编写并运行代码吗?
能。每节 Git & GitHub Professional Workflow 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 了解 Git 钩子
- 提交前与合并后钩子
- 自定义 Git 配置
- 使用 Husky 共享钩子