git push导致500个服务器错误的问题。根据服务器错误,似乎是文件权限问题。每次从本地计算机执行git推送时,文件的所有权都会发生变化。
为了让事情重新开始,我必须进入public_html文件夹并chown potter.potter * -R
有人可以帮我吗?我已经在下面展示了我如何设置......
我在/ home / username / gitrepos
中的网站开发服务器上设置了一个名为potter.git的存储库ssh root@potter.com
git config --global user.email "harry@potter.com"
git config --global user.name "harry"
mkdir potter.git
cd potter.git
git init --bare
设置挂钩以允许部署
cd hooks
pico post-receive
将以下内容输入post-receive hook以允许部署
#!/bin/bash
#
docroot="/home/potter/public_html"
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
git --work-tree=$docroot checkout -f $branch
fi
done
制作后接收可执行文件
chmod 755 post-receive
在.bash-profile
中设置工作目录# GIT
export GIT_DIR=/home/potter/potter.git
export GIT_WORK_TREE=~/public_html
现在在我的本地机器上,我按如下方式设置了远程连接:
git remote add website ssh://root@potter.com/home/potter/potter.git
并推送,我执行以下操作:
git push website master
答案 0 :(得分:0)
文件所有者是执行结帐的人,因此您将连接到该用户。因为你连接到root,所有文件都由root拥有。
首先,我不会使用root作为git用户。我会专门为这个任务创建一个新用户。
其次,我会通过ssh禁用root登录。如果你想扮演上帝,请使用su
或sudo
。
第三,如果要以不同的用户身份运行脚本(例如结帐脚本),可以使用ssh连接到localhost(potter@localhost
)上的正确用户,并使用公钥身份验证进行记录没有密码。您可以指定ssh在登录后立即执行的命令。因此,在homedir的某处,您可以创建一个更改为正确目录的脚本并运行git checkout。
答案 1 :(得分:0)
在Centos上使用cPanel时,如果文件所有权设置不正确,我会注意到相同的问题,那么apache会抛出500错误。代码或文件权限设置可能没有问题。
您可以像我一样创建一个钩子。
运行任何拉动后,运行该文件以快速重置所有文件所有权。 运行它时,请确保您要更新的目录中。
#!/bin/bash
for file in `ls -a | grep -v '^\.'`
do
if [[ -d $file ]]
then
fowner=`ls -ld $file | awk '{print $3}'`
fgroup=`ls -ld $file | awk '{print $4}'`
chown -R $fowner:$fgroup $file
fi
done