! [remote rejected] master -> master (unpacker error) 解决办法

今天 push 到自己搭建的 Git 服务器时遇到了这个错误:

remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To git@127.0.0.1:/srv/git-server/checkpoint.git
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'git@127.0.0.1:/srv/git-server/checkpoint.git'

一开始在 Google 上也没找到合适的解决办法,最后发现是我初始化仓库时犯了一个权限错误。

创建完裸仓库后,需要把仓库目录及其内部文件的所有者都改成 Git 用户。我当时执行 chown 时漏掉了 -R 参数,导致目录下面的文件没有递归变更所有者,Git 在写入对象时就会因为权限不足而失败。

修复方法如下:

sudo chown -R git:git repositoryname.git

如果仓库路径是 /srv/git-server/checkpoint.git,可以这样执行:

sudo chown -R git:git /srv/git-server/checkpoint.git

然后重新 push 即可。

也可以先检查一下当前权限:

ls -la /srv/git-server/checkpoint.git
ls -la /srv/git-server/checkpoint.git/objects

确认仓库目录和 objects 目录都归 git:git 所有。

Leave a Reply