wcm/git-php-hooks

使用PHP编写git钩子,按项目组织它们并自动添加

v1.0.0 2015-01-11 21:34 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:47:38 UTC


README

Latest Stable Version Latest Git Release Total Downloads License GitHub Stars

Git Logo

Git PHP Hooks

在PHP中编写您的git钩子,按项目基础组织它们并自动附加。

Git Hooks

钩子是一些小脚本,您可以将它们放置在$GIT_DIR/hooks目录中以在特定点触发操作。

有两种类型的git钩子

  1. pre-push(在客户端运行)
  2. post-push(在服务器端运行)

有关Git Hooks的更多信息,请查看官方文档 - 它们相当不错。

如何使用

非常简单

  1. 将文件夹添加到您的项目/存储库中。名称无关紧要,因为您需要在触发GitPHPHooks时指定它。以下示例中的名称是'project-hooks'。(提示:没有名称允许您自定义和按您喜欢的样子组织它。它还允许您将git clone到特定项目目录中。)
  2. 打开您的.git/hooks目录并添加一个新的Git钩子文件。例如:pre-commit(不带文件扩展名)。
  3. 向新创建的自定义Git钩子文件夹(例如,以下示例中的'project-hooks')中添加一个新的PHP文件,执行您想要的任务。

就是这样。

您所有的Git钩子(在.git/hooks中)都将具有相同的内 容 - 只有目标文件夹('project-hooks')的名称可能不同。

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

include 'vendor/wcm/git-php-hooks/GitHooksLoader.php';
new \GitHooksLoader( __FILE__, 'project-hooks' );

说明

  • 第一行是一个hashbang,用于指定我们实际上有一个PHP文件在命令行中。
  • \GitHooksLoader()的第一个参数是当前文件的名称,以便使当前钩子对GitPHPHooks可识别。
  • 第二个参数是您的自定义、预项目Git PHP钩子文件的当前任务的目标位置。

命名约定

您必须遵循以下命名约定,才能将PHP文件正确地附加到Git钩子。文件的排序也是按文件名进行的。

  1. 如果Git钩子名称在文件名中找到,它将附加到此特定钩子并自动执行。例如:pre-commit_
  2. 如果您的钩子PHP文件中附带了一个数字,它将以这个优先级添加。例如:_10 如果文件名中没有int,它将被跳过。这对于在测试顺序或新钩子时暂时禁用文件很有用。
  3. Git钩子名称和优先级之间的名称只是您自己的标识符。例如:PHPUnit

示例(和可用任务)

在跳到示例之前,我建议您简单地查看GitPHPHooks库存储库。您将找到PHPLint和PHP Mess Detector任务以及其他一些任务(提示:我乐意接受pull请求!)。

实际场景(在链接库中可用的任务的简化版本)

我们希望在提交之前运行PHPLint

在您的 .git/hooks 目录下添加一个名为 pre-commit 的新文件。然后在项目/仓库的根目录下创建一个新的目录,例如命名为 project-hooks。在该目录中,添加一个名为 pre-commit_lint_10.php 的新 PHP 文件。该文件将自动添加到您的 pre-commit 钩子中,就像上面所示,并具有优先级 10。然后只需将以下内容放入您的新文件中

#!/usr/bin/env php
<?php
$output = shell_exec( 'php -l' );
echo $output;
if ( $output === 1 )
	exit 1;

当然,上面的代码只是一个非常糟糕的例子。对于更详细的一个,请参考上面链接的库。GitPHPHooks 库运行了两个真实世界的示例。要使用 PHP Mess DetectorPHPLint,我建议直接使用库,因为这些目前是内置的。再次提醒:如果您有一个自定义的库并想分享,只需发送一个 Pull Request。

Grunt 集成

它可以通过 grunt-githooks 容易地与 grunt 集成,最初由 @rhumaric 编写。

按照以下方式设置您的 grunt-githooks 任务

php : {
	options      : {
		hashbang    : '#!/usr/bin/env php',
		startMarker : '\n<?php',
		template    : './templates/git-php-hooks.tmpl.hb'
	},
	'pre-push'   : 'none'
}

然后只需将您的钩子任务添加到项目中,并使用以下模板

include 'vendor/wcm/git-php-hooks/GitHooksLoader.php';
new \GitHooksLoader( __FILE__, 'vendor/wcm/git-php-hooks-library/src' );

此示例假设您正在使用 GitPHPHooksLibrary。在这种情况下,模板将位于项目根目录中的 templates 目录内,并命名为 git-php-hooks.tmpl.hb。重要的是将钩子名称的值设置为 none,因为 GitPHPHooks 本身通过文件名识别任务,不需要任务名称。

安装

将仓库添加到您的堆栈中。您可以使用 Composer(无需 Satis,因为它已添加到 Packagist)。只需将以下内容添加到您的 composer.json 文件中。

"wcm/git-php-hooks": "^1.0"

GitHub 已向此仓库添加了一个服务钩子,以便在更新此仓库时自动更新。版本号 ^1.0 会带来所有补丁,而不会破坏任何内容。

要将仓库添加到 composer.json 中的 dev 部分,可以在提示符中输入以下命令(假设 composer 在您的 PATH 中或已别名)。

composer require --dev --prefer-dist -- wcm/git-php-hooks

wcm/git-php-hooks 建议安装一个预制的钩子和任务库,wcm/git-php-hooks-library。要使用 composer 添加此库,可以使用以下命令

composer require --dev --prefer-dist -- wcm/git-php-hooks-library