首页 > 解决方案 > 一个损坏的 git repo 会损坏另一个吗?

问题描述

我刚刚从损坏的回购情况中恢复过来,现在我正在尝试了解可能导致它的原因。

设置:

当我尝试git push从本地开发人员到中央仓库时,我注意到了这个错误。我想当我看到一个错误时,我可能已经做了一个git pull(通常当有一个错误推动它时,因为你需要先拉,所以我可能本能地这样做了)。那是错误开始的时候。

中央回购显然是腐败的:git fsck只是段错误!但它似乎也严重破坏了我的本地仓库。在本地,我可以运行fsck它报告了一些悬空提交,但除此之外没有错误。但随后尝试任何其他操作报告目录中的空文件.git并停止。然后删除那些会产生更严重的错误。

最后,我通过获取中央存储库的已知良好备份来修复;克隆那个;移动克隆的.git目录来代替我本地损坏的目录;在旧提交之上提交我的工作树(所以我丢失了单独的提交,但没有丢失我的结束代码);推动。

我意识到我没有包含任何详细的错误,这不是问题的重点。

我的问题是:从损坏的远程仓库中提取/获取是否可能会破坏我的本地仓库?

我一直认为不会,但不同机器上的 2 个存储库似乎不太可能同时损坏。

标签: git

解决方案


我的问题是:从损坏的远程仓库中提取/获取是否可能会破坏我的本地仓库?

是的。如果有一些东西没有被检查——而你有段错误的事实git fsck表明有——那么将数据复制到本地存储库的 fetch 步骤可以复制一些没有被检查的东西。

通常,这表明 Git 中存在错误,因为它应该检查. 中的所有内容git fsck而不是 segfault。:-) 一些不太明显的问题,例如无效的树或标签条目,可能会逃避git fetch运行的更随意的检查,但如果您可以将损坏的存储库保存在某处并允许 Git 开发人员访问它,他们可能能够查明问题并防止它在将来再次发生。


推荐阅读