1

--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在发出该命令之前将组设置为。

谢谢

4

1 回答 1

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在评论中确认:

刚刚做了一个chmod -R g+s /var/www/test,它现在正在工作。

于 2014-04-13T20:46:43.427 回答