如何仅当子文件夹中的文件自上次推送以来发生变化时运行预推送 git hook?

如何仅当子文件夹中的文件自上次推送以来发生变化时运行预推送 git hook?

我有一个 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

相关内容