我有一个运行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