跳转到内容

Gemini CLI 读取项目 .env 导致 cc-switch 失效 - CC Switch Fix

Quick fix

在 PowerShell 中封装 gemini 命令,手动加载 ~/.gemini/.env 环境变量。

报错原文
gemini-cli 在项目目录下存在 .env 导致 ccswitch 失效

cc-switch 将 Gemini CLI 的配置写入用户主目录下的 ~/.gemini/.env 文件。然而,Gemini CLI 自身的变量加载优先级高于此路径:它会优先读取当前工作目录(即项目根目录)下的 .env 文件。当 Python 等项目目录下存在本地 .env 文件时,Gemini CLI 会加载该文件并可能覆盖或忽略全局配置,导致 cc-switch 注入的 API Key 等变量无法生效。

这是一个 Gemini CLI 客户端的行为机制问题,而非 cc-switch 的 bug。由于加载顺序固定,cc-switch 无法直接修改 CLI 的内部逻辑。唯一的解决方案是在调用 gemini 之前,通过自定义函数或别名强制导出 ~/.gemini/.env 中的环境变量,确保它们在当前 shell 会话中处于最高优先级。

  1. 打开 PowerShell 配置文件(如 $PROFILE),添加以下函数以拦截 gemini 命令执行。该函数会先解析并导出 ~/.gemini/.env 中的变量,再调用原始 gemini 程序。

    # $PROFILE (PowerShell Profile)
ToolGemini CLI
Version未知
PlatformsWindows
为什么移除项目目录下的 .env 文件就能正常使用?
因为移除了项目目录下的 .env 后,Gemini CLI 无法找到更高优先级的本地配置文件,从而回退到加载 ~/.gemini/.env 或系统环境变量,此时 cc-switch 的配置即可生效。但这不是推荐做法,因为项目通常需要自己的 .env 进行本地开发配置。
这个修复方案适用于 CMD 或 Git Bash 吗?
上述提供的代码片段专为 PowerShell 设计。如果你使用 CMD 或 Git Bash (pwsh7),可以参考 Issue #423 中其他用户提供的 bash 版本 shim 脚本,原理相同:在执行 gemini 前手动 export 环境变量。
我还需要手动设置 GOOGLE_GEMINI_BASE_URL 吗?
不需要。只要 ~/.gemini/.env 文件中正确定义了 GOOGLE_GEMINI_BASE_URL,并通过上述 shim 函数成功导出,它就会被自动应用。如果仍然无效,请检查 .env 文件格式是否正确(无多余空格或注释干扰)。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。