Local CLI tool that concatenates all non-gitignored text files in a repository into a single output, ready for pasting into LLMs.
Inspired by gitingest.com.
pip install albeorla-gitingestgitingest # current dir, copies to clipboard
gitingest ~/projects/myapp # specific repo
gitingest -i "*.py" -i "*.ts" # only include matching files
gitingest -e "*.test.*" -e "docs/*" # exclude patterns
gitingest -E .json -E .lock # exclude by extension
gitingest -F config.yaml # exclude specific filename at any depth
gitingest -m 100k # override size filter (default: 50k)
gitingest -o output.txt # write to file instead of clipboard
gitingest --stdout # print to stdout
gitingest -s # show file count and size stats
gitingest --show-defaults # list default exclusions
gitingest --no-defaults # include lock files, .DS_Store, etc.Use --commits to ingest only the files touched by specific commits. File contents come from the current working tree -- the commits just define which files to include.
# Files touched by two specific commits
gitingest --commits abc123 def456
# All files touched in a commit range
gitingest --commits abc123..def456
# Mix discrete commits and ranges
gitingest --commits abc123 def456..ghi789
# Combine with other filters
gitingest --commits abc123..def456 -e "*.test.*" -m 100kProduces a single text blob with:
- Header -- repo name, branch, commit, timestamp (plus commit scope if
--commitsis used) - Directory tree -- ASCII tree of included files
- File contents -- each file wrapped in
===separators
By default, output is copied to the clipboard (pbcopy on macOS) and saved to a temp file.
- Max file size: 50 KB (override with
-m) - Binary files are skipped
- Lock files,
.DS_Store, minified JS/CSS, and sourcemaps are excluded (disable with--no-defaults) .gitignorerules are respected