一个简单的命令行工具,用于管理项目在多个成员间的git钩子。

安装次数: 40,657

依赖项: 6

建议者: 0

安全性: 0

星级: 214

关注者: 7

分支: 7

开放问题: 5

类型:项目

v0.7.0 2024-05-24 18:44 UTC

README

Whisky Logo

Whisky Terminal Example

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status GitHub Static Analysis Action Status Total Downloads

介绍

Whisky 是一个最简单、框架无关的命令行工具,用于管理和强制执行整个团队中 php 项目的 git 钩子。

Git 钩子是确保提交到版本控制中的代码符合您的组织代码质量标准的绝佳工具。然而,.git/hooks 并不包括在您的 git 树中。这使得让所有贡献者使用相同的检查和设置变得不切实际。

安装

Whisky 的 唯一 依赖是 php^8.1

您可以通过 composer 安装该软件包

composer require --dev projektgopher/whisky
./vendor/bin/whisky install

这是推荐的方法,因为项目上的每个开发人员都可以访问这个工具。

全局安装

Whisky 可以全局安装,但这意味着项目上的任何开发人员如果想要使用它,也需要全局安装。

composer global require projektgopher/whisky
whisky install

如果 Whisky 在项目中全局和本地都安装了,运行的版本将取决于命令的调用方式。

使用方法

install 命令将在您的项目根目录中创建一个 whisky.json 文件

// whisky.json
{
  "disabled": [],
  "hooks": {
    "pre-commit": [
      "./vendor/bin/pint --dirty"
    ],
    "pre-push": [
      "php artisan test"
    ]
  }
}

有关支持的 git 钩子完整列表,请参阅Git 文档

注意

所有钩子都将作为当前状态在终端中评估。在提交涉及更改 whisky.json 的任何内容时,请记住这一点。

whisky.json 文件中添加或删除任何 钩子(不是单个命令)后,应使用 ./vendor/bin/whisky update 确保这些更改反映在您的 .git/hooks 目录中。

与钩子参数一起工作

Git 中的一些钩子传递参数。

commit-msg 钩子是一个完美的例子。它传递了包含提交信息的 git 的临时文件路径,然后可以被像 npm 的 commitlint 这样的脚本使用,允许或阻止不符合您项目标准的提交信息。

要使用 git 传递的此参数,您可以在命令数组中 可选地 包含 $1。 (您应将其用转义的双引号包裹,以防止由于空白引起的奇怪行为)

// whisky.json
// ...
  "commit-msg": [
    "npx --no -- commitlint --edit \"$1\""
  ]
// ...

重要

对于 commitlint 而言,您需要遵循其文档中的说明,因为它需要在您的项目中运行额外的包和设置。

自动化钩子更新

虽然我们建议将 Whisky 作为“可选”工具,但通过添加几个 Composer 脚本,我们可以 确保 所有项目贡献者使用一致的 git 钩子。这将 强制 项目上的每个人使用 Whisky

// composer.json
// ...  
  "scripts": {
    "post-install-cmd": [
      "whisky update"
    ],
    "post-update-cmd": [
      "whisky update"
    ]
  }
// ...

跳过钩子

有时您需要在没有运行 git 钩子的情况下提交或推送更改,例如将工作移交给另一台计算机。这通常可以使用 git 的 原生 --no-verify 标志来完成。

git commit -m "wip" --no-verify

然而,某些 git 操作不支持此标志,如 git merge --continue。在这种情况下,运行以下命令将产生相同的效果。

./vendor/bin/whisky skip-once

技巧

通过在您的 bash.rc 文件中添加 alias whisky=./vendor/bin/whisky,您可以缩短该命令的长度。

禁用钩子

将钩子名称添加到您的 whisky.json 文件中的 disabled 数组中,将禁用该钩子执行。当构建尚未准备好让整个团队使用的工作流程时,这非常有用。

高级用法

对于比简单终端命令更复杂的情况,建议在项目根目录中创建一个 scripts 目录。这还带来了额外的优势,即允许您运行用任何语言编写的脚本。

// whisky.json
// ...
  "pre-push": [
    "composer lint",
    "rustc ./scripts/complicated_thing.rs"
  ]
// ...

注意

在此过程中,请确保任何引用的脚本都是 可执行 的。

chmod +x ./scripts/*

测试

# Run test suite
composer test

# Test hook without having to make a dummy commit
git hook run pre-commit

故障排除

如果您已在本地全局安装了 Whisky,并且您的钩子正在运行 两次,请尝试从其中一个安装中卸载 whisky。

# Remove global Whisky hooks, leaving the local ones,
# while keeping `whisky.json` in the project root.
whisky uninstall -n

贡献

注意

在贡献时不要构建二进制文件。当进行标签发布时,将构建二进制文件。

请参阅 CONTRIBUTING 了解更多详细信息。

安全漏洞

请查看我们关于如何报告安全漏洞的 安全策略

致谢

EXACTsports 致以 深深的感谢,感谢其对本包发展的支持。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件