撤销 Git 的行尾转换?

3

我的存储库中有一个PNG图标,推送到远程后变得损坏了。使用 git check-attr 命令我发现git把它当作文本文件处理,并根据存储库的 .gitattributes 文件将行结束符转换为LF。

有没有办法恢复原始文件?


我猜git从一开始就把它当作文本文件处理了?如果是这样,那么我认为保存该文件将非常困难。Git将所有的Windows风格的行尾(\r\n)转换为Unix风格的行尾(\n),现在你无法知道哪些\n字节曾经是\r\n - Sascha Wolf
@Zeeker 这正是我担心的。.git 里面有一种缓存机制,可以保留原始文件吗? - danijar
据我所知:没有。但如果我找到了什么,我会看一下。 - Sascha Wolf
我在玩git方面尝试了一下,似乎真的没有办法恢复文件的原始状态。很抱歉。 - Sascha Wolf
@Zeeker,感谢您的努力。您可以编写一个回答说明这是不可能的,我会将其标记为已接受。 - danijar
1
如果图标文件很小,在原始文件中应该有很少的\r\n换行符,可以尝试通过蛮力来尝试反向更改,尝试所有组合直到生成有效的PNG文件。 - leonbloy
1个回答

4
很遗憾,似乎无法检索 "autocrlf" 文件的原始版本,除非历史记录中存在未更改过的文件版本(即没有使用 autocrlf)。
core.autocrlf 设置为 true 时,Git 将所有 Windows 换行符(\r\n)替换为 Unix 风格的换行符(\n)。此后,无法确定哪些 \n 字节曾经被编码为 \r\n 字节。
因此,我不得不得出结论,无法恢复该文件。
这就是避免使用 autocrlf 并自己处理行尾的原因。总的来说,我建议避免使用 autocrlf;有关此主题的更多信息,请参见此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接