gpt4 book ai didi

Git Hook - 在我推送到 github 后让服务器 pull

转载 作者:太空狗 更新时间:2023-10-29 13:26:34 26 4
gpt4 key购买 nike

我有一个本地存储库,并且在我的实时服务器上设置了另一个存储库:

www.site.com/projects/ProjectA

我想要实现的目标非常简单:在我推送到 GitHub 之后,我希望将位于 www.site.com/projects/ProjectA 的存储库 pull - 因此更新项目的实时版本,我的客户可以看到。

我已经阅读了大量关于钩子(Hook)的书籍,但我找不到一个非常简单的例子来满足我的需要。所有教程都是为高级功能而制作的。

我做了什么

  1. 我已完成 SSH 访问设置。
  2. 我在 www.site.com/projects/ProjectA 有一个远程存储库,它是我在使用 Putty 登录并执行 git clone 时创建的(此时我的本地存储库是 GitHub repo 和服务器 repo 都是同步的)

  3. 我将 post-receive.sample 从 .git/hooks 复制到 www.site.com/projects/ProjectA/

  4. 我将 post-receive.sample 重命名为 post-receive
  5. 在 github 中,在 repo settings/webhooks 下,我创建了一个指向 www.site.com/projects/ProjectA/post-receive 的新 Hook 。我保留原样的所有其他设置。

我进行了本地更改、提交、推送。集线器更新, Hook 显示新的最近交付。一切正常,但服务器存储库没有更新。

“钩子(Hook)”代码是“./usr/share/git-core/contrib/hooks/post-receive-email”,我不明白它的作用。我查看了其他 Hook 示例,发现其中一些具有熟悉的命令,例如:exec git update-server-info 所以我想我可以编写自己的命令。所以我写了 git pull,保存它并做了更改 - 提交 - 从我的本地仓库再次推送。结果和以前一样。然后我尝试了 exec git pull。同样的事情。

我的问题是 - 我做错了什么,第二个问题是,为什么没有针对此功能的简单教程,因为这似乎是最常见的情况之一。谢谢!

最佳答案

多年后才看到这个问题没有答案。

Webhooks 要求您在服务器上设置 HTTP POST 监听器。您可以在您的项目中添加一个 http 路由并执行适当的 pull 操作。

引用:Webhooks

我在我的项目中使用了另一种实现方式:

假设 ~/example 是您的项目 public/www 文件夹。SSH 到您的服务器:

$ cd ~/example && mkdir .git && cd .git && git init --bare
$ cat > hooks/post-receive << EOF
> #!/bin/sh
> GIT_WORK_TREE=~/example git checkout -f
> EOF
$ chmod +x hooks/post-receive

以上将在 ~/example/.git 文件夹中创建一个裸 git 仓库。添加一个接收后可执行 Hook 并在示例目录中执行 check out 。

在本地 repo :

$ git remote add server ssh://my_user@my_server.com:/absolute_path/example/.git/
$ git push server +master:refs/heads/master

这对我来说效果很好。我可以在需要时推送、还原提交。

引用:Server repository

关于Git Hook - 在我推送到 github 后让服务器 pull ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24382150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com