SourceTree - 配置 git 来比较以前提交的 ANSI 编码文件

SourceTree - configure git to compare previously commited ANSI encoded files

我正在处理一个编码项目并使用 SourceTree 和 git 进行版本控制。我发现在过去的某一时刻,其中一个源代码文件不小心包含了 NUL 字符。保存此文件时,其编码自动从 UTF-8 更改为 ANSI。我当时没有注意到这一点并提交了文件。在注意到错误的文件编码之前,我又做了几次提交。

现在我已将文件编码改回 UTF-8 并再次提交文件。现在我可以看到从这次提交开始的变化。但是,当文件具有 ANSI 编码时,SourceTree 不会向我显示所有先前提交的更改。

我已经寻找解决这个问题的方法并尝试根据 this answer and this answer 更改 .gitattributes 文件,但是,SourceTree 仍然拒绝向我显示更改。

我还发现 git 差异可以根据 this answer 进行更改,但我不确定如何整合该更改以便 SourceTree 可以显示之前的更改。

我的问题:有什么方法可以改变 git 区分文件的方式以支持 ANSI 编码或自动将所有文件转换为 utf-8,以便我可以在 SourceTree 中查看我之前提交的更改又是?

我找到了解决办法!

在存储库 .gitattributes 文件中添加:

ProblemFile.c     diff=utf16_diff
ProblemFile.c     set diff

在全局 .gitconfig 文件中添加:

[diff "utf16_diff"]
    textconv = "iconv -f utf-16 -t utf-8"

现在 SourceTree 可以正确显示所有以前的提交!