处理多个预提交挂钩

kar*_*101 25 git githooks

我需要使用多个预提交钩子脚本.不知道如何处理它们.是否应将所有这些组合成一个单独的大型预提交脚本?如果没有,如何处理多个预提交脚本?

Von*_*onC 26

是否应将所有这些组合成一个单独的大型预提交脚本?

是和否:您只能声明一个预提交脚本,因此该脚本应该负责:

  • 调用实际的预提交脚本
  • 选择了要调用这些脚本的订单.

所以:

  • 一个预提交脚本
  • 调用多个脚本,每个脚本允许或不允许(具有退出状态)提交继续进行.

  • 组织这种方法的一种方法是创建一个包含您希望运行的所有脚本的`pre-commit.d`目录.然后,您的`pre-commit`脚本将按照上面的建议按顺序运行所有这些脚本. (11认同)

Hav*_*vok 19

您可以使用仅调用其他脚本(子挂钩)的委派脚本:

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
Run Code Online (Sandbox Code Playgroud)

这需要Python3,但你可以使用其他技术来获得类似的东西.

  • 不知道为什么要包括Python 3的依赖关系,但是,我只是将`pre-commit`变成了一个shell脚本,然后从`pre-commit.d`目录中获取了其他shell脚本。到目前为止似乎工作正常。 (2认同)

Sim*_*amp 11

您只能拥有一个预提交脚本,因此您必须使用该脚本来调用多个其他脚本。

创建一个可执行/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
Run Code Online (Sandbox Code Playgroud)

然后将所有预提交脚本放在一个新pre-commit.d/目录中。

/PATH/TO/GIT/.git/hooks/
??? pre-commit.d
    ??? SCRIPT1
    ??? SCRIPT2
Run Code Online (Sandbox Code Playgroud)

确保脚本文件是可执行的。请记住,工作目录/PATH/TO/GIT/.git/hooks/pre-commit.d/默认位于脚本内。