Git Hook - 推送到github后使服务器拉出

use*_*234 6 git hook github

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

www.site.com/projects/ProjectA

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

我一直在阅读关于钩子的文章,我找不到一个非常简单的例子来说明我需要的东西.所有教程都是为高级功能而制作的.

我做了什么

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

  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的新钩子.我完整保留的所有其他设置.

我进行了本地更改,提交,推送.Hub更新,钩子显示最近的新交付.一切都很好,但服务器存储库不会更新.

"钩子"代码是"./ usr/share/git-core/contrib/hooks/post-receive-email",我不明白它是做什么的.我查看了其他钩子样本,我看到其中一些有熟悉的命令,如:exec git update-server-info所以我想我可以自己编写命令.所以我写了git pull,保存并做了改变 - 提交 - 再次从我的本地回购推送.结果和以前一样.然后我尝试了exec git pull.一样.

我的问题是 - 我做错了什么,第二个问题是,为什么这个功能没有简单的教程,因为这似乎是最常见的场景之一.谢谢!

Nit*_*... 7

即使多年后,也只是看到这个问题没有得到答复。

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)

这对我很有效。我可以在需要时推送、还原提交。

参考:服务器存储库