Git 采用 SHA-256、Rust、LLM 等技术动态
Git 源代码管理系统是自由软件社区赖以生存的基础工具。对许多人而言,Git 始终稳定运行(尽管可能存在些许古怪之处),因此其开发社区的动态往往未被关注。然而当前Git世界正发生诸多变革,该项目正朝着2026年发布的3.0版本全力推进。社区关注的焦点包括:SHA-256算法迁移、Rust语言代码的引入,以及如何看待借助大型语言模型辅助生成的代码贡献。
向SHA-256迁移
哈希算法是Git运作的核心机制,既用于标识提交记录,也用于识别Git仓库中管理的单个文件(“blobs”)。仓库的安全性(特别是支撑仓库当前状态的提交链完整性)取决于所用哈希算法的安全性。自诞生以来,Git 一直采用 SHA-1 哈希算法,但该算法日益被视为存在安全隐患。多年来业界已达成共识:Git 迟早需要迁移至其他哈希算法。
然而至今,这项迁移计划仍被反复推迟。这并非意味着相关工作停滞不前:LWN早在2020年就首次报道了迁移至SHA-256的努力,并在2022年发布了更新 进行了更新。自2020年2.29版本发布以来,Git便具备了使用SHA-256哈希管理仓库的能力。但这仅是第一步:要实现SHA-256的广泛应用,必须解决SHA-1与SHA-256仓库间的互操作性问题。作为分布式系统,Git即使在小型项目中也存在数百至数千个仓库。要同时将所有仓库转换为新哈希函数根本不现实,因此必须建立跨不同哈希函数仓库迁移提交记录的机制。
编写此类互操作性代码本就是鲜有开发者愿意承担的任务。因此在此情境下进展缓慢并不意外——这项重任最终落在了布莱恩·M·卡尔森肩上,他几乎完成了所有SHA-256相关工作。这项工作进展缓慢;近期提交的补丁系列主要聚焦文档更新,预计将在下个Git版本中落地。但正如卡尔森近期所述,若计划在3.0版本默认切换至SHA-256,仍有大量工作待完成:
SHA-256互操作性工作尚未完成。据我估算,该工作需200至400个补丁,目前仅完成约100个。若按原定计划推进,需每周期编写最多75个补丁并提交100个补丁——在缺乏额外贡献者的情况下这显然不切实际。
他还指出,基于Git的代码托管系统在适配此变更的准备程度上存在差异。整个项目似乎尚未决定互操作性代码的完成是否为3.0版本的必备功能。不过,人们希望为SHA-256转换设定某个截止日期,以此向代码托管平台等施加准备压力——即便没有其他理由也值得这样做。
Rust
当林纳斯·托瓦兹于2005年首次编写Git时,自然选择了C语言作为开发工具,该项目至今仍沿用此语言。但与众多C语言项目相似,目前存在转向更安全语言的诉求——本案例中即为Rust。部分Git开发者已开始使用Rust进行开发,其中carlson正用该语言实现部分SHA-256互操作性代码。Ezekiel Newren用Rust语言重构的xdiff库也正在广泛流传。看来Rust将成为Git未来的重要组成部分。
朝着这个方向迈出的第一步,很可能是帕特里克·斯坦哈特提出的这个补丁系列,该补丁系列引入了一个可选的Rust模块作为“试探性方案”,旨在帮助用户和发行版适配新的构建要求。该系列包含文档变更,明确指出自Git 3.0版本起,Rust将成为构建Git的强制要求。此变更预计也将很快落地于近期发布的Git版本中。Steinhardt 同时致力于改进 Git 的持续集成基础设施,以实现对构建过程中 Rust 部分的测试。
大型语言模型
许多项目都在纠结是否(以及如何)接受由大型语言模型(LLMs)辅助生成的代码,Git项目也不例外。部分项目正谨慎地为这类贡献敞开大门,而Git的立场比大多数项目更为审慎。部分原因可能源于其2025年谷歌暑期编程大赛的经历,当时收到的提案几乎全部由LLM生成; 当时曾首次尝试制定相关政策。Christian Couder近期发布了针对LLM生成代码的更新版政策提案,其中部分条款如下:
《开发者来源证明》要求贡献者确认其对项目贡献内容的来源知情,且有权依据项目许可协议提交该内容。目前尚不明确当提交大量由AI工具生成的内容时,该要求能否在法律层面得到满足。
人工智能生成的内容还存在另一个问题:即便指出错误,AI仍常出现幻觉或直接产出劣质代码、提交信息、文档或输出结果。
为规避这些问题,我们将拒绝任何疑似AI生成、过度正式或冗余、呈现AI粗制滥造特征、表面完美实则毫无意义的内容,以及提交者无法理解或解释的内容。
关于该提案已有讨论,carlson 指出其力度尚显不足。Chuck Wolber 担忧 该提案读起来像是对LLM生成代码的全面否定,而他似乎并不支持这种立场。Elijah Newren 表示自己已贡献过部分LLM生成的文档,并质疑是否需要撤回这些内容。Git维护者Junio Hamano发布了更严谨的政策草案,该方案借鉴了QEMU项目的实践。后续讨论仍在进行,但Git项目在可预见的未来似乎仍将对机器生成的贡献持相对排斥态度。
其他事项
虽然可能不会出现在下个版本中,但后续版本将收录Julia Evans贡献的数据模型文档。另一项更易被用户察觉的变更来自菲利普·伍德,即将默认分支名称改为“main”。长期以来人们希望摆脱“master”分支名称;该变更很可能在3.0版本中实现。目前看来,此变更最大的顾虑在于现有大量使用“master”的Git教程,这可能让教程目标群体——新手用户——感到困惑。为避免混淆,Git计划同步推出另一项变更,为希望恢复旧名称的用户提供提示。
今年Git项目迎来二十周年纪念;在这二十载岁月中,它已成为软件开发者工具箱中最重要的工具之一。历经岁月洗礼,其发展征程显然尚未终结。Git的开发进程正加速推进,且短期内似乎没有放缓的迹象。
本文文字及图片出自 Git considers SHA-256, Rust, LLMs, and more
