无法将文件添加到Git存储库,但可以更改/提交

xpszyzbs  于 2022-10-23  发布在  Git
关注(0)|答案(4)|浏览(193)

以下是错误:

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

我怎么才能修好它呢?它有什么问题吗?

cunj1qz1

cunj1qz11#

error: insufficient permission for adding an object to repository database .git/objects

那是你的问题。出于这样或那样的原因,Git在写入.git/objects时遇到了问题--通常这意味着它属于另一个用户,没有适当的权限。
通过运行ls -l .git/objects尝试查看该文件夹当前具有哪些权限。然后,您可以根据需要使用chmodchown(或两者)。

68bkxrlz

68bkxrlz2#

我没有更改我的文件上的任何权限,但我收到了相同的错误消息,并通过更改git目录(chown-R User:group.git)的所有权修复了它。

wtlkbnrh

wtlkbnrh3#

这可能是由于不小心执行了GIT提交操作而导致的。您不会故意更改权限,sudo在大多数配置中都可以工作,但下次在没有sudo的情况下尝试它时,您会遇到问题。
只需使用如下命令将.git目录上的权限恢复为以前的权限即可。

sudo chown -R user:group .git
mepcadol

mepcadol4#

请注意,在较新(2014+)版本的Git中,当对象存储不可写时,“git commit”(man)会给出重复的错误消息,这已在Git 2.34(2021年第四季度)中得到更正。
参见commit 4ef91a2commit 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.cupdate_one(),如果它的"WRITE_TREE_SILENT"标志被设置,它将设置它。
因此,除了修复问题所需的chown之外,如果您看到错误消息两次,也不要感到惊讶。
您在合并时也会遇到类似的错误(确实涉及add)
在只读存储库中,“git merge-tree”(Man)试图创建合并结果树对象,但失败了(这是正确的),并导致了段错误(这是错误的),已使用Git 2.39(2022年第4季度)进行了更正。
参见commit 92481d1commit 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的错误输出(“合并排序在只读存储库中正常失败”):

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

这不只是一种表面上的改变:尽管人们可能会认为在写入新的树对象时操作无论如何都会失败(如果相应的树对象包含一个新的BLOB,那么它将*是新的),但事实并非如此:
正如Elijah Newren所指出的,当Git之前被允许通过sudo调用添加松散对象时,BLOB对象很可能不能被写入(因为对应的.git/objects/??/目录可能属于root),但是树对象可以被写入(因为对应的对象目录由当前用户拥有)。
这将导致存储库损坏,因为它缺少BLOB对象,而使用这个HERE补丁可以防止这种情况。

相关问题