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

从GIT的命令行控制的条件预提交钩子:可能吗?,git,githooks,Git,Githooks,我们有一个不错的GIT预提交钩子,还有一个不错的提交消息。pre-commit钩子执行语法验证,commit-msg执行其他一些业务逻辑。一切都很好 但是,我想将编码标准验证添加到预提交挂钩中。事实上,它已经添加了。但是,我不想严格强制我们的开发人员与编码标准匹配,默认情况下,我希望验证标准的代码,但如果他们希望通过编码标准验证,我希望通过在提交期间添加参数让他们通过 是否可以捕获/解释在预提交钩子级别提交到git期间给出的任何命令行参数,以便跳过预提交钩子中的编码标准验证(可选?) 或者,只有

我们有一个不错的GIT预提交钩子,还有一个不错的提交消息。pre-commit钩子执行语法验证,commit-msg执行其他一些业务逻辑。一切都很好

但是,我想将编码标准验证添加到预提交挂钩中。事实上,它已经添加了。但是,我不想严格强制我们的开发人员与编码标准匹配,默认情况下,我希望验证标准的代码,但如果他们希望通过编码标准验证,我希望通过在提交期间添加参数让他们通过

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

或者,只有在预提交消息钩子中,通过分析特定子字符串的提交消息,才有可能实现这一点


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

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

STANDARDS=no git commit
然后在脚本中(Bash中的示例,但您可以用钩子所在的任何语言读取env vars):



Git通常不会将超出
man githooks
中列出的信息传递给每个钩子,因此尝试使用“命令行选项”la
Git提交——没有标准或类似的标准是不起作用的。

要补充@Amber所说的内容,您应该能够做到:

STANDARDS=no git commit -m "committing"
并具有适当的预提交挂钩,该挂钩将查看环境变量并做出决策

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

-n
--无验证

此选项绕过预提交和提交消息挂钩。另见 githooks(5)


甚至可以在repo的git配置文件中添加类似的内容。这样,当从命令行提交时,他们也可以使用
-c
选项进行覆盖。@Sergioperera您能详细说明您的想法/给出一个使用示例吗?对我来说,只有在变量前面添加
export
时,它才有效:
export STANDARDS=no git commit..
反正+1,这在简单性方面很有天赋,就像环境变量idea一样,但值将存储在git配置中(本地或全局)。bash脚本将检查
是否[“$(git-config-standards)”!=“否”
。默认值可以在git config中,但仍然可以用
git-c standards=no commit-m“my commit message”
@sergiopereira覆盖。这也很好,我不知道
-c
的“inline”设置。谢谢
STANDARDS=no git commit -m "committing"