用于自动化的 Git 钩子

Posted

技术标签:

【中文标题】用于自动化的 Git 钩子【英文标题】:Git hooks for automation 【发布时间】:2021-11-14 13:36:12 【问题描述】:

我有以下要求,

    在提交消息中,我们必须捕获一些强制性数据,例如文件名、用户故事、描述等,然后这些数据将存储在数据库中。我们可以创建条件标签,以便开发人员可以根据用户故事、CR# 或缺陷# 给出需要修复的原因吗?

    我们有 spring boot gradle 项目。在这里,我们必须通过 Pre Commit Hook 自动化静态代码分析和 Junit 分析。我们可以用java写这些钩子吗?

请分享一些例子。

【问题讨论】:

请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

对于您的提交消息,有一种习惯方法来包含各种数据,这就是拖车系统。这些是以下格式的行:

Signed-off-by: A U Thor <author@example.com>
Fixes: 1234

您可以通过自己解析提交消息或使用git interpret-trailers 从中提取数据。如果您想在 Java 中执行此操作,这可能可以在 JGit 中完成,但它可能有也可能没有对解析预告片的内置支持。如果您需要自己实现它,强烈建议您使用与 Git 完全相同的解析技术以避免产生兼容性问题。

Unix 上钩子的一般规则是它们必须是二进制文件或操作系统可执行的脚本。通常 Java JAR 不满足该要求,因此您可能需要编写一个调用 Java 代码的 shell 脚本包装器。但是,这会很慢,因为您每次都需要启动一个完整的 JVM。

此外,您应该知道,作为the Git FAQ outlines,钩子并不是控制策略的有效工具:

尝试使用pre-commit 钩子(或者,对于提交消息,commit-msg 钩子)来检查这些东西是很常见的,如果您是作为独立开发人员工作并希望工具能够帮助您,这是非常棒的。但是,在开发人员机器上使用钩子作为策略控制并不有效,因为用户可以使用--no-verify 绕过这些钩子而不被注意到(以及其他各种方式)。 Git 假定用户可以控制他们的本地存储库,并且不会试图阻止这种情况或对用户进行攻击。

因此,如果您想拥有有效的控制,您需要在您的 CI 服务器上执行这些操作。您仍然可以为希望使用它们的开发人员提供挂钩,但您不能依赖它们运行。常见问题解答还提到这是您不想强制使用挂钩的另一个原因:

此外,一些高级用户发现pre-commit 挂钩会阻碍使用临时提交来暂存正在进行的工作或创建修复提交的工作流,因此最好还是将这些类型的检查推送到服务器。

【讨论】:

感谢您的信息..

以上是关于用于自动化的 Git 钩子的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Git 和 Husky 添加提交钩子并实现代码任务自动化

Android Git Hooks

Android Git Hooks

Android Git Hooks

实现github的自动钩子

gitLab 全局hooks和custom_hooks,以及怎样实现自动pull