搜索
git钩介绍Feb 21, 2025 am 08:58 AM

An Introduction to Git Hooks

git钩介绍

钥匙要点

  • git挂钩是在某些操作之前或之后运行的简单脚本,例如对文件的测试语法进行测试语法,并且可以用环境可以使用的任何语言编写。
  • 存在两种类型的挂钩:在开发人员的系统上运行的客户端,以及在托管Git存储库的服务器上运行的服务器端。
  • > git挂钩不是与您的项目分配的,也不能自动安装它们,因此为您的钩子创建一个生活并告诉您的合作者使用它们是有益的。>>>>>>
  • > git钩是自动化项目工作流程,使您能够验证代码,提交消息,确保环境适当以及更多的强大手段。
  • >
  • git钩是在某些操作之前或之后运行的简单脚本。它们对于各种任务很有用,但是我主要发现它们对于客户端验证有用,因此可以防止简单的错误。例如,您可以在要投入的文件上测试语法,甚至可以运行测试。我写的钩子可以验证树枝语法,将jshint运行到标准等等。
  • > 通过设计,Git钩子也非常简单。如果脚本是可执行的,则Git将运行这些挂钩,并且GIT将允许操作(例如,提交或推动)只要挂钩退出而没有错误(状态0)。挂钩可以用环境可以使用的任何语言编写。
>

有两种类型的钩子:

>客户端 - 这些在开发人员的系统上运行

>服务器端 - 这些运行在托管Git存储库的服务器上

    本文将不介绍
  • >服务器端钩子。但是,请注意,如果您的项目在GitHub之类的服务上,则服务器端挂钩通常不适用。在GitHub上,相当于服务器端挂钩的是使用服务和Webhooks,可以在您的项目设置中找到。
  • >
  • 钩文件
>默认情况下的每个存储库(包括您克隆的存储库)都会在.git/hooks目录中具有示例挂钩:>

在该目录中,您会看到类似的内容:

>我们将重点关注在允许提交之前运行的前签名挂钩。

示例钩子:验证PHP语法
<span>git clone git@github.com:symfony/symfony.git
</span><span>cd symfony
</span><span>ls .git/hooks</span>

>我们将以一个非常简单的挂钩开始,用bash编写,该挂钩验证所犯下的php代码具有有效的语法。这是为了防止“快速”但破裂的提交发生。当然,我劝阻几乎没有测试的“简单提交”,但这并不意味着它们不会发生。

>
applypatch-msg.sample
commit-msg.sample
post-update.sample
pre-applypatch.sample
pre-commit
pre-commit.sample
prepare-commit-msg.sample
pre-push.sample
pre-rebase.sample
update.sample
in .git/hooks我们可以启动一个名为Pre-Commit的新文件。它必须具有执行权限:

>

<span>git clone git@github.com:symfony/symfony.git
</span><span>cd symfony
</span><span>ls .git/hooks</span>

>您可以使用自己喜欢的编辑器开始写作。首先,我们需要Shebang。我最喜欢的方法是使用/usr/bin/env,因为这使用了我们想要的应用程序的正确路径,而不是硬编码且可能是无效的路径。目前,我们将不断失败,以便我们可以轻松测试。

>
applypatch-msg.sample
commit-msg.sample
post-update.sample
pre-applypatch.sample
pre-commit
pre-commit.sample
prepare-commit-msg.sample
pre-push.sample
pre-rebase.sample
update.sample
PHP具有语法验证的有用选项:-l。它需要一个文件参数,因此我们将不得不循环浏览正在更改的任何PHP文件。为简单起见,我们将假设任何投入的PHP文件始终以.php结尾。由于挂钩是从存储库的根部运行的,因此我们可以使用标准GIT命令获取有关更改的信息,例如GIT状态。

#Always Fail Line上方,我们可以使用以下内容来修改所有PHP文件:>

>说明:

<span>cd .git/hooks
</span><span>touch pre-commit
</span><span>chmod +x pre-commit</span>

