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

时间:2013-02-02 22:38:36

标签: linux git terminal

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"  
/ home / potter / gitrepos

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

2 个答案:

答案 0 :(得分:0)

文件所有者是执行结帐的人,因此您将连接到该用户。因为你连接到root,所有文件都由root拥有。

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

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

第三,如果要以不同的用户身份运行脚本(例如结帐脚本),可以使用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