我如何在Git中编写预合并挂钩?

jos*_*urs 43 git merge githooks

问题就是这一切.有没有办法在合并之前执行操作?我猜有一种方法可以使用pre-commit钩子,但我不太确定.

Kou*_*sha 22

你可以尝试使用prepare-commit-msg钩子.第二个参数将是merge"如果提交是合并或.git/MERGE_MSG文件存在".非零退出状态将中止提交.

我不认为这将适用于快进合并,因为不会有提交消息.

关于钩子的更多信息:https://www.kernel.org/pub/software/scm/git/docs/githooks.html#_prepare_commit_msg

  • 执行git合并时似乎没有触发此操作.要看到这个:将`exit 1`放在prepare-commit-msg的顶部并执行合并提交. (3认同)
  • 这是一次快速合并吗?如果合并没有触发提交消息,它将无济于事. (3认同)
  • 即使是与提交(消息)的实际合并,也不会触发.我已经尝试过上面描述的测试...很高兴被证明是错误的例子,但请给它一个测试. (2认同)
  • 即使现在这可能吗?我一直试图触发一个钩子,在有人合并之前会启动它.我认为不可能,但只是想确认一下. (2认同)
  • 适用于我与 git 2.18 的非快进合并。`printf -- '%s\n%s\n' '#!/bin/sh' 'echo nope && exit 1' > 准备提交消息` (2认同)

Von*_*onC 9

使用Git 2.24(2019年第四季度)时,不需要脚本包装器或prepare-message挂钩。

引入了新的“ pre-merge-commi t”挂钩。

请参阅Michael J Gruber()的commit bc40ce4commit 6098817commit a1f3dd7(2019年8月7日。 参见Josh Steadmon()的commit f78f6c7(2019年8月7日(通过合并JUNIOÇ滨野- -提交f76bd8c,2019年9月18日)mjg
steadmon
gitster

git-merge:荣誉pre-merge-commit挂钩

git-merge 在执行自动合并提交时不支持预提交钩子,并且出于兼容性原因,这将保留。

引入一个pre-merge-commit称为自动合并提交的钩子,就像为非自动合并提交(或任何其他提交)调用预提交一样。

文档现在包括:

合并前提交

该挂钩由调用git-merge
它不带任何参数,并且在成功执行合并之后且在获取建议的提交日志消息以进行提交之前被调用。
从该脚本git merge以非零状态退出会导致命令创建提交之前中止。

如果启用了默认的“ pre-merge-commit”挂钩,则启用了“ pre-commit”挂钩。

GIT_EDITOR=:如果该命令不会调出编辑器来修改提交消息,那么该钩子将与环境变量一起调用。

如果无法自动执行合并,则需要解决冲突,并分别提交结果(请参阅参考资料git-merge)。
届时,将不会执行此挂钩,但是pre-commit如果启用了' '挂钩。