> php_files =在没有定界符的情况下完成bash分配,但请注意,引用变量需要$ deLimiter

    $()是“获取输出”的语法。不需要引用它。
  • >
  • grep被用于检查添加(a)和修改文件(m)
  • >
  • >尴尬在这里用于打印$ 2。完整的git状态 - 刚开始时有额外的空间和额外的数据,因此我们要删除它。尴尬还可以自动剥离。
  • grep再次被使用,但现在正在检查以确保行以.php
  • 结束
  • 现在,我们可以用for循环验证每个文件:

这似乎有些奇怪,但是! php -l“ $ i”(请注意避免空间问题的引号)实际上是在检查0的返回值为0,而不是true或我们通常在其他语言中期望的任何值。仅供参考,大约等效的PHP代码将是:>

<span>#!/usr/bin/env bash
</span><span># Hook that checks PHP syntax
</span>
<span># Override IFS so that spaces do not count as delimiters
</span><span>old_ifs=$IFS
</span><span><span>IFS</span>=$'<span title="\n">\n'</span>
</span>
<span># Always fail
</span><span>exit 1</span>
我对SRC/SYMFONY/COMPONEN/FINDER/GLOB.PHP进行了错误的更改,目的是测试此问题,而Git Commit -M'test'的输出就像:

>我使循环尽早退出了整个脚本,最终可能不是我们想要的。实际上,我们可能希望摘要要解决的问题,而不是必须继续尝试进行。任何人最终都会很容易感到沮丧,甚至可能学会使用git commits-不 - 验证以完全绕过钩子。
<span>php_files=<span>$(git status --short | grep -E '^(A|M)' | awk '{ print  }' | grep -E '\.php$')</span></span>
>

因此,我们不要以php -L的错误退出,但我仍然想保持易于阅读的内容:>

在这里,我们捕获了PHP -L的输出(以及对标准输出的强制标准错误输出)。我们使用特殊变量$检查PHP -L的退出状态? (这是退出状态代码)和操作员-EQ。我们声明发生了语法错误(注意字符串中变量的$ {}的使用)。最后,我们给出了相关的错误行,以使输出更短一点(greppping for'^parse错误'),我们给出了一条空白,以使其更可读。

>我进行了两个不良修改,并尝试进行提交的尝试看起来像这样:>

<span>git clone git@github.com:symfony/symfony.git
</span><span>cd symfony
</span><span>ls .git/hooks</span>
现在的行动是解决这些问题,测试并尝试再次提交。

要完成钩子脚本,请在脚本底部删除1个出口1。尝试提交有效的PHP文件,并且应该按正常工作。

共享钩子

钩子未与您的项目分发,也不能自动安装它们。因此,您最好的行动是为您创建一个钩子居住的地方(可能位于同一存储库中),并告诉您的合作者使用它们。如果您对他们来说很容易,那么他们更有可能这样做。

>

>做到这一点的一种简单方法是创建一个挂钩目录和一个简单的安装程序install-hooks.sh链接它们(而不是复制):

任何克隆您的项目的任何人都可以简单地运行bash install-hooks.sh克隆后。

>
applypatch-msg.sample
commit-msg.sample
post-update.sample
pre-applypatch.sample
pre-commit
pre-commit.sample
prepare-commit-msg.sample
pre-push.sample
pre-rebase.sample
update.sample
这也具有将钩子保持在版本控制下的好处。

>

其他钩子

prepary-commit-msg - 如果没有给出一个默认提交消息。

>
    commit-msg - 提交消息验证。
  • >后委员会 - 在成功的提交后运行。
  • 预算 - 在验证遥控器后的GIT推动之前运行。它需要2个参数:遥控器的名称,以及它的URL。
  • >
  • > reperbase - 在git rebase之前运行。
  • >后签名 - 成功结帐后运行。
  • >后合并 - 成功合并后运行。
  • 这些钩子通常与预先投入的钩子相同,尽管它们会参与争论。检查后的一个用例是确保文件始终获得适当的权限(因为GIT仅跟踪可执行文件,而不是可执行的和符号链接):>>>>>
