Git推送更改文件所有权导致500服务器错误。

4

出现了使用git push时引起500服务器错误的问题。根据服务器错误,这似乎是一个文件权限问题。每次我从本地机器执行git push时,文件的所有权都会发生改变。

为了让它再次正常工作,我必须进入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"  

在/home/potter/gitrepos目录下

mkdir potter.git  
cd potter.git  
git init --bare

设置钩子以允许部署

cd hooks  
pico post-receive 

将以下内容输入到post-receive钩子中以允许部署。
#!/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

将 post-receive 变成可执行文件。

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
2个回答

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

0

文件所有者是检出文件的人,因此这将是您连接的用户。由于您连接到root,因此所有文件都归root所有。

首先,我不会使用root作为git用户。我会创建一个专门用于该任务的新用户。

其次,我会禁用通过ssh登录root。如果您想扮演上帝角色,请使用susudo

第三,如果您想以不同的用户身份运行脚本(例如检出脚本),则可以使用ssh连接到localhost上的正确用户(potter@localhost),并使用公钥身份验证登录而无需密码。您可以指定ssh在登录后立即执行的命令。因此,在您的主目录中,您可以创建一个脚本,该脚本更改到正确的目录并运行git checkout。


谢谢您的建议。我已经创建了一个名为“git”的新用户,并将gitrepos文件夹的所有权更改为“git”,而不是root。现在...当我使用“git@potter.....”进行git push时,我不会再遇到500服务器错误了吧? - Gravy
当你遵循我的第三条建议时,由于权限不正确而导致的内部服务器错误(500)不应再出现。 - Arjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接