我计划编写一些git钩子作为一个项目,将用户的操作记录在数据库中。然后可以使用该数据库查询其所有活动。我要记录的操作是
我希望将这个包装在可以通过包管理器安装的发行版中。
Git通过在$PREFIX/share/templates/hooks
它目前有一些禁用的钩子(.sample
附加到它们的名称)。创建新存储库时,会将这些挂钩复制到存储库的.git
文件夹中
现在,如果用户为这些挂钩安装了包,则已启用post-commit
和post-update
之类的挂钩。在这种情况下,脚本文件将被覆盖!听起来不错
这意味着git每个操作只有一个钩子文件。如果我需要为一个动作保留三个钩子,这意味着它是不可能的。这意味着从包管理器自动安装可能会引入冲突。
现在认为我们打包了钩子来覆盖默认启用的文件。如果用户想要为这些文件添加更多操作然后决定卸载我的包,那么他的自定义命令也会消失?
我认为git在这方面非常聪明,我错了:(
需要有一个名为post-commit
和post-update
的文件夹或任何操作,git应该运行该文件夹中的所有脚本。我仍在寻找解决当前形势的方法。
答案 0 :(得分:3)
为什么不编写一个post-commit hook(例如),它会查找“post-commit-hooks”子目录并列出并执行其中的所有脚本?
(第一个未成功运行的将失败所有提交后挂钩)
如果用户初始化他们的Git repo from a predefined template directory,那么您可以确保他们都在新的回购中获得这些特殊脚本。