如何通过将行结尾从CRLF更改为LF来恢复已损坏的git存储库?

时间:2013-05-30 23:16:56

标签: git line-endings

我将项目中的所有行结尾从dos模式更改为unix模式,方法是从任何包含它们的文件中删除所有回车符:

grep -lIUr '^M' . | xargs sed -i 's/^M//'

我认为它会忽略隐藏的点文件,例如.git/,但它没有,现在我的git存储库已被破坏。

git fsck

给出

Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect data check)
fatal: loose object 62f7323e2a025640a25214f13a670097876c1683 (stored in .git/objects/62/f7323e2a025640a25214f13a670097876c1683) is corrupt

在任何地方都没有检出任何其他存储库副本。有没有办法从中恢复?我的回购已经死了吗?

2 个答案:

答案 0 :(得分:1)

是的,确实如此。没有运气,因为所有^ M都消失了:也许你可以部分恢复历史并建立另一个回购,但仅此而已。

对于未来,请使用更加谨慎和适当的工具(如dos2unix)来转换行结尾。

答案 1 :(得分:1)

将来(现在对您没有帮助),您可以将命令限制为存储库中的文件。

grep -lIUr '^M' `git ls-files` | xargs sed -i 's/^M//'