【问题标题】:git show HEAD~1:.gitignore command results in weird characters in Windows 64bitgit show HEAD~1:.gitignore 命令在 Windows 64 位中产生奇怪的字符
【发布时间】:2020-10-05 07:17:26
【问题描述】:

我的 .gitignore 文件中有这些行:

logs/
main.log
*.log
bin/
*.bin

当我执行命令:git show HEAD~1:.gitignore 时,我得到了这个奇怪的结果: git command output

当我应该得到这个时:extected results

我从 poweshell、cmd、git bash、windows 终端和 Cygwin64 以及 VS Code 中的集成终端运行此命令,我从任何地方都得到相同的结果。 .gitignore 的编码是 UTF-16 LE。我什至将编码更改为 ANSI 和 UTF-8,但仍然得到相同的结果。坚持了几天,任何帮助将不胜感激!

【问题讨论】:

    标签: windows git


    【解决方案1】:

    <FF><FE> 是一个 字节顺序标记BOM,将文件标记为 UTF-16-LE。文件的其余部分由 UTF-16-LE 字符组成。也就是说,这不是纯文本文件,而是 UTF-16 文件。 Git 不知道如何读取它(结果是它的内容实际上并不重要)。

    我什至将编码更改为 ANSI 和 UTF-8,但仍然得到相同的结果。

    文件的实际字节很重要:理想情况下,UTF-8 文件以 BOM 开头(UTF-8 文件首先没有字节顺序,所以这些是只是垃圾)。文件的整个文本将只是 UTF-8 数据。这需要重写文件,即,您将需要进行新的提交:现有的提交中有一个无用的文件。

    要真正重写文件,您需要一个工具来完成它。你没有说如何你改变了编码。有关各种选项,请参阅UTF-16 to UTF-8 conversion (for scripting in Windows)。您可能已经正确地完成了这项工作,并进行了新的提交,因为HEAD~1 不是 当前 提交,而是一些现有的 先前 提交。任何现有提交都无法更改,尽管特殊名称 HEAD 始终指代 当前 提交,因此当您进行新提交时,HEAD 表示的提交 - 因此@ 987654326@ 表示——随时间变化。

    【讨论】:

    • 我通过打开并将其保存为 UTF-8 和 ANSI 来更改编码,我没有使用工具,但我会尝试你的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-10-22
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多