| # File management with Gemini CLI |
|
|
| Explore, analyze, and modify your codebase using Gemini CLI. In this guide, |
| you'll learn how to provide Gemini CLI with files and directories, modify and |
| create files, and control what Gemini CLI can see. |
|
|
| ## Prerequisites |
|
|
| - Gemini CLI installed and authenticated. |
| - A project directory to work with (for example, a git repository). |
|
|
| ## Providing context by reading files |
|
|
| Gemini CLI will generally try to read relevant files, sometimes prompting you |
| for access (depending on your settings). To ensure that Gemini CLI uses a file, |
| you can also include it directly. |
|
|
| ### Direct file inclusion (`@`) |
|
|
| If you know the path to the file you want to work on, use the `@` symbol. This |
| forces the CLI to read the file immediately and inject its content into your |
| prompt. |
|
|
| ```bash |
| `@src/components/UserProfile.tsx Explain how this component handles user data.` |
| ``` |
|
|
| ### Working with multiple files |
|
|
| Complex features often span multiple files. You can chain `@` references to give |
| the agent a complete picture of the dependencies. |
|
|
| ```bash |
| `@src/components/UserProfile.tsx @src/types/User.ts Refactor the component to use the updated User interface.` |
| ``` |
|
|
| ### Including entire directories |
|
|
| For broad questions or refactoring, you can include an entire directory. Be |
| careful with large folders, as this consumes more tokens. |
|
|
| ```bash |
| `@src/utils/ Check these utility functions for any deprecated API usage.` |
| ``` |
|
|
| ## How to find files (Exploration) |
|
|
| If you _don't_ know the exact file path, you can ask Gemini CLI to find it for |
| you. This is useful when navigating a new codebase or looking for specific |
| logic. |
|
|
| ### Scenario: Find a component definition |
|
|
| You know there's a `UserProfile` component, but you don't know where it lives. |
|
|
| ```none |
| `Find the file that defines the UserProfile component.` |
| ``` |
|
|
| Gemini uses the `glob` or `list_directory` tools to search your project |
| structure. It will return the specific path (for example, |
| `src/components/UserProfile.tsx`), which you can then use with `@` in your next |
| turn. |
|
|
| <!-- prettier-ignore --> |
| > [!TIP] |
| > You can also ask for lists of files, like "Show me all the TypeScript |
| > configuration files in the root directory." |
|
|
| ## How to modify code |
|
|
| Once Gemini CLI has context, you can direct it to make specific edits. The agent |
| is capable of complex refactoring, not just simple text replacement. |
|
|
| ```none |
| `Update @src/components/UserProfile.tsx to show a loading spinner if the user data is null.` |
| ``` |
|
|
| Gemini CLI uses the `replace` tool to propose a targeted code change. |
|
|
| ### Creating new files |
|
|
| You can also ask the agent to create entirely new files or folder structures. |
|
|
| ```none |
| `Create a new file @src/components/LoadingSpinner.tsx with a simple Tailwind CSS spinner.` |
| ``` |
|
|
| Gemini CLI uses the `write_file` tool to generate the new file from scratch. |
|
|
| ## Review and confirm changes |
|
|
| Gemini CLI prioritizes safety. Before any file is modified, it presents a |
| unified diff of the proposed changes. |
|
|
| ```diff |
| - if (!user) return null; |
| + if (!user) return <LoadingSpinner />; |
| ``` |
|
|
| - **Red lines (-):** Code that will be removed. |
| - **Green lines (+):** Code that will be added. |
|
|
| Press **y** to confirm and apply the change to your local file system. If the |
| diff doesn't look right, press **n** to cancel and refine your prompt. |
|
|
| ## Verify the result |
|
|
| After the edit is complete, verify the fix. You can simply read the file again |
| or, better yet, run your project's tests. |
|
|
| ```none |
| `Run the tests for the UserProfile component.` |
| ``` |
|
|
| Gemini CLI uses the `run_shell_command` tool to execute your test runner (for |
| example, `npm test` or `jest`). This ensures the changes didn't break existing |
| functionality. |
|
|
| ## Advanced: Controlling what Gemini sees |
|
|
| By default, Gemini CLI respects your `.gitignore` file. It won't read or search |
| through `node_modules`, build artifacts, or other ignored paths. |
|
|
| If you have sensitive files (like `.env`) or large assets that you want to keep |
| hidden from the AI _without_ ignoring them in Git, you can create a |
| `.geminiignore` file in your project root. |
|
|
| **Example `.geminiignore`:** |
|
|
| ```text |
| .env |
| local-db-dump.sql |
| private-notes.md |
| ``` |
|
|
| ## Next steps |
|
|
| - Learn how to [Manage context and memory](memory-management.md) to keep your |
| agent smarter over long sessions. |
| - See [Execute shell commands](shell-commands.md) for more on running tests and |
| builds. |
| - Explore the technical [File system reference](../../tools/file-system.md) for |
| advanced tool parameters. |
|
|