我遇到了某种 git 权限问题,希望有人能帮忙。每次我尝试提交时都会收到以下信息:
error: insufficient permission for adding an object to repository database .git/objects
error: Error building trees
我查看了几个解决此问题的建议,它们基本上都是为了确保 .git 文件夹中没有任何权限被破坏。我已确认我拥有所有内容的权限。我还检查了git config core.sharedRepository
is的输出true
。
有人有什么建议吗?
答案1
您不知何故弄乱了权限或所有者或组。后者应该分别是您的用户或您的用户组。
在您的仓库中打开一个终端或导航到它。然后执行以下命令:
sudo chown -R david .git
sudo chgrp -R david .git
这将使您成为所有者,并且您的组成为.git
文件夹中所有文件的组。当然,假设您的用户名是david
。如果不是,请更改它。您的组与您的用户同名。如果您想将其应用于整个存储库,只需将其替换.git
为.
(一个句点)。
如果这不能解决问题,请执行以下几行:
find .git -type d -exec chmod 755 {} +
find .git -type f -exec chmod 644 {} +
第一行赋予您所有目录的完整权限,第二行赋予您读取和写入文件.git
夹中文件的权限。第一行可能会打印错误,再次通知您权限不足,因为find
在文件夹的权限设置正确之前无法进入文件夹(如果权限设置完全错误)。如果发生这种情况,请再次运行第一个命令(在运行第二个命令之前),直到它不再打印错误。当然,您可以通过将第一个命令运行为root
( sudo find .git -type d -exec chmod 755 {} +
) 来避免这种情况。然后,无论如何,它都会在第一次运行时没有错误。
第二条命令使.git
文件夹中的所有文件都不可执行。如果您不使用钩子,这不是问题。如果您这样做,您可能需要执行
chmod +x .git/hooks/*
之后将执行位返还给钩子。如果不将执行位返还给钩子,钩子将不再执行。如果您不使用钩子,这样做不会造成任何损害。