Git 2.56 与 3.0 推荐,一次真正的大版本正在路上
Git 的版本号常年波澜不惊,二点几的尾数慢慢爬。九月底发布的 2.56 藏着一个大信号,维护者正在认真讨论三点零,那将是含破坏性变化的真大版本。我把 LWN 的两篇报道与官方口径对了一遍,这事的分量值得每个开发者知道,先看新版装了什么,再看大版本要动哪里。
2.56 装了什么
九月二十八日发布的 2.56.0,七个多月周期里七百四十八个非合并提交、一百零四位开发者、三十九位首次贡献。新命令里最抢眼的是实验性的历史删除,可以删掉一个提交再把后代重放上去,遇到合并提交会明说做不了。引用管理新增一组子命令,创建、删除、更新、重命名一次到位。状态命令在落后于上游时会直接给出建议的拉取命令。分支删除新增只删已合并分支的开关,正在二分查找中的分支也会拒绝被删。暂存命令可以只提交已解决冲突的那些文件。还有部分克隆回收空间的整理选项、推送拼写检测、二分查找行为开关、获取配置新选项,连 Swift 语法高亮规则都有人顺手补了。往回看六月的 2.55,一百位贡献者里三十三位新人,装了历史修补命令与文件系统监视守护进程的改进,那一版还有件大事,Rust 支持默认启用,媒体口径把它视为这次强制依赖的先声。
3.0 要改什么
按社区讨论,四件事定了方向。哈希算法默认换成 SHA-256,旧的一代仓库仍完全支持,阻碍主要在最大代码托管平台还没正式上线,社区称其已进入私测,而其他几家托管平台与自建方案多数已就绪。对象标识只接受小写十六进制,历史上大小写混用引发过真实漏洞,提案人正是哈希迁移的核心开发者。引用存储默认切换到新表格式,这个改动源自真实痛点,安卓仓库的引用数超过八十万个,逐文件存储的扩展性到头了,另一位核心开发者已经在另一个实现里默认启用了新格式与新哈希。最后一条最有争议,构建 Git 将强制依赖 Rust 工具链,反对者称其为糟糕的安全毯,支持者反驳 C 语言写的二进制解析是漏洞温床,两派吵得不可开交。落后实现也是议题,有维护者指出个别重新实现一年前就被告知迁移方向,不该再拖大家后腿。时间表来自核心开发者演讲,今年十二月出信号版,明年四月长期支持版与三点零同步落地,注意这是计划不是承诺。
社区怎么看
HN 上两百多分的讨论把利害讲透了。Git 联合创始人的质疑最有分量,两代哈希的仓库无法互通,子模块引用全部失效,历史上的每次提交签名在新世界作废。也有用户逐条反驳,官方文档定位是重打包而非强推,旧标识有查找表兜底,默认切换只影响新仓库。期待派则开出愿望清单,顺手把几个坏默认值改了,推送保护默认开、冲突样式换成更清晰的那档。维护者的态度值得玩味,他在征询邮件里写明这不是人气竞赛甚至不是民主投票,定版本的担子在他自己肩上。这场讨论也蔓延到了其他技术社区,复制粘贴式的担忧与澄清来回好几轮,看热闹之余把官方文档读一遍最靠谱。
注意事项
现阶段什么都不用做,2.56 正常升级即可,三点零的破坏性变化都有兼容路径。托管在只支持一代哈希平台上的仓库,迁移前等平台就绪。自建托管的开源方案多数已支持新哈希。写工具链的团队重点关注 Rust 强制依赖与引用格式切换两条,留出适配窗口。
总结
2.56 是顺手的工具箱更新,3.0 是地基更换的预告。日常用户无痛升级,平台方与工具链作者把明年四月圈进日历,这场迁移的平稳程度取决于现在开始的准备。
来源
- LWN 展望文章 https://lwn.net/Articles/1094575/
- LWN 2.56 发布报道 https://lwn.net/Articles/1097213
- Git 官网 https://git-scm.com/
- HN 讨论 https://news.ycombinator.com/item?id=49794736