--bare
我通过在 处设置目录/home/ubuntu/push-to-deploy/test.git
,将其用作我的远程并在hooks/post-receive
内部添加如下所示的目录,从而在我的生产服务器上设置了推送部署--bare
:
#!/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
吗?如果是这样,我能做些什么来保留这个push-to-deploy
功能并且仍然将我的 git 日志复制到生产目录以及内容?
还
当我的内容复制到生产目录 ( /var/www/test
) 中时,所有文件所有权都将被覆盖,ubuntu:ubuntu
这使得www-data
无法执行其操作。每次收到后,我都会在其中添加一条线post-receive
以更新所有权,但是还有另一种方法(更好的方法)可以做到这一点吗?
更新
确保将www-data
其保留为组的方法是设置目录的 guid,如下所示:
chmod -R g+s /var/www/test
这会将其设置为目录的当前组,因此,如果您想要它,请www-data
确保www-data
在发出该命令之前将组设置为。
谢谢