SourceTree 无法显示大文本文件的 GIT 差异(或将其视为二进制文件)

SourceTree can't show GIT diff for big text file (or treats it as binary)

我正在尝试使用 GIT 来跟踪对相当大的 XML 文件(大约 3 Mb)的更改。该文件采用 UTF-8 格式,并以 CRLF 行结尾(我在 Windows 10 中工作)。但出于某种原因 GIT 一直认为它是二进制文件并且没有显示任何差异。或者只是无法检测到变化。

Sourcetree 中的差异显示消息“未检测到此文件中的任何更改,或者它是一个二进制文件”

我试图在.gitattributes中显式设置属性,但好像不是这个原因:

 *.xml crlf diff
   git check-attr --all -- sorkin.xml
   sorkin.xml: diff: set
   sorkin.xml: crlf: set 

我发现当我将大文件分成三个较小的部分(小于 1 Mb)时,GIT 正确显示了它们的变化。

计算差异时是否有一些GIT对文件大小的限制?

问题不是 GIT 选项,而是 SourceTree 设置 Tools/Options/Diff。默认情况下,它具有内部差异视图设置 - 文本文件的大小限制为 1024Kb。

我将它设置为更高的值,它解决了我的问题。

我错误地解释了 SourceTree 错误消息“未检测到此文件中的任何更改,或者它是一个二进制文件”。但是当我创建一个长度为 1048576 和 1048577 字节的文本文件并提交它们时,我发现 git diff 命令行有效,而 Atlassian SourceTree 忽略了较大文件的更改。

git 差异使用正确的语法很重要: git diff commit_hash 1048577.txt 而不是 git diff 1048577.txt,因为最后一个命令显示 HEAD 和当前更改之间的差异,这是我误解问题的第二个因素。