3

我想在我的服务器上有一个 git 'post-receive'。我在挂钩文件上使用以下代码:

#!/bin/bash
#CONFIG
LIVE="/home/ubuntu/public_html/testing"

read oldrev newrev refname
if [ $refname = "refs/heads/master" ]; then
  echo "===== DEPLOYING TO LIVE SITE ====="
  unset GIT_DIR  
  cd $LIVE
 # ssh-agent $BASH
 # ssh-add /home/ubuntu/.ssh/ubuntu
  git pull --verbose origin  master || echo "git-pull: returned error code"     
  echo "===== DONE ====="
fi

每当我尝试将某些内容从本地 PC 推送到服务器时,它都会显示以下错误消息:

===== DEPLOYING TO LIVE SITE =====
remote: error: cannot open .git/FETCH_HEAD: Permission denied
remote: 
remote: git-pull: returned error code
remote: ===== DONE =====

任何人都可以请帮助可能是什么问题?

只是为了确认一下,我尝试使用相同的用户凭据通过 ssh 终端运行命令,并且运行良好。

提前致谢。

4

2 回答 2

2

最后,我确实能够通过将目录(/home/ubuntu/public_html/testing)的所有权更改为提交/运行钩子的用户来解决它。

于 2012-09-17T17:48:14.057 回答
0

每当我收到有关权限和 FETCH_HEAD 的错误消息时,这是因为我在修补某些东西时不小心以 root 身份进行了拉取,这会在 root 拥有的 .git 目录中创建文件,而我的普通 ssh 用户无法覆盖这些文件.

我通常会运行ls -laR .git | grep root(我确定有更好的方法,我不是系统管理员)来检查是否有 root 拥有的任何文件。简单地把它们扔回去就可以让我像往常一样继续前进。

于 2012-09-13T19:45:19.297 回答