当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足
这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。
当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足
这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。
当前回答
我在使用Vagrant运行远程开发开发机器时得到了这个错误。上述解决方案都不能工作,因为所有文件都具有正确的权限。
我把config.vm.box = "hasicorp/ bioniic64 "改为config.vm.box = "bento/ubuntu-20.10"。
其他回答
在你添加了一些东西之后……提交它们,并在所有完成后推动它!爆炸! !开始所有的问题…正如您应该注意到的,在定义新项目和现有项目的方式上存在一些差异。如果其他人尝试添加/提交/推送相同的文件或内容(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
我遇到这个问题太多次了,但每次发生时,我都尝试使用sudo命令推送或提交,在输入密码后,我不使用sudo推送或提交 例如
sudo git commit -m "message"
然后再输入密码
git commit -m "message"
对我来说,这些建议都没用。我在Windows上,这对我来说很有效:
将远程回购复制到另一个文件夹中 共享文件夹并授予适当的权限。 确保您可以从本地计算机访问该文件夹。 将此回购添加为本地回购中的另一个远程回购。(git remote add foo //SERVERNAME/path/to/ replicated /git) Push到foo。Git push foo master。有用吗?太棒了!现在删除not-working repo并将其重命名为之前的任何内容。确保权限和共享属性保持不变。
sudo chmod -R ug+w .;
基本上,.git/objects文件没有写权限。上面的代码行授予目录中所有文件和文件夹的权限。
使用下面的命令,就像魔术一样
sudo chown -R "${USER:-$(id -un)}" .
准确地输入命令(在结尾有额外的空格和一个点)
命令分解
sudo
以root用户运行
chown
改变所有权
-R
针对所有文件和文件夹的递归操作
"${USER:-$(id -un)}"
从$ user中获取用户名,如果没有设置,则通过运行id -un获取值
.
定位当前目录