我有一个本地存储库,我在我的实时服务器上设置了另一个存储库:
www.site.com/projects/ProjectA
我想要实现的是非常简单的:在我推送到GitHub之后,我希望www.site.com/projects/ProjectA上的存储库为PULL - 因此更新项目的实时版本,我的客户可以看到.
我一直在阅读关于钩子的文章,我找不到一个非常简单的例子来说明我需要的东西.所有教程都是为高级功能而制作的.
我做了什么
我在www.site.com/projects/ProjectA上有一个远程存储库,我在使用Putty登录时创建并执行git clone(此时我的本地存储库,GitHub存储库和服务器存储库都是同步的)
我将post-receive.sample从.git/hooks复制到www.site.com/projects/ProjectA/
我进行了本地更改,提交,推送.Hub更新,钩子显示最近的新交付.一切都很好,但服务器存储库不会更新.
"钩子"代码是"./ usr/share/git-core/contrib/hooks/post-receive-email",我不明白它是做什么的.我查看了其他钩子样本,我看到其中一些有熟悉的命令,如:exec git update-server-info所以我想我可以自己编写命令.所以我写了git pull,保存并做了改变 - 提交 - 再次从我的本地回购推送.结果和以前一样.然后我尝试了exec git pull.一样.
我的问题是 - 我做错了什么,第二个问题是,为什么这个功能没有简单的教程,因为这似乎是最常见的场景之一.谢谢!
即使多年后,也只是看到这个问题没有得到答复。
Webhooks 要求您在服务器上设置 HTTP POST 侦听器。您可以在项目中添加 http 路由并执行适当的拉取操作。
参考:网络钩子
我在我的项目中使用了一个替代实现:
假设 ~/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
Run Code Online (Sandbox Code Playgroud)
以上将在~/example/.git文件夹中创建一个裸git repo 。添加 post-receive 可执行挂钩并在示例目录中执行 checkout。
在本地回购:
$ git remote add server ssh://my_user@my_server.com:/absolute_path/example/.git/
$ git push server +master:refs/heads/master
Run Code Online (Sandbox Code Playgroud)
这对我很有效。我可以在需要时推送、还原提交。
参考:服务器存储库
| 归档时间: |
|
| 查看次数: |
3653 次 |
| 最近记录: |