我有一个 monorepo,它有一个 C# 后端和一个 React 前端。前端位于子文件夹中,我正在尝试为 React 客户端专门设置一个 git 钩子。我安装了 husky,它可以处理 git 钩子,并且我创建了一个预推送钩子,每次我尝试推送最新的提交时都会运行它。
但是,我只希望在有包含来自前端的更改的提交时运行该预推送钩子。我尝试执行此操作的初始方法是让脚本运行命令git show
来输出一些文件名,如果与我们的 React 客户端的文件路径匹配,则运行我想要在预推送时运行的命令:
if git show --name-only -r --stat --oneline HEAD^^..HEAD | grep -q 'ReactClient/'; then
npm run verify
fi
问题是,我认为这只会检查最后 2 次提交。我需要检查自上次推送到远程存储库以来当前分支的所有提交中发生更改的文件。我该怎么做?
答案1
我通过稍微改变 git 命令解决了这个问题:
currentBranch=$(git rev-parse --abbrev-ref HEAD)
if git diff-tree --no-commit-id --name-only -r HEAD..origin/$currentBranch | grep -q 'client/'; then
cd client
npm run verify
fi