我需要使用多个预提交钩子脚本。不知道如何处理它们。是否应将所有这些组合成一个单独的大型预提交脚本?如果没有,如何处理多个预提交脚本?
答案 0 :(得分:24)
是否应将所有这些内容合并为一个大型的预提交脚本?
是和否:您只能声明一个预提交脚本,因此该脚本应该负责:
所以:
答案 1 :(得分:16)
您可以使用仅调用其他脚本(子挂钩)的委派脚本:
https://gist.github.com/carlos-jenkins/89da9dcf9e0d528ac978311938aade43
<强>用法:强>
让你的建筑系统在Git hooks目录中创建一个符号链接到这个脚本,并带有你想要参加的钩子的名称。
例如,pre-commit
。
然后,此挂钩将按字母顺序执行所有可执行文件
(子挂钩)在您正在参加的挂钩类型命名的文件夹下找到
以.d
为后缀。
例如,pre-commit.d
。
它看起来如何:
.git/hooks/
|_ pre-commit -> ../../tools/git/multihooks.py
|_ pre-commit.d/
|_ 01-cpp_coding_standard
|_ 02-python_coding_standard
|_ 03-something_else
这需要Python3,但你可以使用其他技术来提供类似的东西。
答案 2 :(得分:7)
您只能拥有一个预提交脚本,因此必须使用该脚本来调用多个其他脚本。
使用以下内容创建可执行文件/PATH/TO/GIT/.git/hooks/pre-commit
:
#!/bin/bash
cd "$(dirname "$0")/pre-commit.d"
for hook in *; do
bash $hook
RESULT=$?
if [ $RESULT != 0 ]; then
echo "pre-commit.d/$hook returned non-zero: $RESULT, abort commit"
exit $RESULT
fi
done
exit 0
然后将所有预提交脚本放入新的pre-commit.d/
目录中。
/PATH/TO/GIT/.git/hooks/
└── pre-commit.d
└── SCRIPT1
└── SCRIPT2
确保脚本文件是可执行的。请记住,默认情况下,脚本中的工作目录为/PATH/TO/GIT/.git/hooks/pre-commit.d/
。