【问题标题】:What character encoding is used in Git symbolic refs (especially on Windows)?Git 符号引用中使用什么字符编码(尤其是在 Windows 上)?
【发布时间】:2021-09-15 08:18:42
【问题描述】:

这是一个非常简单的问题:.git/HEAD 等符号引用文件中使用的字符编码是什么,尤其是在 Windows 上?

和文件系统的编码一样吗?不过,这听起来不太可能,因为我之前听说过 Windows 的文件系统编码是 UTF-16,并且 Git 引用名称中禁止使用 ASCII 控制字节 0x00..0x1F0x7F(我们在 Git 引用中不能有字节 0x00 )。它是通用的 UTF-8 吗?但是,git help check-ref-format 中似乎没有记录。也许它位于其他地方?还是符号参考的编码未定义?但是,我们如何在彼此之间克隆、推送和获取分支呢?

【问题讨论】:

  • 我确定它是 ASCII 无 ASCII 控制字符。
  • 您不应该直接打开和阅读这些文件。您应该改为运行 git symbolic-ref。使用 git symbolic-ref 使用的任何编码作为其输入和输出,不要担心 Git 内部文件中可能会出现什么编码,因为该编码明天可能会改变。
  • 请注意,push 和 fetch 通常不能处理符号引用。 HEAD 有一个特殊情况,由git clonegit remote set-head 以一种未记录的方式处理(它充满了历史上的怪事,没有人愿意用任何官方的东西来描述它们:-))。不要尝试将符号引用从一个存储库转移到另一个存储库;它一般不起作用。
  • 旁注:当引用为packed 时,没有“引用文件”。使用git symbolic-ref 进行四处查看,使用git update-ref 来处理引用。
  • 不要相信它一个路径名;正如@phd 所说,有时不是。即将到来的 ref-table 项目将删除所有这些文件,可能除了 HEAD 本身之外,以支持一个真实的(如果有些奇怪的编码)refs 数据库。

标签: windows git character-encoding filesystems symbolic-references


【解决方案1】:

Git 的 refs 没有使用特定的字符编码。格式在git check-ref-format 手册页中指定,它允许各种字节值,包括非 UTF-8 值的值,例如 0xFE 和 0xFF。

不过,话虽如此,ref 名称习惯上使用 UTF-8,并且当 ref 文件写入 Windows 上的文件系统时,它们将被转换为 UTF-16,因为 Windows 无法处理其他任何内容在其文件系统中。然而,文件的内容仍然是包含任意字节的东西,这些字节通常(但不一定是)UTF-8。

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2014-10-24
    相关资源
    最近更新 更多