0Pricing
Git & GitHub Professional Workflow · 课时

提交前与合并后钩子

通过实际示例,实现用于代码检查的提交前钩子和用于通知的合并后钩子。

提交前与合并后钩子 是 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”一词。

步骤:

  1. 创建 .git/hooks/pre-commit
  2. 粘贴这段代码
  3. 运行 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.txt
git 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 脚本。它会输出一条确认消息。

步骤:

  1. 创建 .git/hooks/post-merge
  2. 粘贴这段代码
  3. 运行 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 了解 Git 钩子
  2. 提交前与合并后钩子
  3. 自定义 Git 配置
  4. 使用 Husky 共享钩子
← 返回 Git & GitHub Professional Workflow