cheppers / git-hooks
v0.1.0
2020-04-13 14:50 UTC
Requires
- php: >=7.2
- composer-plugin-api: ^1.1
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-asserts: ^1.1
- composer/composer: ^1.10
- consolidation/robo: ^2.0
- squizlabs/php_codesniffer: ^3.5
- sweetchuck/robo-git: ^0.2.0
- sweetchuck/robo-phpcs: ^0.1.0
- webmozart/path-util: ^2.3
README
从Git钩子触发自定义脚本。
该包提供了未版本化的./.git/hooks/*
脚本与Git仓库中的脚本之间的桥梁。
何时使用
如果您想将Git钩子脚本放在VCS中以与团队成员共享,那么这就是您需要的工具。
如何使用
- 进入您现有的包目录(或使用
git init && composer init
创建一个新的包) - 运行
composer require --dev 'sweetchuck/git-hooks'
- 然后您有两个选项
- 依赖于这个包提供的Git钩子脚本,并在您的
./.git-hooks
文件中实现逻辑。 - 或者创建一个
./git-hooks
目录,并在其中创建Git钩子文件。(例如:./git-hooks/pre-commit
)
- 依赖于这个包提供的Git钩子脚本,并在您的
- 部署脚本将由Composer的
post-install-cmd
事件自动触发。
配置
示例composer.json文件
{ "extra": { "sweetchuck/git-hooks": { "core.hooksPath": "./git-hooks", "symlink": true } } }
配置 - core.hooksPath
类型:字符串
默认值:vendor/sweetchuck/git-hooks/git-hooks
(动态检测)
如果Git版本大于等于v2.9,则将使用此值设置git config core.hooksPath <PATH>
。如果Git版本低于2.9,则此目录的内容将被符号链接或复制到./.git/hooks
目录。
配置 - symlink
类型:布尔值
默认值:false
此配置选项仅适用于Git版本低于v2.9的情况。从原始位置(由core.hooksPath
配置提供)复制或符号链接Git钩子文件到./.git/hooks
。
示例 ./.git-hooks文件
如果您使用此包的Git钩子脚本(vendor/sweetchuck/git-hooks/git-hooks
),则需要自定义脚本,该脚本可以捕获Git钩子添加触发器并执行一些真正有用的操作。
将以下内容复制到./.git-hooks
#!/usr/bin/env bash echo "BEGIN Git hook: ${sghHookName}" function sghExit () { echo "END Git hook: ${sghHookName}" exit $1 } # @todo Better detection for executables: php, composer.phar. sghRobo="$(composer config 'bin-dir')/robo" test -s "${sghBridge}.local" && . "${sghBridge}.local" sghTask="githook:${sghHookName}" # Exit without error if "robo" doesn't exists or it has no corresponding task. test -x "$sghRobo" || sghExit 0 "${sghRobo}" help "${sghTask}" 1> /dev/null 2>&1 || sghExit 0 if [ "$sghHasInput" = 'true' ]; then "$sghRobo" "${sghTask}" $@ <<< $(</dev/stdin) || sghExit $? else "$sghRobo" "${sghTask}" $@ || sghExit $? fi sghExit 0
示例 ./RoboFile.php
<?php /** * Git hook tasks have to be started with 'githook' prefix. * So the method name format is: githook<GitHookNameInCamelCaseFormat> * Or use the @command annotation. */ class RoboFile extends \Robo\Tasks { /** * Demo pre-commit callback. * * @command githook:pre-commit */ public function githookPreCommit() { $this->say('The Git pre-commit hook is running'); } }