这个问题有很多设置:
我有一个主机 ( rpi5.local
),有 2 个用户帐户:pi
和cake
。
我想探索git
,并且创建了cake
帐户来“拥有”“服务器/起源”存储库。作为用户cake
,/home/cake
我创建了一个文件夹 ( git-srv
),其中有一个名为 的子文件夹projectA
。我经历了使用初始化此存储库的过程git init --bare
。
最初,我projectA
从另一台主机( )“填充”了服务器上的存储库rpi4b.local
。我使用以下序列通过 SSH将主机上push
调用的文件夹中的一些文件编辑到存储库:Aproject
raspberrypi4b.local
projectA
$ hostname
rpi4b.local
$ pwd
/home/pi/Aproject
$ git push -u ssh://[email protected]/home/cake/git-srv/projectA.git
这很好用。
作为用户pi
,我clone
将projectA
存储库保存到/home/pi/XYZ
. 我对commit
中的一个文件进行了一些更改/home/pi/XYZ
,并尝试push
对服务器进行这些更改,如下所示:
$ hostname
rpi5.local
$ pwd
/home/pi/XYZ
$ git push -u /home/cake/git-srv/projectA.git
我从这次努力中得到了一个错误:
...
error: remote unpack failed: unable to create temporary object directory
To /home/cake/git-srv/projectA.git
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to '/home/cake/projectA.git'
经过对这个错误的一些研究后,我得出结论,这是和之间的权限问题。我认为解决方案是作为用户,所以我这样做了,然后再次尝试。最后,我的问题是:pi
cake
su cake
pi
push
$ whoami
cake
$ hostname
rpi5.local
$ pwd
/home/pi/XYZ
$ git push -u /home/cake/git-srv/projectA.git
fatal: failed to stat '/home/pi/motd.git': Permission denied
在这种情况下意味着什么failed to stat
?是否有简单的解决方法?
“Failed to stat”表示调用
stat
返回错误,即运行的用户git
没有权限获取/home/pi/motd.git
. 这可能是因为cake
用户无权访问/home/pi
.在这种情况下,我认为最直接的方法是再次使用 SSH(即使是同一个系统),而不是尝试找到正确的权限集:
git push ssh://git@localhost:/home/cake/git-srv/projectA.git
或git push ssh://cake@localhost:git-srv/projectA.git
。