>对于commit-msg,您可能需要确保所有提交消息符合标准,例如

[subproject] message 。这是php中的一个:

<span>cd .git/hooks
</span><span>touch pre-commit
</span><span>chmod +x pre-commit</span>

结论 git钩是自动化项目工作流程的强大手段。您可以验证代码,提交消息,确保环境正确,还有很多。您使用Git钩子有什么有趣的东西吗?在评论中让我们知道!

>
<span>#!/usr/bin/env bash
</span><span># Hook that checks PHP syntax
</span>
<span># Override IFS so that spaces do not count as delimiters
</span><span>old_ifs=$IFS
</span><span><span>IFS</span>=$'<span title="\n">\n'</span>
</span>
<span># Always fail
</span><span>exit 1</span>
经常询问有关git钩的问题(常见问题解答)

git挂钩的不同类型是什么?客户端钩子是由诸如投入和合并之类的操作触发的,而服务器端挂钩在网络操作上运行,例如接收推动提交。可以自定义每个钩子以满足您的特定操作需求。

如何创建一个git挂钩?

创建一个git钩,导航到存储库中的.git/hooks目录。在这里,您会找到各种挂钩的示例脚本。要创建一个新的钩子,请创建一个没有任何扩展名的文件(例如,预先命中),使其可执行,并编写您的脚本。

>如何使用git挂钩进行自动化?

> git钩可用于自动化开发工作流中的各种任务。例如,您可以在每个提交之前使用预制挂钩自动运行测试或代码上的衬里。这样可以确保仅测试和正确格式的代码才能将其投入到存储库中。

我可以与我的团队共享git钩吗?

默认情况下,当您克隆一个存储库时,不包括git挂钩。这是因为它们存储在.git目录中,该目录未版本化。但是,您可以通过将它们存储在项目中的单独目录中,并创建一个脚本以将它们链接到.git/hooks中。

>

我如何使用git挂钩执行政策? >

> git挂钩可用于执行项目或公司政策。例如,您可以在服务器端使用接收前的钩子来拒绝任何不符合您策略的推动(例如,提交不遵循某种格式的提交)。

>

我可以用来写git钩吗?

git挂钩是脚本,因此您可以用任何脚本语言编写它们。默认样本是用bash编写的,但是您可以使用任何您喜欢的语言,例如Python或Ruby。 GIT钩可用于将Git与其他工具集成在一起。例如,您可以使用邮票后钩子在连续集成服务器中触发构建或在您的问题跟踪系统中更新票证。

>

如何调试git钩?调试git挂钩可以通过将信息写入挂钩脚本的文件来完成。例如,您可以将命令的输出重定向到日志文件以稍后进行检查。

>我可以忽略git钩吗?提交,您可以将–No-Verify选项与Git Commit命令一起使用。当您进行不需要钩子中实现的支票的次要更改时,这可能很有用。

>

强大,应谨慎使用它们。书面不好的钩子可能会导致问题,包括拒绝所有提交甚至数据丢失。部署之前,请务必彻底测试您的钩子。

以上是git钩介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
安卓首家接入DeepSeek背后:看见女性力量安卓首家接入DeepSeek背后:看见女性力量Mar 12, 2025 pm 12:27 PM

中国女性科技力量在AI领域的崛起:荣耀与DeepSeek合作背后的女性故事女性在科技领域的贡献日益显着。中国科技部数据显示,女性科技工作者数量庞大,在AI算法开发中展现出独特的社会价值敏感性。本文将聚焦荣耀手机,探究其率先接入DeepSeek大模型背后的女性团队力量,展现她们如何推动科技进步,重塑科技发展价值坐标系。 2024年2月8日,荣耀正式上线DeepSeek-R1满血版大模型,成为安卓阵营首家接入DeepSeek的厂商,引发用户热烈反响。这一成功背后,女性团队成员在产品决策、技术攻坚和用户

