dalguete / githooks
一个微型的框架,帮助您在git钩子中工作。
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