3

我在我的服务器上设置了 gitosis,我正在尝试创建一个接收后挂钩,它将检查对远程机器上工作目录的更改。

最初我收到一条错误消息,cannot open /home/user/source/testing-local/.git/FETCH_HEAD: Permission denied因此我将工作目录的 .git 文件夹的组所有权更改为 git 用户。

在此之后,我得到了一个错误Host key verification failed,导致我检查哪个用户正在运行钩子,当然是 git(我真傻!),所以我在 gitosis 中为运行 gitosis 的 git 用户设置了一个密钥,并在 gitosis.conf 中启用了它. 现在我变老了Permission denied (publickey).

我的接收后挂钩如下所示:

#!/bin/bash
while read oldrev newrev refname
do
  if [ "$refname" == "refs/heads/master" ]; then
    WORKDIR=/home/user/source/testing-local
    export GIT_DIR=$WORKDIR/.git
    pushd $WORKDIR >/dev/null
    id
    git pull --quiet >/dev/null
  fi
done

id调用只是为了检查我以哪个用户身份运行。

有没有更简单的方法来实现这一点?!我是否错过了设置中的某些关键内容?

4

1 回答 1

2

您需要确保$HOME执行该钩子的 git 用户的环境变量的值。

$HOME/.ssh是 ssh 在握手期间查找私钥的地方。
另外,请确保 gitosis 端的 ssh 目录具有正确的权限

server$ chmod go-w ~/
server$ chmod 700 ~/.ssh
server$ chmod 600 ~/.ssh/authorized_keys

最后查看GitHub 上的“Permission denied (publickey)”部分,它重复了我上面提到的关于HOME

这通常是在ssh找不到您的钥匙时引起的。
确保您的密钥位于默认位置~/.ssh.

于 2011-03-29T10:34:41.137 回答