git diff看到整个文件已更改,但实际上并没有更改

75
git diff 引擎将整个文件视为已更改,而实际上并没有更改。例如,看看这个提交:https://github.com/etiago/phpvirtualbox/commit/626e09958384f479f94011ac3b8301bd497aec51
在这里,我们可以看到文件 lib/vboxconnector.php 具有 2807 个添加和 2778 个删除。另外,通过手动进行 git diff,我发现确实将整个文件视为删除(标记为减号),并且整个新文件视为添加。但是,这两个文件有很多共同点,Git 忽略了它们。
我查看了 diff returning entire file for identical files,但似乎并非如此,因为两个提交之间没有空格更改。
此外,使用 Meld 对文件的两个提交(626e09958384f479f94011ac3b8301bd497aec51626e09958384f479f94011ac3b8301bd497aec51^1)进行 diff 并分析,得到正确的差异分析。
我已将文件的两个提交上传到我的 Dropbox 以方便使用:commit_1 commit_2

或者......这是正确的,你已经重写了文件! - Edward Thomson
3
@GabrielePetronella 嗯?这是一个严重的问题,我仍在努力应对。 - James Hirschorn
1个回答

114

vboxconnector.php_1中,每一行都以CRLF序列结束。

而在vboxconnector.php_2中,每一行只以 LF 结束。

因此,文件的每一行都发生了变化。

尝试使用 git diff --ignore-space-at-eol

您还可以在这个问题的答案中找到一些有用的信息。


14
请前往仓库并执行以下命令:git config --global core.autocrlf true。该命令用于配置 Git 全局设置,以使 Windows 平台下的换行符在提交时自动转换为 Unix 格式。 - Manoj Behera
那个有效。Android Studio已经设置为CRLF。 - Someone Somewhere
你可以使用Git UI实现相同的功能。https://dev59.com/5Jffa4cB1Zd3GeqP5D-7#63062580 - Rashid

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