VS Code 把 AI 写进你的 git commit——即使你根本没用它

今天 HN 上最热的一件事,582 分,250 多条评论。

VS Code 合入了一个 PR,默认在所有 git commit 中加入 "Co-Authored-by: Copilot" 署名。不管你实际有没有用 Copilot。

这个 PR 只有两行代码的改动。一个叫 cwebster-99 的 Microsoft 员工提交的,标题是 "Enabling ai co author by default"。没有详细的解释文档,没有讨论过程,直接合入。

PR 上的反应也很直白:2 个赞,372 个反对,6 个笑,30 个困惑。

嗯,372 个反对。对于一个只有两行代码改动的 PR 来说,这个比例很说明问题。

HN 上最被点赞的一条评论说得尖锐:

AI 现象的一个有趣之处在于它对所有技术标准都充满敌意。某件事是否正常工作、是否合乎伦理、是否真实,已经不再重要了;唯一重要的是"请用我们的 AI"。微软花了整整十年修复自己的声誉,然后把它烧了,献给他们的机器人神。

另一条评论从管理角度切入:

这是技术不称职的管理层全面接管的结果。他们觉得终于可以把自己的想法推到极致,不用再依赖那些烦人的工程师来阻挡、抱怨和制造问题。

这些评论的情绪可以理解,但它们背后有一个更根本的问题。

git commit 署名是一个有明确含义的技术标准。当你在一个 commit 里写 "Co-Authored-by: xxx",你的意思是:xxx 对这段代码有实际贡献。这个约定运行了几十年,没有人需要解释它是什么意思。

现在 VS Code 要改变这个约定。它要把一个可能根本没参与代码编写的 AI 工具,写进每个 commit 的署名里。这不是在扩展一个标准,而是在模糊一个标准。

而且这个决定不是经过社区讨论的。Microsoft 内部的人直接改了默认行为。一个有 184k star 的开源项目,但它最重要的默认行为变化,没有经过贡献者社区的共识。

嗯,"开源"这个词的定义变得越来越模糊了。

今天还有一件事值得放在一起看。

一个开发者叫 Don Callaway,发起了 DO_NOT_TRACK 标准。一个简单的环境变量:export DO_NOT_TRACK=1

他列了一堆工具各自的遥测关闭方式:.NET 用 DOTNET_CLI_TELEMETRY_OPTOUT=1,AWS SAM 用 SAM_CLI_TELEMETRY=0,Azure CLI 用 AZURE_CORE_COLLECT_TELEMETRY=0,Go 用 go telemetry off……每个工具各有一套,没有统一的标准。

DO_NOT_TRACK 的提议很简单:一个环境变量,统一关闭所有工具的广告追踪、使用报告、遥测、崩溃报告——所有非功能必需的网络请求。

We just want local software.

这句话后面没有句号,但语气已经很明确了。

两件事放在一起看。

VS Code 在往你的 commit 里塞 Microsoft 想塞的东西。各种开发者工具在往微软、Google、AWS 的服务器上传遥测数据。开发者们想关也关不了,因为每个工具各有一套关闭方式。

共同的问题是一样的:工具在变得越来越不"本地"。它们不再是"你装在自己的机器上、按你的意愿运行的软件"。它们是"大公司在你的机器上运行、为他们的目的收集数据的代理"。

而 AI 让这个问题变得更加极端。因为 AI 工具不仅仅是收集数据——它还在改变你产出的内容。你的 git commit、你的代码风格、你的文档注释,都在被 AI 工具默默地改写和标注。

DO_NOT_TRACK 是一个朴素的回应。一个环境变量,一行配置。就像 NO_COLOR 一样——export NO_COLOR=1,禁止所有工具输出彩色。这种标准不需要委员会、不需要协议、不需要 API 设计。只需要开发者社区达成一个简单的共识。

但朴素的方案,往往最难推动。因为推动它意味着要对抗那些从遥测和 AI 集成中赚钱的公司。

所以今天真正值得记住的不是"VS Code 又做了什么"或"DO_NOT_TRACK 有没有用"。

而是另一件事:当你的编辑器在你不知道的情况下修改你的 commit 署名,当你的编译器在你不知道的时候往硅谷传数据——"工具"和"代理"之间的界限,已经模糊到了你几乎感觉不到的程度。

而当你感觉不到的时候,就是它真正生效的时候。

嗯,也许 export DO_NOT_TRACK=1 真的只是第一步。