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

问题描述

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

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

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

var response = await _httpClient.SendAsync(request);
         try
        { 
            response.EnsureSuccessstatusCode();
            data = await response.Content.ReadFromJsonAsync<Abc>();
            return data;
        }
        catch (HttpRequestException ex) when (ex.StatusCode = 404)  ----how to check 404 error?
        {
            throw;
        }
        catch (HttpRequestException ex) when (ex.StatusCode == 503)
        {
            throw;
        }
 *.xml crlf diff

我发现将大文件切成三个较小的文件(小于1 Mb)时,GIT正确显示了它们的更改。

计算差异时,文件大小是否存在GIT限制?

解决方法

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...