无法创建鼠标钩子_Git Hooks钩子

Git Hooks

与许多其他版本控制系统一样,Git可以在发生某些重要操作时触发自定义脚本。这些钩子有两组:客户端和服务器端。客户端挂钩由提交和合并等操作触发,而服务器端挂钩则在网络操作(如接收推送提交)上运行。出于各种原因,您可以使用这些挂钩。

安装挂钩

钩子都存储在hooksGit目录的子目录中。在大多数项目中,就是这样.git/hooks。当你使用初始化一个新的存储库时git init,Git用一堆示例脚本填充hooks目录,其中许多脚本本身是有用的; 但他们也记录了每个脚本的输入值。所有示例都是作为shell脚本编写的,并引入了一些Perl,但任何正确命名的可执行脚本都可以正常工作 - 您可以用Ruby或Python或您熟悉的任何语言编写它们。如果要使用捆绑的钩子脚本,则必须重命名它们; 他们的文件名都以.sample。

要启用钩子脚本,请将文件放在hooks.git目录的子目录中,该目录名称相应(没有任何扩展名)并且是可执行的。从那时起,它应该被称为。我们将在这里介绍大多数主要的钩子文件名。

客户端挂钩

有很多客户端钩子。本节将它们分为提交工作流挂钩,电子邮件工作流脚本以及其他所有内容。

注意

请务必注意,克隆存储库时不会复制客户端挂钩。如果您对这些脚本的意图是强制执行策略,那么您可能希望在服务器端执行此操作; 请参阅示例Git-Enforced Policy中的示例。

提交 - 工作流程挂钩

前四个钩子与提交过程有关。

该pre-commit钩首次运行之前,你甚至在键入提交消息。它用于检查即将提交的快照,查看是否忘记了某些内容,确保测试运行,或检查代码中需要检查的内容。从此挂钩退出非零会中止提交,尽管您可以绕过它git commit --no-verify。您可以执行诸如检查代码样式(运行lint或等效的东西),检查尾随空格(默认钩子正是这样做)或检查有关新方法的适当文档的操作。

在prepare-commit-msg提交信息编辑器被触发之前钩子运行,但在创建默认的消息后。它允许您在提交作者看到之前编辑默认消息。这个钩子需要一些参数:到目前为止保存提交消息的文件的路径,提交的类型,以及提交SHA-1(如果这是修改的提交)。这个钩子通常对正常提交没用; 相反,它适用于自动生成默认消息的提交,例如模板化提交消息,合并提交,压缩提交和修改提交。您可以将它与提交模板结合使用,以编程方式插入信息。

所述commit-msg挂钩接收一个参数,此参数是路径到包含由开发者编写的提交信息的临时文件。如果此脚本退出非零,Git将中止提交过程,因此您可以在允许提交之前使用它来验证项目状态或提交消息。在本章的最后一节中,我们将演示如何使用此钩子来检查您的提交消息是否符合所需的模式。

整个提交过程完成后,post-commit钩子运行。它不需要任何参数,但您可以通过运行轻松获得最后一次提交git log -1 HEAD。通常,此脚本用于通知或类似的东西。

电子邮件工作流程钩子

您可以为基于电子邮件的工作流设置三个客户端挂钩。它们都是由git am命令调用的,因此如果您未在工作流程中使用该命令,则可以安全地跳到下一部分。如果您正在通过准备的电子邮件获取补丁git format-patch,那么其中一些可能对您有所帮助。

运行的第一个钩子是applypatch-msg。它只需要一个参数:包含建议的提交消息的临时文件的名称。如果此脚本退出非零,Git将中止该修补程序。您可以使用它来确保正确格式化提交消息,或者通过让脚本对其进行编辑来规范化消息。

应用补丁时运行的下一个钩子git am是pre-applypatch。有点令人困惑的是,它应用补丁之后但在提交之前运行,因此您可以在进行提交之前使用它来检查快照。您可以使用此脚本运行测试或以其他方式检查工作树。如果缺少某些内容或测试未通过,则退出非零会中止git am脚本而不提交修补程序。

在git am操作期间运行的最后一个钩子是post-applypatch在提交之后运行的。您可以使用它来通知您所提取的补丁的组或作者。您无法使用此脚本停止修补过程。

其他客户端挂钩

pre-rebase在您重新定义任何内容之前,钩子会运行,并且可以通过退出非零来暂停该过程。您可以使用此挂钩来禁止重新定位已经推送的任何提交。pre-rebaseGit安装的示例钩子做了这个,虽然它做了一些可能与你的工作流程不匹配的假设。

该post-rewrite钩是由更换提交,如命令运行git commit --amend和git rebase(尽管不是通过git filter-branch)。它的唯一参数是哪个命令触发了重​​写,并且它接收了一个重写列表stdin。这个钩子有很多相同的用途为中post-checkout和post-merge挂钩。

运行成功后git checkout,post-checkout钩子运行; 您可以使用它为您的项目环境正确设置工作目录。这可能意味着移动您不希望源控制,自动生成文档或其他类似的大型二进制文件。

该post-merge钩成功后运行merge命令。您可以使用它来恢复Git无法跟踪的工作树中的数据,例如权限数据。此挂钩同样可以验证在工作树更改时您可能希望复制的Git控件外部文件的存在。

该pre-push挂钩过程中运行git push,远程裁判已被更新,但任何对象已经转移之前后。它接收远程的名称和位置作为参数,以及要更新的refs列表stdin。您可以使用它在推送发生之前验证一组ref更新(非零退出代码将中止推送)。

Git通过调用偶尔会将垃圾收集作为其正常操作的一部分git gc --auto。该pre-auto-gc钩子被调用垃圾收集发生之前的地方,可以用来通知您这种情况的发生,或中止收集,如果现在还不是一个好时机。

服务器端挂钩

除了客户端挂钩之外,您还可以使用几个重要的服务器端挂钩作为系统管理员来为您的项目强制执行几乎任何类型的策略。这些脚本在推送到服务器之前和之后运行。预挂钩可以随时退出非零以拒绝推送以及将错误消息打印回客户端; 您可以设置一个尽可能复杂的推送策略。

pre-receive

处理来自客户端的推送时运行的第一个脚本是pre-receive。它需要一个从stdin推送的引用列表; 如果它退出非零,则不接受任何一个。您可以使用此挂钩来执行以下操作:确保没有更新的引用是非快进的,或者对通过推送修改的所有引用和文件执行访问控制。

update

该update脚本与脚本非常相似pre-receive,只是它为推送器尝试更新的每个分支运行一次。如果推送器试图推送到多个分支,pre-receive则只运行一次,而更新每个分支运行一次,他们正在推送。此脚本不是从stdin读取,而是采用三个参数:引用的名称(分支),引用前引用的SHA-1以及用户尝试推送的SHA-1。如果更新脚本退出非零,则仅拒绝该引用; 其他参考文献仍然可以更新。

post-receive

该post-receive挂钩完成后的整个过程,可以用来更新其他系统服务或者通知用户运行。它采用与pre-receive钩子相同的stdin数据。示例包括通过电子邮件发送列表,通知持续集成服务器或更新故障单跟踪系统 - 您甚至可以解析提交消息以查看是否需要打开,修改或关闭任何故障单。此脚本无法停止推送过程,但客户端在完成之前不会断开连接,因此如果您尝试执行可能需要很长时间的任何操作,请务必小心。

360f914ce3d6db7028f6a4f4eeeaa81a.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值