理想情况下,如果您遵循示例文件,钩子应该用Bash编写。但是您可以使用任何可用的语言编写它,并确保它具有可执行标志。
因此,您可以编写Python或Go代码来实现您的目标,并将其放置在hooks文件夹下。它会工作,但它不会与存储库一起管理。
两个选项:
a) 多脚本
您可以在您的帮助中编写您的钩子,并添加一小段代码到钩子中,调用您完美的脚本,像这样:
$ cat .git/hooks/pre-commit
../../hooks/myprecommit.js
单一脚本
更好的选择是只添加一个脚本来控制所有内容,而不是多个脚本。因此,您可以创建一个
hooks/mysuperhook.go 文件,并将您想要的每个钩子指向它。
$ cat .git/hooks/pre-commit
../../hooks/mysuperhook.go $(basename $0)
该参数将为您的脚本提供触发的钩子,并且您可以在代码内部进行区分。为什么?有时您可能希望对提交和推送运行相同的检查,例如。
然后呢?
然后,您可能希望拥有进一步的功能,例如:
- 手动触发钩子以检查提交或推送之前的一切是否正常。如果只是调用脚本(选项a或b)就可以解决问题。
- 在CI上触发钩子,这样您就不需要为CI重新编写相同的检查。例如,只需调用提交和推送触发器即可。与上述相同的方法应该可以解决它。
- 调用外部工具,如Markdown验证器或YAML验证器。您可以进行系统调用并需要处理标准输出和标准错误。
- 确保所有开发人员都有一个简单的方法来安装钩子,因此需要将一个好的脚本添加到存储库中以使用正确的默认钩子替换它们。
- 拥有一些全局助手,例如检查阻止提交到develop和master分支,而不必将其添加到每个存储库中。您可以通过拥有另一个带有全局脚本的存储库来解决它。
这可以更简单吗?
是的,有几个工具可帮助您管理Git钩子。每个工具都针对不同的问题进行了定制,您可能需要了解它们所有的内容,以找到最适合您或您团队的工具。
GitHooks.com提供了很多关于钩子的阅读材料,并且目前有几种可用的工具。
截至今天,在那里列出了21个项目,采用不同的策略来管理Git钩子。有些只针对单个钩子,有些针对特定语言等等。
其中一个工具是我编写的,作为一个免费的开源项目提供,称为
hooks4git。它是用Python编写的(因为我喜欢它),但其想法是在一个名为
.hooks4git.ini的单个配置文件中处理上述所有项目,该文件位于您的存储库内,并可以调用任何您想要调用的脚本,使用任何语言。
使用Git钩子绝对是非常棒的,但通常它们被呈现的方式只会让人望而却步。
pre-commit
可以轻松地管理 pre-commit 钩子。虽然它没有回答 OP 关于管理任意 git 钩子的问题,但是 pre-commit 钩子可能是最常用于代码质量目的的。 - ericsoco