我已经在我的 Linux 机器上创建了裸仓库,并将其克隆到本地仓库(在同一台机器上),并且我可以毫无问题地推送/拉取。
在我的 Windows 工作站上,我已使用 ssh 克隆了该存储库git clone ssh://user@linuxhost/srv/git/repo.git
,但现在无法推送任何内容。Git 给出了以下错误:
error: remote unpack failed: unable to create temporary object directory
To ssh://linuxhost/srv/git/repo.git
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to
'ssh://user@linuxhost/srv/git/repo.git'
找不到我的问题的正确答案,或者答案太复杂,难以理解。我对 Linux 和配置自己的 gitserver 还很陌生。
提前致谢
答案1
error: remote unpack failed: unable to create temporary object directory
这意味着,当 git 想要创建一个临时目录来复制你的更改以进行进一步处理时,操作系统不允许它这样做。
具体来说,作为推送过程的第一步,git 想要创建一个目录,.git/objects/incoming-XXXXXX
其中 XXXXXX 是一个唯一的随机标识符。这就是失败的原因。
最常见的原因是存储库目录的安全权限不允许您通过 SSH 访问的用户对其进行写入,或者磁盘已满。
要验证磁盘空间,请在 Linux 主机上运行df -h
并确认 git repo 所在的文件系统未显示较高的使用率,可用的块数也较低。还可以尝试在与 git repo 相同的位置创建一个测试文件。
要验证权限,cd
请转到远程托管 git 存储库的目录,然后运行ls -l
。请注意拥有该文件的用户和组,以及用户和/或组是否在此处具有写入权限。要验证您的用户所在的组,请运行groups $USER
$USER ,其中用户名为。
如果问题在于权限,您可能必须更改 git 存储库的所有权:
chown -R user:group srv/git/repo.git
或者您可能需要调整 SSH 用户的组成员身份:
usermod -a -G gitgroup user