今天 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 所有。
