为什么我的git post-receive hook似乎不起作用

时间:2014-08-17 23:52:16

标签: git amazon-ec2 git-post-receive

我有一个运行linux并安装了git的Amazon EC2实例。我用以下命令设置了一个git repo。

git init --bare

然后我进入hooks目录并创建了一个包含以下bash脚本的post-receive文件。

#!/bin/sh
GIT_WORK_TREE=/var/www/mysite
export GIT_WORK_TREE
git checkout -f

当我从本地仓库推送到服务器时,一切似乎都顺利。我通过向我的项目添加一个名为myfile.html的新文件并推送到服务器来测试它。我没有得到任何错误。但是,当我cd到/ var / www / mysite目录时,我没有看到我添加的新文件,但是如果我将远程repo克隆到本地的新目录,我会得到所有我推送到服务器的更改。

我的想法是git正在跟踪更改,但是当接收后运行时可能会出现某种权限问题,导致文件无法移动并应用到我的/ var / www / mysite目录中?

希望有人能够了解可能发生的事情以及如何解决这个问题。

========================================

因此,接收后文件基本上需要设置以下权限才能使其可执行。

chmod +x post-receive 

执行此操作后,我现在有一个实际的权限问题,我告诉git在推送文件和后接收运行时移动文件。

我的猜测是,post-receive正在尝试将文件移动到/ var / www / mysite文件夹,就像我问的那样,但现在它在尝试移动和更改文件时会给我访问被拒绝的错误。

我尝试将sudo添加到我的接收后脚本中,如此

    #!/bin/sh
    sudo GIT_WORK_TREE=/var/www/mysite
    export GIT_WORK_TREE
    sudo git checkout -f
当我推送代码时,这样做会给我带来以下错误。

remote: usage: sudo [-D level] -h | -K | -k | -V
remote: usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user
remote:             name|#uid]
remote: usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user
remote:             name] [-u user name|#uid] [-g groupname|#gid] [command]
remote: usage: sudo [-AbEHknPS] [-r role] [-t type] [-C fd] [-D level] [-g
remote:             groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid]
remote:             [VAR=value] [-i|-s] [<command>]
remote: usage: sudo -e [-AknS] [-r role] [-t type] [-C fd] [-D level] [-g
remote:             groupname|#gid] [-p prompt] [-u user name|#uid] file ...
remote: fatal: This operation must be run in a work tree

0 个答案:

没有答案