我有一个本地存储库,并且我在实时服务器上设置了另一个存储库:
www.site.com/projects/ProjectA
我想要实现的目标非常简单:在我推送到 GitHub 后,我想要存储库位于www.site.com/projects/ProjectA拉动 - 因此更新项目的实时版本,我的客户可以看到。
我已经阅读了大量有关钩子的文章,但找不到满足我需要的非常简单的示例。所有教程都是针对高级功能而设计的。
我做了什么
- 我已经完成 SSH 访问设置。
我有一个远程存储库位于www.site.com/projects/ProjectA我在使用 Putty 登录并执行 git clone 时创建的(此时我的本地存储库、GitHub 存储库和服务器存储库均已同步)
我将 post-receive.sample 从 .git/hooks 复制到www.site.com/projects/ProjectA/
- 我将 post-receive.sample 重命名为 post-receive
- 在 github 中,在 repo settings/webhooks 下,我创建了一个新的钩子,它指向www.site.com/projects/ProjectA/post-receive。所有其他设置我都保持原样。
我进行了本地更改、提交、推送。中心更新,挂钩显示最近的新交付。一切都很好,但服务器存储库没有更新。
“hook”代码是“./usr/share/git-core/contrib/hooks/post-receive-email”,我不明白它的作用。我查看了其他钩子示例,发现其中一些具有熟悉的命令,例如:执行 git update-server-info所以我想我可以编写自己的命令。所以我写了git pull,保存它并从我的本地存储库再次进行更改-提交-推送。结果和之前一样。然后我尝试了执行 git pull。一样。
我的问题是 - 我做错了什么,第二个问题是,为什么没有针对此功能的简单教程,因为这似乎是最常见的场景之一。谢谢你!
即使多年后也没有得到答复。
Webhook 要求您在服务器上设置 HTTP POST 侦听器。您可以在项目中添加 http 路由并执行适当的拉取操作。
参考:Webhooks https://developer.github.com/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
上面将创建一个裸 git 存储库~/example/.git
文件夹。添加接收后可执行挂钩并执行签出到示例目录。
在本地仓库上:
$ git remote add server ssh://my_user@my_server.com:/absolute_path/example/.git/
$ git push server +master:refs/heads/master
这对我来说效果很好。我可以在需要时推送、恢复提交。
参考:服务器存储库 https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)