Skip to content

Gemini CLI 的文件管理能力是日常开发的核心:用 @文件路径 直接把文件内容注入 AI 上下文,支持多文件、整个目录;让 AI 自动找到你不知道路径的文件;通过 diff 预览再确认的方式安全修改代码;用 .geminiignore.env、私有数据等敏感文件隔离在 AI 视野之外。本页是文件操作的完整指南。

文件管理

Gemini CLI 让你可以把文件和整个代码库的内容注入 AI 的对话上下文,精准指导 AI 理解和修改你的项目。

前置条件

  • Gemini CLI 已安装并完成认证,参见 安装指南
  • 有一个项目目录可以操作(推荐 git 仓库)

@ 注入文件内容

指定单个文件

知道文件路径时,用 @ 符号强制 AI 立即读取并注入文件内容:

@src/components/UserProfile.tsx 解释这个组件如何处理用户数据。

同时引用多个文件

复杂功能通常涉及多个文件,可以链式引用:

@src/components/UserProfile.tsx @src/types/User.ts 将组件重构为使用最新的 User 接口。

引用整个目录

大范围问题或重构时,可以引用整个目录(注意大目录会消耗更多 Token):

@src/utils/ 检查这些工具函数中是否有已废弃的 API 用法。

探索陌生代码库

不知道文件在哪里?让 AI 帮你找:

场景:找到组件定义

你知道有一个 UserProfile 组件,但不知道它在哪里:

找到定义 UserProfile 组件的文件。

AI 使用 globlist_directory 工具搜索项目结构,返回具体路径(如 src/components/UserProfile.tsx),你可以在下一个 Prompt 中直接用 @ 引用它。

也可以搜索文件列表:

列出根目录下所有的 TypeScript 配置文件。

修改代码

给了 AI 上下文之后,可以让它做具体修改:

更新 @src/components/UserProfile.tsx,当 user 数据为 null 时显示 loading spinner。

AI 使用 replace 工具提出针对性的代码改动(不是无差别覆写整个文件)。

创建新文件

也可以让 AI 创建全新的文件或目录结构:

创建一个新文件 @src/components/LoadingSpinner.tsx,用 Tailwind CSS 实现简单的 spinner。

AI 使用 write_file 工具从头生成文件。

审查并确认修改

Gemini CLI 以安全优先。在修改任何文件前,它都会展示一个统一格式的 diff:

diff
- if (!user) return null;
+ if (!user) return <LoadingSpinner />;
  • 红色行(-):将被删除的代码
  • 绿色行(+):将被添加的代码

y 确认并写入磁盘,按 n 取消并重新描述需求。

验证修改结果

修改完成后验证一下:

运行 UserProfile 组件的测试。

AI 用 run_shell_command 执行你的测试工具(如 npm testjest),确保改动没有破坏已有功能。

控制 AI 的可见范围

.gitignore 自动生效

Gemini CLI 默认遵守 .gitignore,不会读取或搜索 node_modules、构建产物或其他被忽略的路径。

.geminiignore:更精细的控制

想把某些文件对 AI 隐藏,但又不想加进 .gitignore(比如 .env、本地数据库备份),可以创建 .geminiignore 文件:

text
.env
local-db-dump.sql
private-notes.md

这些文件 AI 既不会读取也不会搜索,但 git 仍然可以追踪它们。

下一步

  • 了解如何持久化 AI 的项目知识:内存管理教程
  • 结合 Shell 命令自动运行测试:Shell 命令教程
  • 查阅文件系统工具的高级参数(权限、编码等)

常见问题

Q: @ 引用和直接告诉 AI "读取这个文件"有什么区别?

A: @路径 是强制立即注入——AI 会在你的 Prompt 被处理前先读取文件。直接描述("请读取 src/foo.ts")让 AI 自己决定何时读取,可能在对话深入后才执行。对于需要精确上下文的操作,推荐用 @

Q: 引用大型目录会有问题吗?

A: 大目录(如 @src/)会消耗大量 Token,可能超出上下文窗口限制。建议指向更具体的子目录,或先用 find 命令让 AI 找到相关文件,再精准 @ 引用。

Q: .geminiignore.gitignore 的格式一样吗?

A: 是的,.geminiignore 使用与 .gitignore 相同的 glob 语法,放在项目根目录下即可生效。