Git 符号引用(尤其是 Windows)中使用什么字符编码?

What character encoding is used in Git symbolic refs (especially on Windows)?

这是一个非常快速的问题:符号引用文件(如 .git/HEAD,尤其是 Windows 中使用的字符编码是什么?

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

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

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