如何在SourceTree中配置Git Flow预发布钩子,实现发布前执行npm run prod?
在SourceTree的Git Flow工作流中配置预提交钩子自动执行编译命令
当然可以!其实Git本身就自带钩子机制,SourceTree作为Git的可视化客户端,完全能借助这个特性帮你实现需求——在发布版本的最后一次提交前,自动执行npm run prod编译生产环境资源,再也不用担心不小心把dev环境的编译结果提交上去啦。
核心原理:Git的pre-commit钩子
Git的钩子是存在本地仓库.git/hooks目录下的脚本,会在特定的Git操作前/后自动触发。其中pre-commit钩子就是在提交操作执行前触发的,不管你用命令行还是SourceTree这类客户端,只要钩子配置正确,都会生效。
具体配置步骤
1. 找到本地仓库的钩子目录
打开你的项目根目录,找到隐藏的.git文件夹(如果看不到,在系统设置里开启显示隐藏文件),进入里面的hooks子目录。你会看到一些带.sample后缀的示例钩子文件,比如pre-commit.sample。
2. 创建并编辑pre-commit钩子脚本
- 复制
pre-commit.sample文件,重命名为pre-commit(去掉.sample后缀);或者直接新建一个无后缀的pre-commit文件。 - 用文本编辑器打开这个文件,替换里面的内容为以下脚本(根据你的系统选择bash或批处理版本):
Linux/macOS 下的bash脚本示例:
#!/bin/sh # 仅在Git Flow的发布分支触发(可选,按需开启) current_branch=$(git rev-parse --abbrev-ref HEAD) if [[ ! $current_branch =~ ^release/ ]]; then exit 0 # 不是发布分支,直接跳过钩子逻辑 fi # 执行生产环境资源编译 echo "🔧 开始编译生产环境资源..." npm run prod # 检查编译是否成功 if [ $? -ne 0 ]; then echo "❌ 生产环境资源编译失败,已取消提交!" exit 1 fi # 将编译后的资源加入本次提交(替换成你实际的资源目录,比如dist/、build/) git add dist/ echo "✅ 编译完成,已将资源加入提交"
Windows 下的批处理脚本示例:
@echo off :: 仅在Git Flow的发布分支触发(可选,按需开启) for /f %%i in ('git rev-parse --abbrev-ref HEAD') do set current_branch=%%i if not "%current_branch:~0,8%"=="release/" exit /b 0 :: 执行生产环境资源编译 echo 🔧 开始编译生产环境资源... npm run prod :: 检查编译是否成功 if %errorlevel% neq 0 ( echo ❌ 生产环境资源编译失败,已取消提交! exit /b 1 ) :: 将编译后的资源加入本次提交(替换成你实际的资源目录) git add dist/ echo ✅ 编译完成,已将资源加入提交
3. 给钩子脚本添加执行权限(仅Linux/macOS需要)
打开终端,进入项目根目录,执行以下命令:
chmod +x .git/hooks/pre-commit
Windows系统不需要这一步,直接保存脚本即可。
4. 在SourceTree中验证效果
当你用SourceTree启动Git Flow的发布流程(点击顶部工具栏的「Git Flow」按钮,选择「Start Release」),在发布分支上进行提交时,SourceTree会自动触发pre-commit钩子:
- 先执行
npm run prod编译资源 - 如果编译失败,提交会被自动取消,你能看到错误提示
- 编译成功后,脚本会把编译后的资源加入本次提交,然后正常完成提交
额外注意事项
- 确保你的项目根目录下有
package.json,并且里面正确配置了prod脚本。 - 如果不想限制仅在发布分支触发,可以删掉脚本里的分支判断逻辑,这样所有提交都会触发编译(但可能会影响日常开发效率)。
- 钩子是本地仓库的配置,不会同步到远程仓库,如果团队其他成员也需要这个功能,需要把钩子脚本共享给他们(比如放到项目的
scripts目录,再写个安装脚本复制到.git/hooks)。
内容的提问来源于stack exchange,提问作者OpensaurusRex
相关产品推荐
相关产品推荐

