【发布时间】:2021-09-15 08:18:42
【问题描述】:
这是一个非常简单的问题:.git/HEAD 等符号引用文件中使用的字符编码是什么,尤其是在 Windows 上?
和文件系统的编码一样吗?不过,这听起来不太可能,因为我之前听说过 Windows 的文件系统编码是 UTF-16,并且 Git 引用名称中禁止使用 ASCII 控制字节 0x00..0x1F 和 0x7F(我们在 Git 引用中不能有字节 0x00 )。它是通用的 UTF-8 吗?但是,git help check-ref-format 中似乎没有记录。也许它位于其他地方?还是符号参考的编码未定义?但是,我们如何在彼此之间克隆、推送和获取分支呢?
【问题讨论】:
-
我确定它是 ASCII 无 ASCII 控制字符。
-
您不应该直接打开和阅读这些文件。您应该改为运行
git symbolic-ref。使用git symbolic-ref使用的任何编码作为其输入和输出,不要担心 Git 内部文件中可能会出现什么编码,因为该编码明天可能会改变。 -
请注意,push 和 fetch 通常不能处理符号引用。
HEAD有一个特殊情况,由git clone和git remote set-head以一种未记录的方式处理(它充满了历史上的怪事,没有人愿意用任何官方的东西来描述它们:-))。不要尝试将符号引用从一个存储库转移到另一个存储库;它一般不起作用。 -
旁注:当引用为packed 时,没有“引用文件”。使用
git symbolic-ref进行四处查看,使用git update-ref来处理引用。 -
不要相信它是一个路径名;正如@phd 所说,有时不是。即将到来的 ref-table 项目将删除所有这些文件,可能除了
HEAD本身之外,以支持一个真实的(如果有些奇怪的编码)refs 数据库。
标签: windows git character-encoding filesystems symbolic-references