我在Rubymine中使用git。再次提交后,我打开了git push窗口,看到了object file .git/object/55/4d...e6 is emptyunable to read ....
而不是提交名称。
运行git fsck -full
给了我这个:
Segmentation faultrectories: 33% (85/256)
在这里我能做些什么吗?
答案 0 :(得分:0)
Git 2.25(2020年第1季度)应该解决一种可能的git fsck
段故障原因。
该命令在对象解析和低级对象访问方面随着时间的推移积累了繁琐的代码和逻辑,该问题已得到修复。
请参见commit b2f2039,commit c5b4269,commit 103fb6d,commit f648ee7,commit cc57900,commit 7854399,commit b8b00f1,{{3} },commit 6da40b2,commit 3837025,commit f597937,commit 5afc4b1,commit 82ef89b,commit 7339029,commit d40bbc1,commit a59cfb3, commit 23a173a,commit 2175a0c,commit ec65231,commit 1de6007,commit 78d5014,commit 12736d2(2019年10月18日)和commit c78fe00(10月25日2019)由commit 228c78f。
(由Jeff King (peff
)在Junio C Hamano -- gitster
--中合并,2019年12月1日)
commit 0e07c1c:将
lookup_commit()
失败视为解析错误签名人:杰夫·金
在解析提交的父对象时,如果我们能够解析实际的oid但
lookup_commit()
却失败了(因为我们之前在此过程中将其视为不同的对象类型),我们会默默地忽略父对象并且不要向呼叫者报告任何错误。调用者无法知道是否发生了这种情况,因为即使是空的父列表也是有效的解析结果。结果,可以欺骗我们的“
rev-list
”连接检查来接受一组损坏的对象。
这导致:
parse_commit_buffer()
:将NULL
标记指针视为解析错误签名人:杰夫·金
在解析标签时,如果类型不匹配(例如,标签声称指向对象
NULL
作为提交,我们可能会以X
“已标记”字段结束)但我们之前在同一过程中将X
视为Blob),但是我们没有以其他方式向调用者表明解析失败。这与上一次提交中讨论的情况类似,在上一次提交中,提交可能以
NULL
树字段结尾:对于希望忽略损坏对象的调用者来说,虽然有点方便,但这意味着普通调用者拥有明确处理这种情况(而不仅仅是依靠解析中的返回码)。
大多数情况不会,会导致段错误修复,例如parse_tag_buffer()
中的一个(“ useget_tagged_oid()
”,2019-09-05,Git v2.24.0-rc0- c77722b3ea中列出的merge。让我们通过从解析本身返回错误代码来更集中地解决这个问题,大多数调用者已经注意到了(冒险的调用者可以随意忽略该错误并继续查看结构)。
这也涵盖了标签包含一个荒谬的“类型”字段的情况(我们产生了用户可见的错误,但仍然向调用者返回成功;现在我们将产生一条更好的消息并返回错误)。
作为更好的错误消息的一部分:
xxx
'的错误标签指针xxx
中未知的标记类型'yyy
'