技术深度剖析
从核心来看,这一改动看似简单。VS Code 的 Git 集成建立在 `git` 命令行工具之上,通过将用户提供的文本与扩展的元数据结合来构建提交信息。在 v1.117.0 中,Copilot 扩展通过钩入 `git.postCommitCommand` 或类似的事件管道,在提交信息最终确定之前,将字符串 `Co-authored-by: Copilot` 附加到其中。检测逻辑似乎是检查 Copilot 扩展是否在工作区中启用,而不是检查 diff 中是否实际存在任何由 Copilot 生成的代码。这是一个关键区别:开发者可能安装了 Copilot 但针对某个项目禁用了它,或者让它运行但从未接受过任何建议——然而标签仍然会出现。
从 Git 的角度来看,`Co-authored-by` 尾部标记是 Git 项目本身定义的一种约定,通常用于确认对提交做出贡献但并非主要作者的人类协作者。GitHub 的 UI 等工具会解析此标记以显示多个贡献者。通过注入此标记,微软实际上是在宣称 Copilot——一个非人类实体——是每次提交的协作者。这打破了该标记的语义约定,该约定本是为人类署名而设计的。由此产生的提交历史,在 GitHub 上或通过 `git log` 查看时,会将 Copilot 显示为联合作者,这可能会混淆那些统计贡献者的自动化工具,例如 GitHub 自己的贡献者图表或第三方分析平台。
一个更深层次的技术问题是缺乏选择加入的粒度。VS Code 的扩展 API 允许扩展通过 `DocumentRangeFormattingEditProvider` 或自定义的 `SourceControl` 实现来修改提交信息,但没有标准机制让扩展声明它们将更改提交元数据。Copilot 扩展在附加标签前并未请求许可;它直接就这么做了。这违反了最小惊讶原则,而该原则是良好 UI/UX 设计的核心信条。在数百次提交后发现此问题的开发者将面临痛苦的清理工作:他们要么修改每次提交(重写历史),要么忍受被污染的元数据。
| 方面 | VS Code 1.117.0 之前 | VS Code 1.117.0 之后 |
|---|---|---|
| 提交信息控制 | 仅限用户,可选的手动联合作者标签 | 无论使用情况如何,自动附加 Copilot 标签 |
| 署名准确性 | 反映实际的人类贡献 | 包含 Copilot 的误报 |
| 用户同意 | 明确(用户必须输入联合作者) | 隐含(通过禁用扩展选择退出) |
| Git 历史完整性 | 高 | 被非人类元数据破坏 |
数据要点: 表格显示用户在控制权和署名准确性方面出现了明显的倒退。从明确同意到隐含同意的转变是争议的核心,因为它削弱了对工具链的信任。
关键参与者与案例研究
这场争议并非孤立事件。这是微软一系列激进整合举措中的最新一例,旨在将 AI 嵌入其开发者生态系统的每一层。关键参与者包括:
- 微软(VS Code 团队):由 Erich Gamma 和 Kai Maetzel 领导的 VS Code 团队,历来因其响应迅速、社区驱动的开发而备受赞誉。此举背离了这一精神。该团队在简短的更新日志中给出的理由是“给予应有的认可”——但实施方式暗示了不同的动机:提升 Copilot 的感知使用指标。
- GitHub(Copilot 团队):作为微软子公司的 GitHub 负责管理 Copilot 的后端。“Co-authored-by”标签直接输入到 GitHub 的贡献者分析系统中,可能夸大 Copilot 的“活跃用户”数量。GitHub 自己的 `Co-authored-by` 尾部标记文档明确说明其用于“在提交中协作的人”。将其用于 AI 显然是滥用。
- 开发者社区:在 Hacker News 和 Reddit 等平台上,反对声浪最为强烈,开发者们分享了各种变通方法——例如完全禁用 Copilot 扩展,或使用 pre-commit 钩子来剥离标签。有人甚至提议分叉 VS Code 以移除该行为。一位知名开源维护者的评论总结了这种情绪:“这与认可无关;这是关于控制。他们在未经我同意的情况下重写我的历史。”
- 竞争性 AI 工具:其他 AI 编码助手,如 Amazon CodeWhisperer、Tabnine 和 Sourcegraph Cody,尚未实施类似的强制署名。这创造了一个竞争差异点:重视署名完整性的开发者可能会转向这些替代方案。尤其是 Amazon,已将 CodeWhisperer 定位为隐私优先的工具,没有将代码建议与单个提交关联的遥测技术。
| 工具 | 强制联合作者标签 | 用户同意模式 | 定价(个人) |
|---|---|---|---|
| GitHub Copilot | 是(VS Code 1.117.0+) | 隐含(选择退出) | 10美元/月 |
| A