dalguete/githooks

一个微型的框架,帮助您在git钩子中工作。

v0.1.1 2015-05-12 19:18 UTC

This package is not auto-updated.

Last update: 2024-09-27 01:33:49 UTC


README

一个微型的框架,帮助您在git钩子中工作。

描述

此实用程序用于在使用git钩子时启用某些特定功能,例如在仓库内部支持链式加载版本化的钩子文件。您的定义钩子将被保留,但将存在于更合适的位置。

文件夹结构

它非常简单,旨在在不同的格式下启用程序分发。

  • src:包含解决方案中的所有真实代码。
  • composer:提供此包的composer配置。
  • snap:创建项目snap包的配置。
  • Makefile:使用无处不在的make工具安装包的配置。

需求

一般来说,在任何现代GNU/Linux系统中,只需将src文件和文件夹安装到正确的位置就足够了;更好的是,对于Ubuntu,有一个可用于安装的SNAP包,只需在snaps商店中查找githooks即可。

对于OS X,您需要获取composer包以及一些对系统进行的调整;所有这些都可以通过使用Homebrew(在支持该系统的系统上进行测试)来完成。接下来是需求以及一些安装指南

  • Git(当然) OS X - 使用默认git版本没有问题。
  • Bash >=4 OS X - 按照以下指南http://johndjameson.com/blog/updating-your-shell-with-homebrew/启用它。
  • Coreutils >=8 OS X - 使用brew install coreutils启用它。
  • getopt >=1.1.6 OS X - 使用brew install gnu-getopt启用它。
  • 仅限OS X使用Homebrew

对于OS X非常重要提到,无需使用--default-names选项安装Homebrew包,因为脚本内部已经处理了该问题,如果可用。

注意:可能会有一些巧妙的方法来克服操作系统限制,但似乎更容易,并且总的来说,当可用时,拥有更多更新的包对操作系统更有好处。无论如何,欢迎提交修复。

安装(这很快)

安装它(通过SNAP或composer)。如果使用SNAP,则已完成,请享受。

如果使用composer,则必须创建一个指向src/usr/bin/中的githooks脚本的链接到项目中的合适位置,或者将您的$PATH添加到包含此新位置。 重要,请注意不要同时安装两种方法。

默认情况下,将使用名为trackedhooks的文件夹(位于.git目录旁边)作为随仓库一起携带的钩子的参考。如果您想设置不同的内容,请确保根据本文档末尾的定义调整外部变量。

然后,运行githooks --init,再次享受(😛)。

下面是更多命令选项。

生成的结构

默认情况下,git只能处理每个仓库中的一个钩子文件。使用此解决方案,您将能够添加任何数量的钩子文件,它们将被依次调用。

这是新的结构


.git/hooks/
 │
 ├── hook files
 ├── hook names folder.d/
 │    ├── script
 │    └── ...
 ├── trackedhooks/
 │    └── hook names folder.d/
 │        ├── script
 │        └── ...
 └── _.sh

看起来可能有些吓人,但实际上非常简单。

  • 钩子文件:是所有活动钩子文件(使用钩子名称作为文件名)。这是git处理钩子文件的正常方式,但在这里,为了支持链式调用,它们只是指向"_.sh"的符号链接(关于这一点稍后解释)。

  • hook names folder.d/:包含在执行钩子时要调用的所有文件的文件夹。例如,如果“commit-msg”钩子是激活的,那么必须存在一个名为“commit-msg.d”的文件夹。其中的文件将按字母数字顺序依次调用,因此您指定了它们的执行顺序。

  • trackedhooks/:指向包含所有要跟踪的钩子的文件夹的链接,使其在此处可用。内部结构必须遵循“hook names folder.d/”的结构。

  • _.sh:用于集中所有git钩子活动的特殊文件。记住,"hook files"中的所有文件都是指向此文件的链接?这是因为它用于将执行调度到"hook names folder.d/"和/或"trackedhooks/"中的其他文件,使用钩子名称作为键。这就是为什么文件夹必须将钩子名称作为它们名称的一部分。此文件由以下脚本创建。

此脚本可用于创建和处理此结构,因此您只需关注创建您想要的钩子过程。

如何使用此脚本

