针对被开发者质疑“静默打包上传完整 Git 历史”的问题,ZCode 给出了三项回应:道歉、公开源码,以及在 v3.14.0 中移除 Repo Wiki 功能,切断本地仓库快照的生成与上传链路。对开发者来说,关键不只是功能是否下线,还包括如何验证新版行为,以及此前可能上传的数据如何处理。
为什么 Git 历史比当前工作区更敏感
当前目录里没有密钥,不代表仓库历史里也没有。已经删除的 .env、旧配置文件或私钥,仍可能存在于过去的提交和分支中。因此,“上传完整 Git 历史”与“读取当前打开的文件”有明显不同的风险范围。
可以在自己的仓库目录运行下面的命令,快速了解历史规模,并找出部分值得检查的文件路径。命令只读取本地 Git 数据,不会上传内容;把 /path/to/your/repo 改成实际路径即可:
cd /path/to/your/repo
printf '历史提交数:'
git rev-list --all --count
printf '历史中疑似敏感文件路径:\n'
git log --all --format= --name-only \
| sort -u \
| grep -Ei '(^|/)(\.env([./-]|$)|id_rsa$|.*\.(pem|key)$)' || true
这只是按文件名筛查,不能证明仓库没有泄露过凭据;普通名称的配置文件和代码也可能包含敏感信息。
更新和开源分别解决了什么
按官方回应,v3.14.0 移除了 Repo Wiki,也移除了与之相关的本地仓库快照生成、上传链路。这针对的是本次争议中的核心数据流。源码公开在 zai-org/ZCode,则为外部检查提供了条件:开发者可以追踪仓库读取、快照生成和网络请求之间是否仍有连接。
但“源码已公开”不等于“正在运行的客户端已经被验证”。审查时还需要核对发布版本与公开代码的对应关系,并测试客户端的实际网络行为;仅凭一次关键词搜索或一份声明,都不足以得出结论。
如果已经取得 ZCode 源码,可以这样开始定位相关实现(需安装 rg)。搜索结果只是审查入口,不是上传行为存在或不存在的证据:
cd /path/to/ZCode
rg -n -i 'repo.?wiki|snapshot|upload|git bundle|git archive' .
团队该如何处理
先确认使用中的客户端版本是否为 v3.14.0 或更新版本,再根据团队策略决定是否恢复其对敏感仓库的访问。对曾经开放过访问权限的仓库,检查历史中的凭据、令牌和内部文件;如果发现仍有效的凭据,应按既有安全流程轮换。后续评估则重点看三件事:数据采集是否有明确提示,功能关闭后是否仍产生相关网络请求,以及历史数据的处置说明是否足够清晰。
这次整改缩小了未来版本的相关数据流,但不能仅凭新版移除功能,就推断旧版本上传过什么,或此前的数据已经删除。更新、代码审查与数据处置确认,需要分开完成。