我通过在--bare
设置/home/ubuntu/push-to-deploy/test.git
目录设置了我的生产服务器的push-to-deploy,将其用作我的远程并在{{1}中添加hooks/post-receive
看起来像这样:
--bare
从我的localhost推送到这个新的遥控器时,这很有用。 #!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "production" == "$branch" -o "master" == "$branch" ]; then
git --work-tree=/var/www/test/ checkout -f $branch
sudo chown -R ubuntu:www-data /var/www/test
echo 'Changes pushed to Amazon EC2 PROD.'
fi
done
脚本按预期执行,内容更新将反映在post-receive
目录中。唯一的问题是/var/www/test
内的git log
根本不匹配我的本地主机。这是/var/www/test
的正常行为吗?如果是这样,我该怎么做才能保留这个--work-tree
功能,并且仍然将我的git日志复制到生产目录以及内容中?
同时
当我的内容复制到生产目录(push-to-deploy
)时,所有文件所有权都被覆盖到/var/www/test
,这使得ubuntu:ubuntu
无法做到这一点。我在我的www-data
中添加一行来在每次收到后更新所有权,但还有另一种方法(更好的方法)吗?
更新
确保post-receive
作为群组保留的方法是设置目录的指南:
www-data
这会将其设置为目录的当前组,因此如果您希望它为chmod -R g+s /var/www/test
,请确保在发出该命令之前将组设置为www-data
。
由于
答案 0 :(得分:1)
您可以将环境变量GIT_DIR
设置为/home/ubuntu/push-to-deploy/test.git
并:
git --work-tree=/var/www/test/ checkout -f $branch
git log
/var/www/test/
在这两种情况下,都会考虑正确的指数。
OP sadmicrowave确认in the comments:
刚刚做了
chmod -R g+s /var/www/test
,现在正在运作。