DeepSeek'惊人”盈利:理论利润率高达545%!DeepSeek'惊人”盈利:理论利润率高达545%!Mar 12, 2025 pm 12:21 PM

DeepSeek公司在知乎发布技术文章,详细介绍了其DeepSeek-V3/R1推理系统,并首次公开关键财务数据,引发业界关注。文章显示,该系统单日成本利润率高达545%,创下全球AI大模型盈利新高。DeepSeek的低成本策略使其在市场竞争中占据优势。其模型训练成本仅为同类产品的1%-5%,V3模型训练成本仅为557.6万美元,远低于竞争对手。同时,R1的API定价仅为OpenAIo3-mini的1/7至1/2。这些数据证明了DeepSeek技术路线的商业可行性,也为AI大模型的高效盈利树立了

2025年最佳10个最佳免费反向链接检查器工具2025年最佳10个最佳免费反向链接检查器工具Mar 21, 2025 am 08:28 AM

网站建设只是第一步:SEO与反向链接的重要性 建立网站只是将其转化为宝贵营销资产的第一步。您需要进行SEO优化,以提高网站在搜索引擎中的可见度,吸引潜在客户。反向链接是提升网站排名的关键,它向谷歌和其他搜索引擎表明您的网站权威性和可信度。 并非所有反向链接都有利:识别并避免有害链接 并非所有反向链接都有益。有害链接会损害您的排名。优秀的免费反向链接检查工具可以监控链接到您网站的来源,并提醒您注意有害链接。此外,您还可以分析竞争对手的链接策略,从中学习借鉴。 免费反向链接检查工具:您的SEO情报员

美的推出首款DeepSeek空调:AI语音交互 可实现40万 条指令!美的推出首款DeepSeek空调:AI语音交互 可实现40万 条指令!Mar 12, 2025 pm 12:18 PM

美的即将发布搭载DeepSeek大模型的首款空调——美的鲜净感空气机T6,发布会定于3月1日下午1点30分举行。这款空调配备先进的空气智驾系统,可根据环境智能调节温度、湿度和风速等参数。更重要的是,它集成了DeepSeek大模型,支持超过40万条AI语音指令。美的此举引发业界热议,尤其关注白电产品与大模型结合的意义。不同于传统空调简单的温度设定,美的鲜净感空气机T6能够理解更复杂、更模糊的指令,并根据家庭环境智能调节湿度等,显着提升用户体验。

百度又一国民产品接入DeepSeek,是想开了还是跟风?百度又一国民产品接入DeepSeek,是想开了还是跟风?Mar 12, 2025 pm 01:48 PM

DeepSeek-R1赋能百度文库与网盘:深度思考与行动的完美融合短短一个月内,DeepSeek-R1已迅速融入众多平台。百度凭借大胆的战略布局,将DeepSeek作为第三方模型伙伴,整合进自身生态系统,这标志着其“大模型 搜索”生态战略的重大进展。百度搜索和文心智能体平台率先接入DeepSeek及文心大模型的深度搜索功能,为用户提供免费的AI搜索体验。同时,“百度一下,你就知道”的经典slogan回归,新版百度APP也整合了文心大模型和DeepSeek的能力,推出“AI搜索”、“全网信息提炼”

及时的网络开发工程及时的网络开发工程Mar 09, 2025 am 08:27 AM

AI及时工程代码生成:开发人员指南 代码开发的景观有望进行重大转变。 掌握大型语言模型(LLM)和及时工程对于未来几年对开发人员至关重要。 Th

使用GO构建网络漏洞扫描仪使用GO构建网络漏洞扫描仪Apr 01, 2025 am 08:27 AM

此基于GO的网络漏洞扫描仪有效地确定了潜在的安全弱点。 它利用了GO的并发功能的速度功能,包括服务检测和漏洞匹配。让我们探索它的能力和道德

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具