通过 Git 的 post-checkout 钩子,在切换分支后自动检测 composer.lock 变更并执行 composer install,确保依赖同步。该脚本仅在分支切换时运行,检查文件变更且存在 composer.json 时触发安装,避免手动遗漏。需团队成员本地配置钩子并统一管理,提升协作效率,减少环境不一致问题。
在使用 Git 和 Composer 协同开发 PHP 项目时,经常会遇到切换分支或更新代码后依赖发生变化的情况。如果其他开发者修改了 composer.json 或 composer.lock 文件,当前环境可能缺少必要的依赖。为避免手动运行 composer install 的疏漏,可以通过 Git 的 post-checkout 钩子自动触发 Composer 安装流程。
Git 提供了多种钩子(hook)机制,post-checkout 是其中之一,它在每次执行 git checkout 或 git switch 成功后自动运行。该钩子可以用来检测代码变更,并执行诸如清理缓存、重建依赖等自动化任务。
目标是:当 composer.lock 文件在切换分支后发生变化时,自动运行 composer install 来同步依赖。关键在于判断文件是否真正变更,避免无意义重复安装。
在项目根目录下创建或编辑 .git/hooks/post-checkout 文件:
#!/bin/sh # .git/hooks/post-checkout参数说明:
$1: 上一个 HEAD 的 SHA-1
$2: 新的 HEAD 的 SHA-1
$3: 是否是分支检出(1 表示是)
IS_BRANCH_CHECKOUT=""
只在切换分支时执行(避免 git pull 触发)
if [ "$IS_BRANCH_CHECKOUT" != "1" ]; then exit 0 fi
检查是否存在 composer.lock 文件
if [ ! -f composer.lock ]; then exit 0 fi
检查 composer.lock 是否在本次变更中被修改
if git diff --name-only "$1" "$2" | grep -qE '^composer.lock$'; then if [ -f composer.json ]; then echo "Detected change in composer.lock, running composer install..." composer install --no-interaction fi fi
保存后,赋予可执行权限:
chmod +x .git/hooks/post-checkout虽然此方案能提升协作效率,但也需注意以下几点:
基本上就这些。通过简单的钩子脚本,就能让 Composer 在代码切换后自动同步依赖,减少因环境不一致导致的“在我机器上能跑”问题。