每当 RepoA 中有人在分支上进行提交时,我想在本地运行脚本
currentBranch=$(git rev-parse --abbrev-ref HEAD)
if [[ $currentBranch = *"my-"* ]]; then
echo "contains my"
else
echo "Hold on there! you need to rename your branch before you commit!
"
fi
到目前为止,我已经运行了这个功能,每当我运行
npm run test:script
时,它都会运行>"test:script": "./branchname.sh"
但是,我有一些问题。我如何在每次有人提交时运行它?
我尝试将其放入我的package.json
"pre-commit": [
"lint",
"test:script"
],
但它不会在每个提交
上运行另外,如果脚本失败,我怎样才能让提交本身中止,即跳到 else 块中
您可以利用 git hooks。您可以在项目文件夹中的
.git/hooks
文件夹中找到一堆文件。
完整文档:https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks(于 2024 年更新)
请注意,您需要授予 exec 权限来挂钩文件。
Hook 基本上可以是 bash 文件,因此您可以中止提交,并使用值 != 0 退出。
这里有一个例子:https://github.com/xyzale/my-stuff/blob/master/git/hooks/pre-commit
为了与协作者共享钩子,您可以将
hooks/
文件夹添加到存储库,并将其符号链接到 .git/hooks
或通过命令编辑有关钩子位置的 git 配置
git config core.hooksPath hooks