【问题标题】:Which git hook to use for validating pushed commit messages?哪个 git 挂钩用于验证推送的提交消息?
【发布时间】:2015-09-21 23:15:04
【问题描述】:

我需要验证推送到远程的提交消息,以防止开发人员没有在(字符串长度)中输入足够的细节或只输入票号。

我认为更新钩子可以解决这个问题,但它没有——它似乎可以,但它只适用于之前推送的引用。当我尝试推送一个新分支时,它拒绝了,因为它找不到参考。我怀疑它也可能只针对推送系列中的最新提交运行。

执行此任务的正确钩子选择是什么?

片段:

#!/usr/bin/env php
<?php

define('MINIMUM_MESSAGE_LENGTH', 10);

$exit = 0; // default exit code -> success

$ref = $argv[1];
$commitMessage = exec('git log -1 ' . $ref . ' --pretty=format:%s');
$commitMessage = trim($commitMessage);

// validations & exit($exit) follow; 

是的,这是 PHP,但问题与语言无关

【问题讨论】:

标签: git githooks


【解决方案1】:

策略执行意味着服务器端挂钩。

  • pre-commit 这样的client-side hook 可以被绕过,并且不容易部署。
  • server-side 部署一次(在 Git 存储库托管服务器上),您就完成了。

Git Pro 书中有一个示例 ("Customizing Git - An Example Git-Enforced Policy"),它应该适用于新分支以及旧分支推送。

您可以在“How do we verify commit messages for a push?”找到其他示例。

【讨论】:

  • 你知道哪个服务器端钩子适用于这个用例吗?我同意重新客户端钩子 - 很难执行,并且对于新的初学者/新克隆来说不会开箱即用。
【解决方案2】:

你是对的,更新挂钩不起作用。如果您需要强制执行提交消息标准,则应使用预提交挂钩。它将在提交之前运行并确保提交是标准的,然后继续创建提交。 这是一个预提交钩子示例

https://github.com/git/git/blob/master/templates/hooks--pre-commit.sample

有关 git hooks 的更多信息,请查看此

http://githooks.com/

【讨论】:

  • 预提交挂钩是客户端挂钩。要使用这样的钩子强制执行策略,您需要确保所有贡献者都在其本地克隆中启动并运行它,这可能很棘手。见VonC's answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2020-09-11
  • 2011-02-01
  • 2016-04-02
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多