You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git树对象中条目采用何种排序方式?

Git树对象的排序规则

Git对树对象中的条目采用基于字节值的逐字节排序,完全遵循C标准库strcmp函数的比较逻辑,而非自然语言中的字典序或Unicode字符排序规则,具体细节如下:

  • 逐字节比较:将文件名看作纯字节序列,按每个字节的ASCII/UTF-8值逐一对比,字节值小的字符串排在前面。
  • 前缀处理:当一个字符串是另一个字符串的前缀时,较短的字符串会排在后面。比如entrie-xxx这类以entrie为前缀的长文件名,会排在单独的entrie前面。

对应你给出的例子:
常规字典序预期:

entrie,
entrie-dopes,
entrie-hope,
entrie-сase

Git实际排序结果:

entrie-сase,
entrie-dopes,
entrie-hope,
entrie

造成差异的原因是:

  1. 所有带-的长文件名都是entrie的前缀扩展,因此Git会把它们排在单独的entrie前面;
  2. 带-的条目之间,Git按后续字符的字节值排序——如果entrie-сase中的с是拉丁字母c(ASCII值0x63),它的字节值小于d(0x64)和h(0x68),所以会排在最前面。如果是西里尔字母с,其UTF-8编码的第一个字节值(0xD1)大于d的字节值,这种情况下Git的排序会和你给出的结果有出入,可能是输入时的字符混淆导致。

内容的提问来源于stack exchange,提问作者Alexander Strigunov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:14:58