gpt4 book ai didi

Git 推送错误 : insufficient permission for adding an object to repository database

转载 作者:行者123 更新时间:2023-12-05 08:01:28 24 4
gpt4 key购买 nike

当我尝试推送到共享的 git 远程服务器时,出现以下错误:将对象添加到存储库数据库的权限不足

然后我在此处阅读了有关修复的信息:Fix这适用于下一次推送,因为所有文件都属于正确的组,但下次有人推送更改时,它会在对象文件夹中创建一个新项目,并将其默认组作为组。我唯一能想到的就是为他们 checkin 的项目更改所有开发人员的默认组,但这似乎是一个 hack。有任何想法吗?谢谢。

最佳答案

修复权限

在确定并修复根本原因(见下文)后,您需要修复权限:

cd /path/to/repo/.git
sudo chgrp -R groupname .
sudo chmod -R g+rwX .
sudo find . -type d -exec chmod g+s '{}' +

请注意,如果您希望每个人都能够修改存储库,则不需要 chgrp 并且您需要将 chmod 更改为 sudo chmod -R a+rwX 。

如果不解决根本原因,错误将不断出现,您将不得不一遍又一遍地重新运行上述命令。

根本原因

错误可能是由以下原因之一引起的:

  • 存储库未配置为共享存储库(请参阅 git help config 中的 core.sharedRepository)。如果输出:

     git config core.sharedRepository

    不是 grouptrue1 或一些掩码,尝试运行:

     git config core.sharedRepository group

    然后重新运行递归 chmodchgrp(请参阅上面的“修复权限”)。

  • 操作系统不会将目录上的 setgid 位解释为“所有新文件和子目录都应继承组所有者”。

    core.sharedRepositorytruegroup 时,Git 依赖于 GNU 操作系统(例如,每个 Linux 发行版)的特性来确保新创建的子目录属于正确的组(所有存储库用户所在的组)。此功能记录在 GNU coreutils documentation 中:

    ... [If] a directory's set-group-ID bit is set, newly created subfiles inherit the same group as the directory, and newly created subdirectories inherit the set-group-ID bit of the parent directory. ... [This mechanism lets] users share files more easily, by lessening the need to use chmod or chown to share new files.

    然而,并非所有操作系统都具有此功能(NetBSD 就是一个例子)。对于这些操作系统,您应该确保所有 Git 用户都具有相同的默认组。或者,您可以通过运行 git config core.sharedRepository world 使存储库全局可写(但要小心——这不太安全)。

  • 文件系统不支持 setgid 位(例如 FAT)。 ext2、ext3、ext4 都支持 setgid 位。据我所知,不支持 setgid 位的文件系统也不支持组所有权的概念,因此所有文件和目录无论如何都将归同一组所有(哪个组是挂载选项)。在这种情况下,请确保所有 Git 用户都在拥有文件系统中所有文件的组中。

  • 并非所有 Git 用户都在拥有存储库目录的同一组中。确保目录的组所有者正确并且所有用户都在该组中。

关于Git 推送错误 : insufficient permission for adding an object to repository database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13891016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com