12

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挂钩中应用哪种清理模式(必要时正确使用commit.cleanup 配置值)。我对我的提交消息进行了一些验证,我想确保我看到的是 Git 计划使用的确切内容。

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

4

2 回答 2

10

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

(添加包含设置的环境变量应该很容易。如果您想自己尝试一下,请参阅builtin/commit.cfunction ;使用适当parse_and_validate_options的参数调用 to 。)setenv()

于 2013-05-05T20:18:13.870 回答
0

这是我在 commit-msg 挂钩中所做的。(我需要检查行长,但忽略将作为注释剥离的长行。)

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

这样做的原因,根据git help hooks(参见 pre-commit 条目),是所有提交相邻的钩子GIT_EDITOR=:在不编辑提交的上下文中调用时都会收到。对于合并,以及在没有 的情况下提交--cleanup,这足以确定清理模式。

于 2018-11-29T18:26:56.373 回答