6

我打算编写一些 git 钩子作为一个项目,将用户的操作记录在数据库中。然后可以使用该数据库查询他的所有活动。我要记录的操作是

  • 犯罪
  • 合并
  • 分支

我想把它打包在可以通过包管理器安装的发行版中。Git 允许通过在其中放置任何这样的全局钩子$PREFIX/share/templates/hooks

它目前有一些被禁用的钩子(.sample附加到它们的名称后)。创建新存储库时,会将这些挂钩复制.git到存储库的文件夹中

现在,如果用户安装了这些钩子和钩子的软件包,post-commit并且post-update已经启用。在这种情况下,脚本文件将被覆盖!这听起来很糟糕

这意味着 git 每个操作只有一个挂钩文件。如果我需要为一个动作保留三个钩子,这意味着它是不可能的。这意味着从包管理器自动安装可能会引入冲突。

现在想想我们打包了钩子来覆盖默认启用的文件。如果用户想在这些文件中添加更多操作,然后决定卸载我的包,那么他的自定义命令也会消失吗?

我认为 git 在这方面非常聪明,但我错了:(

需要有一个名为post-commitandpost-update或任何操作的文件夹,并且 git 应该运行该文件夹内的所有脚本。我仍在寻找一种方法来处理当前的情况。

4

1 回答 1

3

为什么不编写一个提交后挂钩(例如)来查找“提交后挂钩”子目录并列出并执行在其中找到的所有脚本?
(第一个未成功运行的将失败 all post-commit 钩子)

如果用户从预定义的模板目录初始化他们的Git 存储库,那么您可以确保他们都在他们的新存储库中获得这些特殊脚本。

于 2010-11-13T14:51:43.143 回答