使用push-to-deploy post-receive hook设置--work-tree时,git日志不匹配

时间:2014-04-13 20:37:51

标签: git git-post-receive git-bare

我通过在--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

由于

1 个答案:

答案 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 ,现在正在运作。