首页 > 解决方案 > Git 钩子没有被推送到裸存储库

问题描述

我在主机上有一个裸存储库,在我的笔记本电脑上有一个本地存储库。我有 2 个钩子:一个 pre-commit 和一个 post-receive 钩子。两者都在我的本地钩子文件夹中:

malek@laptop:~/Desktop/portfolio-website/.git/hooks$ ls
post-receive  pre-commit

当然,我将本地存储库推送到远程存储库(我的本地预提交挂钩工作正常),但我的挂钩未在我的裸远程存储库上更新。

malek@laptop:~/Desktop/portfolio-website/.git/hooks$ git push -u origin --all
Branch 'master' set up to track remote branch 'master' from 'origin'.
Branch 'production' set up to track remote branch 'production' from 'origin'.
Everything up-to-date

如下所示:

malek@localhost:~/portfolio-website/hooks$ ls
applypatch-msg.sample      pre-applypatch.sample      pre-rebase.sample
commit-msg.sample          pre-commit.sample          pre-receive.sample
fsmonitor-watchman.sample  prepare-commit-msg.sample  update.sample
post-update.sample         pre-push.sample

命令git log master返回

commit 3403657fc4d08f406416711255cf04390a2df070 (HEAD -> master)
Author: “Malek <“myemail@gmail.com”&gt;
Date:   Sat Oct 26 18:06:06 2019 -0400

    Write Makefile and hooks

commit 484c283a9faf0afed14328c9b71e635338c86187 (production)
Author: “Malek <“myemail@gmail.com”&gt;
Date:   Tue Oct 22 00:17:11 2019 -0400

    Master branch creation

如果提交成功发送,为什么我的钩子没有在我的远程存储库上更新?

标签: linuxgitgithooksgit-commit

解决方案


预提交钩子是客户端钩子,它将(像任何钩子一样)保留在您的本地存储库中;

接收后挂钩是服务器端挂钩,必须在远程仓库上手动安装/复制(即使该远程仓库在同一台机器上)。

我在项目目录中有一个指向我的钩子文件夹的软符号链接,所以我假设这些钩子也会在裸存储库上更新..

由于钩子不是推送内容的一部分(出于安全原因),因此该符号链接不会在远程存储库上复制。

因此需要手动复制 post-receive 钩子(而不是 pre-commit 钩子,它无论如何都不能在裸存储库中工作)。


推荐阅读