git post-update挂钩有一个奇怪的问题。我在我的服务器上创建了存储库(/var/www/vhosts/git/master.git
),并在此存储库中添加了一个更新后的挂钩,其中包含以下代码:
#!/bin/sh
echo $1
echo "*UPDATE*"
case " $1 " in
*'refs/heads/master'*)
GIT_WORK_TREE=/var/www/vhosts/website.com/sandbox.website.com git checkout -f
echo
echo "Master was updated!"
echo
;;
esac
case " $1 " in
*'refs/heads/sandbox'*)
GIT_WORK_TREE=/var/www/vhosts/website.com/sandbox.website.com git checkout -f
echo
echo "Sandbox was updated!"
echo
;;
esac
我确保此文件是可执行的。然后我使用以下方法在我的机器上创建了一个本地存储库:
$ mkdir website && cd website
$ git init
$ echo 'Testing.' > index.html
$ git add index.html
$ git commit -q -m "Initial commit"
$ git remote add web ssh://username@website.com/var/www/vhosts/website.com/git/master.git
$ git push web +master:refs/heads/master
无论出于什么原因,第一次推送工作正常 - /var/www/vhosts/website.com/sandbox.website.com
使用索引文件进行更新 - 但是以下任何推送都不起作用。我从post-update
钩子回复说“Master已更新!”但目录实际上并未更新。
建议?
答案 0 :(得分:0)
您似乎有权限问题。查看/var/www/*
路径上的权限,确保您的git用户有权读取/写入/删除文件。
我使用了很多simpler technique(这里是一个详细的script),它允许我将我的服务器用作gitolite的git服务器并在push上部署而无需克隆{{{ 1}}路径。它适用于我/var/www/myproject
和git 1.7.9
Ubuntu 12.04.1 LTS
。
在服务器上创建您的存储库:
Apache/2.2.22
配置存储库:
mkdir myproject.git && cd myproject.git
git init --bare
编辑或创建git config core.worktree /var/www/myproject
git config core.bare false
git config receive.denycurrentbranch ignore
并使其可运行
hooks/post-receive
以下是文件内容:
touch hooks/post-receive
chmod u+x hooks/post-receive
你准备好推动并让它发挥作用。
我的git用户名为#!/bin/sh
git checkout -f
,我的apache使用git
用户。我必须在ubuntu
上编辑apache配置(您也可以在/etc/apache2/conf.d/security
上执行此操作)以包含:
/etc/apache2/http.conf
现在我的User git
Group git
部署了push上的所有文件,使用/var/www/myproject
用户/组创建文件,我的apache使用相同的用户/组来运行。
现在您只需重新启动服务器或执行git:git