【发布时间】:2014-12-24 19:18:05
【问题描述】:
我需要使用多个预提交挂钩脚本。不知道如何处理它们。是否应该将所有这些组合成一个大型预提交脚本?如果没有,如何处理多个预提交脚本?
【问题讨论】:
我需要使用多个预提交挂钩脚本。不知道如何处理它们。是否应该将所有这些组合成一个大型预提交脚本?如果没有,如何处理多个预提交脚本?
【问题讨论】:
是否应该将它们全部组合成一个大型预提交脚本?
是与否:你只能声明一个预提交脚本,所以这个脚本应该负责:
所以:
【讨论】:
pre-commit.d 目录,其中包含您希望运行的所有脚本。然后,您的 pre-commit 脚本将按照上述建议的顺序运行所有这些脚本。
您可以使用只调用其他脚本(子挂钩)的委托脚本:
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,但您可以使用其他技术提供类似的东西。
【讨论】:
pre-commit 制作为一个 shell 脚本,然后从 pre-commit.d 目录中获取其他 shell 脚本。到目前为止似乎工作正常。
您只能拥有一个预提交脚本,因此您必须使用该脚本来调用多个其他脚本。
使用以下内容创建一个可执行的/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/。
【讨论】: