GIT命令行控制的条件预提交钩子:有可能吗?

时间:2012-03-16 02:14:15

标签: git githooks

我们有一个很好的GIT预提交钩子,以及一个很好的commit-msg。预提交钩子执行语法验证,commit-msg执行一些其他业务逻辑。这一切都运作良好。

但是,我想在预提交钩子中添加编码标准验证。事实上,它已经添加了。但是,我不想严格执行我们的开发人员以符合编码标准,默认情况下我想验证标准的代码,但如果他们想通过编码标准验证,我想让他们通过在提交期间添加参数来传递。

是否有可能捕获/解释在提交前提交给git的任何命令行参数,以便在预提交钩子中跳过编码标准验证(可选?)

或者只能通过分析特定子字符串的提交消息才能在预提交消息钩子中进行?

请分享您使用git pre-commit hook(或其他git hooks)创建命令行控制条件代码的方式(以及在何处)的最佳实践。

2 个答案:

答案 0 :(得分:11)

一种简单的方法是简单地使用环境变量:

STANDARDS=no git commit

然后在脚本中(Bash中的示例,但你可以用你的钩子所用的任何语言读取env变种):

if [ "$STANDARDS" != "no" ]; then
    ...check for code standards...
fi

Git通常不会将man githooks中列出的信息传递给每个钩子,因此尝试使用“命令行选项”la git commit --no-standards执行此操作或某些此类操作不起作用

答案 1 :(得分:4)

要添加@Amber所说的内容,您应该能够:

STANDARDS=no git commit -m "committing"

并有适当的预提交钩子,它将看到环境变量并做出决定。

当然有--no-verify,但我想你不想跳过整个预提交:

  

-n
  --no-verify

     

此选项绕过pre-commit和commit-msg挂钩。也可以看看   githooks(5)。