git last-modified 快不快,取决于那 40 个文件在哪
来源:dev.to — 2026-10-22
📋 概述
作者在同一个仓库、同一批 40 个文件上跑了两次同样的命令,唯一变量是换了哪 40 个文件:第一次 861 毫秒,第二次 6.4 秒——直接输给了它本来要取代的做法。背景是 Git 2.52 引入、至今仍标着 EXPERIMENTAL 的 git last-modified:它一次遍历历史,为给定的每个路径报告最后一次改动它的提交,用来取代「每个文件跑一次 git log -1」这种每个仓库浏览器的文件列表都在用的浪费做法。测试对象是 git/git 本身(82542 个提交、4857 个受版本控制的文件、4 核虚拟机),用 blob:none 克隆并自行编译 2.56.0。文件都在同一个目录时它 861 毫秒、逐文件循环 2981 毫秒,快 3.5 倍,且逐条核对过提交哈希;但当同样的 40 个文件散落在整棵树里、历史基本不重叠时,胜负反过来。他还发现 pathspec 父目录在前、子路径在后会静默丢一行。
🔑 核心要点
同一命令两次跑出 861 毫秒与 6.4 秒,唯一变量是文件集合 。
同目录 40 文件:861ms 对 2981ms,快 3.5 倍,哈希逐一核对无误 。
散落 40 文件:反而输给逐文件跑 git log -1 的老办法 。
原因是历史重叠:同目录的文件被同一批提交一起改,一次遍历能替所有路径作答 。
隐藏的坑:pathspec 父目录在前、子路径在后,会静默丢掉一行结果 。
💡 金句
The first run took 861 milliseconds. The second took 6.4 seconds, and lost to the thing it's supposed to replace.译:第一次跑用 861 毫秒,第二次 6.4 秒,输给了它本该取代的那个东西。
👍 0
❤️ 点赞
👎 0
沉底
← 返回 dev.to 首页