【问题标题】:SourceTree - configure git to compare previously commited ANSI encoded filesSourceTree - 配置 git 以比较以前提交的 ANSI 编码文件
【发布时间】:2026-01-06 23:50:01
【问题描述】:

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

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

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

我还发现git的不同可以根据this answer进行更改,但是我不确定如何集成该更改,因此SourceTree可以向我显示以前的更改。

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

【问题讨论】:

    标签: git encoding character-encoding atlassian-sourcetree


    【解决方案1】:

    我找到了解决办法!

    在仓库.gitattributes文件中添加:

    ProblemFile.c     diff=utf16_diff
    ProblemFile.c     set diff
    

    在全局.gitconfig文件中添加:

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

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

    【讨论】: