我有一个远程 Git 裸存储库,托管在带有 Apache 的 Ubuntu Linux 虚拟机上,可以通过本地网络中的 http 访问。当我配置我的服务器时,我使用了本手册:http ://blog.bobbyallen.me/2012/07/23/installing-a-git-server-using-apache-webdav-on-ubuntu-server-12-04/
我打算将此存储库传播到我的网站(拥有非裸存储库),而 Ubuntu 可以通过 Samba 共享访问它的目录。
所以,有这样的事情:
|我的电脑| ==推==> | http://user@myhub.git/myproject.git| ==(接收后挂钩)==> |/samba/mywebsite/|
我的想法是编写一个接收后挂钩,当我从 IDE(PhpStorm)推送更改时,它会执行类似的操作:
#!/bin/sh
echo "Pulling content from hub to website"
echo "Pulling content from hub to website" >> /tmp/git.log
cd /samba/mywebsite/ || exit
unset GIT_DIR
git pull hub master
cd /var/www/myproject.git
git update-server-info
当然,在此之前我在我的网站存储库中声明:
git remote add hub /var/www/myproject.git
问题是当我从我的 IDE 执行推送时,我的 post-receive 钩子没有运行:我没有看到任何首先写入带有回声的行的结果(在 IDE 日志中,也没有在 /tmp/git.log 文件中) )。请注意,推送本身成功执行。
事实上,问题要深得多:钩子根本没有启动。我尝试了 post-receive、update 和 post-update 钩子,但什么都没有……我在每个钩子中都放置了“echo 111>>/tmp/git.log”之类的行,但没有任何反应。
此外,当我尝试手动启动这些钩子时,一切正常,并且网站收到更新:
sudo -u www-data ./post-receive
当然,我确实有用户 www-data 的读/写/执行许可,而且 www-data 拥有 /var/www 目录中的所有内容。实际上,我为该目录中的所有内容设置了 0777 权限。
我尝试手动和从 IDE 执行 git push origin - 结果相同。我什至尝试使用 !#/bin/sh 和 !#/bin/bash - 没有效果。
升级版:
我在我的服务器上执行了这个:
cd ~
git clone /var/www/myproject.git
cd myproject
echo "newline">>README.txt
commit -a -m "Test commit"
git push origin
奇迹发生了——它奏效了!我从主仓库中看到了答案,并且钩子确实按以下顺序执行:更新、接收后、更新后。
所以,我认为,我在通过 http 推送更改时遇到了一些问题。但我不知道为什么会这样。