您可以执行多个操作。您会看到它们都共享选项-y,该选项用于对任何提示问题回答“是”。选项如下

  • --help/-h。有关如何使用脚本的通用帮助。

  • --status/-s [<hook-name>] [-ty](默认)。包含所有活动钩子和它们文件路径的通用状态信息。如果没有定义选项,它将打印所有钩子信息,否则仅打印匹配的钩子信息。'-t'表示仅在trackedhooks/文件夹中查找。状态报告还包括有关当前结构的信息。

  • --init [-y]。创建上述定义的基本结构。接下来执行以下操作:

    • 添加/删除 _.sh 脚本。
    • 添加/删除链接的 trackedhooks/ 文件夹。
    • 将所有活动钩子文件转换为新的链式版本。
  • --destroy [-y]。撤销新结构的创建。新文件和文件夹将被删除。活动钩子将保持为活动状态,但在检测到多个文件的情况下,仅使用00default。其他文件将留在各自的文件夹中,不会删除以保留数据。“trackedhooks/”文件夹和“_.sh”脚本将被删除。

  • --on/-1 <hook-name> [-y]。根据钩子类型激活给定的钩子。它仅处理指向“_.sh”脚本的链接文件。

  • --off/-0 <hook-name> [-y]。根据钩子类型停用给定的钩子。它仅处理指向“_.sh”脚本的链接文件。

  • --add/-a <hook-name> <file-name> [-ty] [--do-edit]。根据钩子类型和文件名创建新的钩子文件。在发生冲突时,它将询问是否继续。选项'-t'表示尽可能在"trackedhooks/"文件夹中创建它。如果没有提供选项,则命令将以错误和可能的选项响应。在成功的情况下,文件将被创建/重新创建,如果设置了选项'--do-edit',则将打开您喜欢的编辑器。

  • --edit/-e <hook-name> <file-name> [-ty] [--do-add]。允许您编辑给定类型的钩子文件,给定钩子类型和文件名。它使用设置的 favorite editor。选项'-t'表示尽可能在"trackedhooks/"文件夹中查找。如果没有提供选项,则命令将以错误和可能的选项响应。如果文件不存在,您可以使用选项--do-add在它所在的位置创建文件。

  • --delete/-d <hook-name> <file-name> [-ty]。根据钩子类型和文件名删除给定的钩子文件。选项'-t'表示尽可能在"trackedhooks/"文件夹中查找。如果没有提供选项,则命令将以错误和可能的选项响应。

导出变量

您可以将一些变量设置为更改某些设置。这些是

  • TRACKEDHOOKS_FOLDER。用于设置“trackedhooks/”文件夹的路径为自定义路径。如果名称中包含'/'字符,则可以指定更深层次的路径。它总是相对于主仓库文件夹(包含.git文件夹的文件夹)进行引用。

  • TRIGGERSCRIPT_FILENAME。用于更改生成的触发脚本名称(默认为_.sh)。

  • DEFAULT_EXTENSION。用于更改将已存在的脚本移动到新位置时使用的扩展名(默认为00default)。

  • NO_COLORS。用于禁用彩色消息。

Composer

检查“composer.json”文件。该文件用于将其发布为https://packagist.org.cn/上的composer包。

Makefile

克隆项目并在其中运行

sudo make install

完成!对于升级,只需再次克隆项目并运行之前的命令即可。

要删除,只需运行sudo make uninstall

Snap包

检查包含所有构建snap包配置信息的snap文件夹。有关snaps的更多信息请参阅https://docs.snapcraft.io/snaps/intro

可以在此项目的根目录中运行触发包创建的命令。

待办事项

  • 检查如何创建更干净的snap包。到目前为止,在运行snapcraft cleanbuild命令时一切顺利,但在创建的snap中有一个包含所有内容的.bz2文件,包括.git文件夹,这就是它的发布方式。这样不行!

Ubuntu PPA(已废弃)

这已被弃用,不再创建.deb包。 以下内容保留以供将来参考。

您可以在以下位置找到PPA包:https://launchpad.net/~dalguete/+archive/ubuntu/githooks

备注:关于我创建.deb包及Ubuntu的PPA的经验

http://dalguete.github.io/#about-my-experiences-creating-deb-packages-plus-ubuntus-ppa