wcm / git-php-hooks
使用PHP编写git钩子,按项目组织它们并自动添加
Requires
- php: >=5.3
Suggests
- wcm/git-php-hooks-library: A convenient library of pre made hooks and tasks.
This package is not auto-updated.
Last update: 2024-09-14 15:47:38 UTC
README
Git PHP Hooks
在PHP中编写您的git钩子,按项目基础组织它们并自动附加。
Git Hooks
钩子是一些小脚本,您可以将它们放置在
$GIT_DIR/hooks
目录中以在特定点触发操作。
有两种类型的git钩子
- pre-push(在客户端运行)
- post-push(在服务器端运行)
有关Git Hooks的更多信息,请查看官方文档 - 它们相当不错。
如何使用
非常简单
- 将文件夹添加到您的项目/存储库中。名称无关紧要,因为您需要在触发
GitPHPHooks
时指定它。以下示例中的名称是'project-hooks'
。(提示:没有名称允许您自定义和按您喜欢的样子组织它。它还允许您将git clone
到特定项目目录中。) - 打开您的
.git/hooks
目录并添加一个新的Git钩子文件。例如:pre-commit
(不带文件扩展名)。 - 向新创建的自定义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钩子。文件的排序也是按文件名进行的。
- 如果Git钩子名称在文件名中找到,它将附加到此特定钩子并自动执行。例如:
pre-commit_
- 如果您的钩子PHP文件中附带了一个数字,它将以这个优先级添加。例如:
_10
如果文件名中没有int
,它将被跳过。这对于在测试顺序或新钩子时暂时禁用文件很有用。 - 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 Detector 和 PHPLint,我建议直接使用库,因为这些目前是内置的。再次提醒:如果您有一个自定义的库并想分享,只需发送一个 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