从commit-msg钩子使用Git的提交消息清理模式

时间:2013-04-29 06:56:13

标签: git githooks

git help commit说以下内容:

--cleanup=<mode>
   This option determines how the supplied commit message should be
   cleaned up before committing. The <mode> can be strip, whitespace,
   verbatim, or default.

   strip
       Strip leading and trailing empty lines, trailing whitespace,
       and #commentary and collapse consecutive empty lines.

   whitespace
       Same as strip except #commentary is not removed.

   verbatim
       Do not change the message at all.

   default
       Same as strip if the message is to be edited. Otherwise
       whitespace.

我想确定将从commit-msg hook应用哪种清理模式(必要时正确使用commit.cleanup config value)。 I run some validations on my commit messages我想确保我看到Git正在计划使用的内容。

或者,我会接受一种方法来获取清理后的提交消息文本(也许我可以欺骗Git为我清理它?)。这对我的用例非常有用,因为那时我不必担心重新实现任何清理模式。

2 个答案:

答案 0 :(得分:10)

不幸的是,在当前(ish)git源中,清理模式不会以任何方式传递给钩子。 --cleanup的参数仅存储在(static,本地到builtin/commit.c)变量cleanup_mode中,而不是导出(例如,作为参数或环境变量)到各种钩。

(添加包含该设置的环境变量应该很容易。如果您想亲自体验一下,请参阅builtin/commit.c函数parse_and_validate_options;打电话给setenv()适当的论点。)

答案 1 :(得分:0)

这就是我在commit-msg挂钩中所做的事情。 (我需要检查行长,但忽略将被注释掉的长行。)

  • 选中git config commit.cleanup
  • 如果为空白或default,请检查git var GIT_EDITOR:如果等于:,则清理模式为whitespace,否则为strip。 / li>
  • 祈祷我的团队继续对git commit的--cleanup选项感到幸福。

对于每个git help hooks(请参阅pre-commit条目),这样做的原因是,在不编辑提交的上下文中调用所有相邻的钩子都将收到GIT_EDITOR=:。对于合并和在没有--cleanup的情况下进行提交,这足以确定清除模式。