使用Git的提交信息清理模式来自提交信息钩子的提交消息。

13

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.

我想确定从提交消息hook中将应用哪种清理模式(必要时正确使用commit.cleanupconfig value)。我对我的提交消息运行了一些验证,我想确保我看到的正是Git计划使用的内容。
或者,我可以接受一种方法来获取提交消息文本后清理(也许我可以欺骗Git为我清理它?)。对于我的用例来说,这将是很好的,因为我就不必担心重新实现任何清理模式了。
2个回答

10

很遗憾,在当前的GIT源代码中,清理模式并没有以任何方式传递给钩子。 --cleanup 的参数只存储在builtin/commit.c中的一个(对于static,仅限本地)变量cleanup_mode中,并且没有导出(例如作为参数或环境变量)到不同的钩子中。

(添加一个包含设置的环境变量应该很容易。如果您想自己尝试,请参见builtin/commit.c函数parse_and_validate_options;插入具有适当参数的setenv()调用即可。)


0
这是我在一个 commit-msg hook 中所做的事情。(我需要检查行长度,但要忽略将作为注释剥离的长行。)
  • 检查 git config commit.cleanup
  • 如果为空或为 default,则检查 git var GIT_EDITOR:如果它等于 :,那么清理模式是 whitespace,否则是 strip
  • 祈祷我的团队继续对 git commit--cleanup 选项一无所知。

根据 git help hooks(请参阅 pre-commit 条目)的原因是,在不编辑提交的上下文中调用所有与提交相关的 hook 时,它们都会收到 GIT_EDITOR=: 。 对于合并和没有使用 --cleanup 的提交,这足以确定清理模式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接