当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足

这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。


当前回答

在你添加了一些东西之后……提交它们,并在所有完成后推动它!爆炸! !开始所有的问题…正如您应该注意到的,在定义新项目和现有项目的方式上存在一些差异。如果其他人尝试添加/提交/推送相同的文件或内容(git将两者保持为相同的对象),我们将面临以下错误:

$ git push
Counting objects: 31, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done.
Total 21 (delta 12), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects  remote: fatal: failed to write object

要解决这个问题,您必须考虑到操作系统的权限系统,因为在这种情况下您受到了它的限制。为了更好地理解这个问题,继续检查你的git对象的文件夹(.git/objects)。你可能会看到这样的东西:

<your user_name>@<the machine name> objects]$ ls -la
total 200
drwxr-xr-x 25 <your user_name> <group_name> 2048 Feb 10 09:28 .
drwxr-xr-x  3 <his user_name> <group_name> 1024 Feb  3 15:06 ..
drwxr-xr-x  2 <his user_name> <group_name> 1024 Jan 31 13:39 02
drwxr-xr-x  2 <his user_name> <group_name> 1024 Feb  3 13:24 08

*注意,这些文件的权限只授予你的用户,没有人可以改变它…*

Level       u   g   o
Permission rwx r-x ---
Binary     111 101 000
Octal       7   5   0

解决问题

如果你有超级用户权限,你可以继续使用第二步自己更改所有权限,在任何其他情况下,你将需要询问所有用户与他们的用户创建的对象,使用下面的命令来知道他们是谁:

$ ls -la | awk '{print $3}' | sort -u 
<your user_name>
<his user_name>

现在你和所有文件的所有者用户将不得不改变这些文件的权限,做:

$ chmod -R 774 .

之后,你需要添加一个新属性,等价于——shared=group,根据文档,这使存储库组可写,执行:

$ git config core.sharedRepository group

https://coderwall.com/p/8b3ksg

其他回答

您需要对要推入的目录具有足够的写权限。

在我的例子中:Windows 2008服务器

右键单击git回购目录或父目录。

属性>共享选项卡>高级共享>权限>确保用户具有适当的访问权限。

Linux、macOS:

cd .git/
sudo chown -R name:group *

其中name是用户名,group是用户名所属的组。

您需要在您的终端上复制并粘贴此命令:-

sudo chmod 777 -R .git/objects

我将补充我的意见,作为一种发现目录中具有特定所有权的文件的方法。

该问题是由于以根用户身份运行某些git命令引起的。 收到的信息是:

$ git commit -a -m "fix xxx"
error: insufficient permission for adding an object to repository database .git/objects
error: setup.sh: failed to insert into database

我首先查看了git config -l,然后我解决了:

find .git/ -exec stat --format="%G %n" {} + |grep root

chown -R $(id -un):$(id -gn) .git/objects/

git commit -a -m "fixed git objects ownership"

我只是尝试了sudo git commit -m“XY”,然后我用CTRL + C取消了它,然后再次尝试git commit -m“XY”,然后它突然工作了。