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 

在接收后挂钩中输入以下内容以允许部署

#!/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
4

2 回答 2

0

文件所有者是执行结帐的人,因此这将是您连接的用户。而且由于您连接到root,所有文件都归root所有。

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

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

第三,如果您想以不同的用户身份运行脚本(例如结帐脚本),您可以使用 ssh 连接到 localhost ( potter@localhost) 上的正确用户,并使用公钥身份验证无需密码即可登录。您可以指定 ssh 应在登录后立即执行的命令。所以在你的 homedir 的某个地方,你可以创建一个脚本来更改到正确的目录并运行 git checkout。

于 2013-02-02T23:05:20.850 回答
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
于 2018-09-19T15:25:36.480 回答