Git 差异没有任何意义

Git diff does not make any sense

当我 运行 git diff 在我修改过的 PHP 文件上时,它显示我修改了错误的行,其他行是 'unmodified' (没有更改),即使我修改了其他行。

一个例子:

这是我对文档所做的更改:

它只出现在某些文件上,在其他情况下,它有时会添加其他行,但不会标记适当的行删除。在其他情况下,它只会将更改附加到文件末尾,而不会将其标记为添加。

在 SourceTree 上,同样的差异似乎也没有任何意义:

仅供参考:这些文件最初是从 Linux 服务器下载的。

当您的文件使用 windows 换行编码时,有时会发生这种情况,在 git 上,它使用 unix 换行编码,这就是您可能会收到此错误的原因,您必须配置您的unix

的行结尾

编辑:

这个 link here 可能会有用。就像他在这个post中所说的那样,您可以尝试取决于您的编辑器来做:

  • For Vim users, you’re all set out of the box! Just don’t change your eol setting. For Emacs users, add (setq require-final-newline t) to your .emacs or .emacs.d/init.el file.
    • For TextMate users, you can install the Avian Missing Bundle and add TM_STRIP_WHITESPACE_ON_SAVE = true to your .tm_properties file.
  • For Sublime users, set the ensure_newline_at_eof_on_save option to true.
  • For RubyMine, set “Ensure line feed at file end on Save” under “Editor.”

我在检查了有问题的文件后找到了解决方案。

出现问题的文件似乎只有经典的 Macintosh CR 行尾 (EOL) 格式。将此与 Window 的 CR+LF 或 UNIX(及其衍生产品,包括 OS X)LF 进行对比。将文件转换为 Windows/UNIX EOL 格式,提交修复的 EOL 文件解决了问题。

使用测试 Git 存储库对其进行测试证明我的怀疑是正确的。

可能恰好是Git跟踪文件变化的方式,只支持CR结合LFCR+LF)而不支持CR 单独(如经典 Mac 使用的那样)。