每当我尝试提交到特定的Git存储库时,都会出现错误“权限不足,无法将对象添加到存储库数据库.git / objects。” 最初,这似乎是一样的已经无数次被问及回答的问题(即here,here,here等)。但是,始终给出的解决方案-从错误消息本身看来很明显-是文件权限和/或所有权之一。但是,即使我递归地为整个目录树设置所有者,并递归地将权限设置为最“宽松”的777 ...我似乎仍然无法解决该错误。
更多详细信息:Git提交实际上是由在Docker容器中运行的服务进行的。存储库位于主机上的文件系统上,该文件系统已映射到容器中。我知道容器调用Git时使用的uid / gid是2999,因此为了更容易地从主机上测试/调试问题,我可以使用docker exec
。首先,只是确认如何使用docker exec
以特定用户身份运行命令:
docker exec -u 2999:2999 containerName sh -c "id"
...是的,按预期方式,将显示uid = 2999和gid = 2999。
因此,首先,我将针对此错误在其他地方提供的所有解决方案,设置递归权限和所有权:
docker exec containerName sh -c "chmod 777 /path/to/repo -R"
docker exec containerName sh -c "chown 2999:2999 /path/to/repo -R"
然后我可以确认它们设置正确:
docker exec containerName sh -c "ls -la /path/to/repo"
现在,让我们尝试运行一些git命令:
docker exec -u 2999:2999 containerName sh -c "cd /path/to/repo && git add -A"
docker exec -u 2999:2999 containerName sh -c "cd /path/to/repo && git commit -m 'testcomit'"
结果:
error: insufficient permission for adding an object to repository database .git/objects
error: testfile: failed to insert into database
error: unable to index file testfile
fatal: adding files failed
这时,我全神贯注。如果我明确设置了所有权/权限并以同一用户身份明确运行提交,为什么还会出现此错误?请注意,我绝对可以以用户2999的身份向存储库本身进行写操作,因此似乎只有Git失败了。例如,这可行,并且文件确实按预期显示:
docker exec -u 2999:2999 containerName sh -c "echo sometext > /path/to/repo/testfile"