git add .emacs
error: insufficient permission for adding an object to repository database .git/objects
error: .emacs: failed to insert into database
error: unable to index file .emacs
fatal: adding files failed
error: insufficient permission for adding an object to repository database ./objects
error: error: Unable to add numbers to database
error: insufficient permission for adding an object to repository database ./objects
error: error: Unable to add greeting to database
error: insufficient permission for adding an object to repository database ./objects
fatal: failure to merge
致:
error: insufficient permission for adding an object to repository database ./objects
error: error: Unable to add numbers to database
fatal: failure to merge
4条答案
按热度按时间cunj1qz11#
那是你的问题。出于这样或那样的原因,Git在写入
.git/objects
时遇到了问题--通常这意味着它属于另一个用户,没有适当的权限。通过运行
ls -l .git/objects
尝试查看该文件夹当前具有哪些权限。然后,您可以根据需要使用chmod
或chown
(或两者)。68bkxrlz2#
我没有更改我的文件上的任何权限,但我收到了相同的错误消息,并通过更改git目录(chown-R User:group.git)的所有权修复了它。
wtlkbnrh3#
这可能是由于不小心执行了GIT提交操作而导致的。您不会故意更改权限,sudo在大多数配置中都可以工作,但下次在没有sudo的情况下尝试它时,您会遇到问题。
只需使用如下命令将.git目录上的权限恢复为以前的权限即可。
mepcadol4#
请注意,在较新(2014+)版本的Git中,当对象存储不可写时,“
git commit
”(man)会给出重复的错误消息,这已在Git 2.34(2021年第四季度)中得到更正。参见commit 4ef91a2、commit 119b26d(2021年10月12日)。
(由Junio C Hamano --
gitster
--合并到commit 2c428e4,2021年10月25日)commit
:修复权限错误输出中的重复回归签字人:?var ArnfjörçBjarmason
修复
.git/objects
无法写入时发出的错误输出中的回归。在9c4d6c0(“
cache-tree
:在提交后写入更新的缓存树”,2014-07-13,Git v2.2.0-rc0--merge)之前,我们只会发出一个“权限不足”错误,现在我们将再次发出。原因相当简单,我们有
WRITE_TREE_SILENT
,用于想要静默准备索引、静默任何权限等用例。错误输出。
然后,当我们尝试更新到该索引(可能已损坏)时,我们将再次遇到相同的错误。
但是在9c4d6c0中,缓存树API和对象存储之间的差距并没有通过要求
write_object_file()
保持沉默来弥合。即。
在-9c4d6c0之后,第一个调用是
prepare_index()
,之后我们将调用prepare_to_commit()
。我们只希望从后者输出详细的错误。
因此,让我们添加并使用带有相应
HASH_SILENT
标志的工具,它的唯一用户是cache-tree.c
的update_one()
,如果它的"WRITE_TREE_SILENT"
标志被设置,它将设置它。因此,除了修复问题所需的
chown
之外,如果您看到错误消息两次,也不要感到惊讶。您在合并时也会遇到类似的错误(确实涉及
add
)在只读存储库中,“
git merge-tree
”(Man)试图创建合并结果树对象,但失败了(这是正确的),并导致了段错误(这是错误的),已使用Git 2.39(2022年第4季度)进行了更正。参见commit 92481d1、commit 0b55d93(2022年9月28日)。
(由Junio C Hamano --
gitster
--合并到commit 19118cb,2022年10月10日)merge-ort
:写入BLOB失败提前返回审阅:伊利亚·纽伦
署名:Johannes Schindelin
在前面的提交中,我们修复了无法写入树对象时的分段错误。
然而,在写入树对象之前,
merge-ort
希望写出一个BLOB对象(除非合并导致数据库中已经存在的BLOB)。这也可能失败,但到目前为止,我们忽略了写入失败。
让我们密切关注,如果无法写入BLOB,请及早出错。
这从以下方面减少了t4301.25的错误输出(“合并排序在只读存储库中正常失败”):
致:
这不只是一种表面上的改变:尽管人们可能会认为在写入新的树对象时操作无论如何都会失败(如果相应的树对象包含一个新的BLOB,那么它将*是新的),但事实并非如此:
正如Elijah Newren所指出的,当Git之前被允许通过
sudo
调用添加松散对象时,BLOB对象很可能不能被写入(因为对应的.git/objects/??/
目录可能属于root
),但是树对象可以被写入(因为对应的对象目录由当前用户拥有)。这将导致存储库损坏,因为它缺少BLOB对象,而使用这个HERE补丁可以防止这种情况。