#llm #string #cli

app codecat

「 Merge Code Repository into a Single File | Respects .gitignore | Ideal for LLM Code Analysis 」

1 unstable release

new 0.1.0 May 1, 2025

#42 in #llm

MIT/Apache

175KB
126 lines

codecat logo

codecat

crates.io License: MIT OR Apache-2.0

「 Merge Code Repository into a Single File | Respects .gitignore | Ideal for LLM Code Analysis 」

中文说明

codecat is a command-line utility that merges code from a repository into a single text file. It respects the rules defined in your .gitignore, making it suitable for creating a clean context bundle of your project's source code.

Features

  • Recursively walks through directories.
  • Respects .gitignore, .ignore, global ignore rules, etc., powered by the ignore crate.
  • Concatenates file contents into a single output file.
  • Adds clear delimiters (--- START FILE: path/to/file --- and --- END FILE: path/to/file ---) for each file.
  • Attempts to read files as UTF-8, skipping non-UTF8 files with a warning.
  • Simple command-line interface.
  • Cross-platform (Windows, macOS, Linux).

Installation

Ensure you have Rust and Cargo installed.

cargo install codecat

Usage

Basic Usage

Navigate to your project directory or provide the path to it:

codecat /path/to/your/project

Or, if you are already in the project directory:

codecat .

By default, codecat will create a file named <project_directory_name>.codecat.txt in the parent directory of your project.

Specifying Output File

You can specify a custom output file path using the -o or --output flag:

codecat /path/to/your/project -o /path/to/output/bundle.txt
codecat . --output context.txt

Example Output Structure

The generated file will look something like this:

--- START FILE: src/main.rs ---
fn main() {
    println!("Hello, world!");
}

--- END FILE: src/main.rs ---

--- START FILE: Cargo.toml ---
[package]
name = "my_project"
version = "0.1.0"
# ... other cargo stuff ...

--- END FILE: Cargo.toml ---

--- START FILE: README.md ---
# My Project
This is my awesome project.
...
--- END FILE: README.md ---

(Files listed in .gitignore, like target/ or .env, will not be included).

License

Licensed under either of:

Dependencies

~5–13MB
~154K SLoC