Git 克隆因文件损坏而失败

Posted

技术标签:

【中文标题】Git 克隆因文件损坏而失败【英文标题】:Git clone fails with corrupt file 【发布时间】:2015-10-12 09:17:26 【问题描述】:

在我们公司,我们使用自己安装的 GitLab 7.13.4。访问被配置为允许 https 和 ssh 身份验证。当使用版本 1.7、1.9 或 2 的 git 客户端克隆现有项目时,这两种身份验证方法都适用。但是,对于使用 git 版本 1.6.0.2 的旧 (SLES 11) 服务器,https 方法会产生以下错误:

> git clone https://myuser@my.host/myrepo/myproject
Initialized empty Git repository in /users/myrepo/myuser/myproject/.git/
error: File 0000000000000000000000000000000000000000 (https://myuser@my.host/myrepo/myproject/objects/00/00000000000000000000000000000000000000) corrupt
Getting pack list for https://myuser@my.host/myrepo/myproject
Getting alternates list for https://myuser@my.host/myrepo/myproject
Also look at https://myuser@my.host//<!
Also look at window.gon=;gon.default_issues_tracker="gitlab";gon.api_version="v3";gon.relative_url_root="";gon.default_avatar_url="https://my.host/assets/no_avatar-0b64d25ac5f63e6f0caee99e819105ba.png";gon.max_file_s
Segmentation fault

虽然 ssh 方法工作得很好。问题是我们希望避免将私钥文件复制到服务器上并更新 git 客户端安装。您对如何解决此错误或是否需要更新客户端有任何建议?

【问题讨论】:

【参考方案1】:

首先,如果您还没有备份服务器上的所有重要数据。

0000... 是实际的文件名还是占位符?

如果它实际上是0000...,那么一些非常奇怪的东西已被推送到 git 存储库(提交的树包含无效文件;但树实际上并没有损坏,因为 sha1 总和匹配?!我不确定这是怎么发生的,但您必须隔离错误的提交并弄清楚如何修复它。

如果不是0000...,而是某个有效的SHA1 和,请尝试在另一个结帐中(来自&lt;repo-root&gt;/.git/objects/xx/xxxxxxx)找到该文件,然后手动将其复制到服务器。如果对象在一个包中,您可以尝试unpacking它

【讨论】:

0000... 是错误消息中的实际文件名。但是,我在我的存储库的任何其他成功签出版本中都找不到此对象。它也绝对不是任何推送文件的名称。但是,我刚刚注意到,当我尝试克隆一个不存在的存储库时,会出现同样的错误消息。 嗯。查看 this 以查找包含该 blob 的提交。如果没有,只需删除文件

以上是关于Git 克隆因文件损坏而失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 Git 时如何解决“错误:错误索引 – 致命:索引文件损坏”

Azure 媒体服务 - 视频播放因损坏而中止... (0x20400003)

Mercurial 中止:索引 ... 已损坏

传输文件时出现错误导致接收失败,文件可能被其他程序占用或已经损坏

Data Pump Export 数据泵导出因ORA-31693 ORA-02354 和 ORA-01555 错误且没有LOB损坏而失败 (Doc ID 1507116.1)

因以下文件损坏或者丢失WINDOWS.无法启动...