Git:更改EOL后如何恢复文件历史责任跟踪?

问题描述

我们有一些最初在 Windows 下使用 EOL (CRLF) 创建的文件和其他使用 Linux (LF) 创建的文件,有时 IDE(或重新安装后配置错误的 Git)更改了这些 EOL 覆盖并使我们丢失了整个历史记录文件blame 完全没用,只是使用 -w 有效)。

我尝试跟踪文件最后一次正常的时间,在 EoL 切换并替换它之前,但没有工作,从另一个分支检索该文件。 由于文件总是有最小的变化,我在几次提交和合并后没有注意到这个问题,我有一个 6 个月大的分支,原始 EOL。

如何修复这些文件

解决方法

你需要用 -w 来责备:

git blame -w some-file

还有其他选项可以控制这一点,-w 表示“不考虑空格/制表符/新行更改”。

以防万一,您首先应该不要进行这些 EOL 更改。从长远来看,他们很痛苦。

自我宣传警告:这篇“文章”(由于没有更好的词)谈论合并时的 EOL 变化。它还指出了解决 EOL 问题的方法……但是在使用脚本时要考虑一些注意事项……您可能会从中开发一些东西(无跟踪,无货币化)。 http://www.ezconflict.com/en/conflictsse16.html#x80-1200003.2

,

Blame 使用您的文本转换,因此您可以对内容运行任何您想要的 prepass。

echo itssamsfault.c diff=demanglenewlines >>.git/info/attributes
git -c diff.demanglenewlines.textconv="sed 's,\r+$,'" blame itssamsfault.c