简而言之:我找到了一个解决方案,但最初需要一些手动操作。
起初,我也尝试使用pre-commit
,但发现和一些同事报告的问题相同,即在使用VS Code的图形界面进行暂存和提交时无法正确执行它。(我总是使用终端)。
所以我写了自己的quality-gate.sh
脚本,它:
- 运行
source venv/bin/activate
- 然后才运行之前在
pre-commit-config.yaml
中定义的脚本
然后我手动将git钩子添加到.git/hooks
文件夹中,方法如下:
- 创建pre-commit钩子
mv pre-commit.sample pre-commit
- 打开脚本:
vim pre-commit
- 清空之前示例文件中的所有内容
- 添加我想要运行的脚本:
#!/bin/sh
sh ./quality-gate.sh
5. 保存文件:ESC + :wq
6. 完成!
✅ 现在脚本会在我添加了一些更改并运行 "git commit ..." 时运行。
这对于在VS Code中使用图形界面的方法也适用 - 只要脚本运行,"Commit"加载栏就会一直运行 - 所以根据你的预提交脚本具体做了什么,你可能需要耐心等待。
我还在我的 quality-gate.sh 中包含了一个
exit 1
命令,如果任何检查失败,提交将被中止。
附加信息:
由于我们使用的是单一代码库,我在逻辑中包含了changed_files=$(git diff --name-only --cached)
,以便获取更改的项目文件夹列表,只有在相应文件夹中有暂存文件(即有更改)时,才运行预提交钩子 - 否则将跳过检查。
由于这是一个离题的内容,我不会在这里包含它 - 但如果需要进一步的说明或对此主题感兴趣,请随时评论。