catgit is a Python-based cli tool to dump out an entire directory structure or a git project in a cat-esque way or to pass it along into a text editor into a single output or text file
This tool is designed to streamline the process of reviewing project contents, making it a neat little utility for developers who manage large or complex Git repositories and/or use LLM-based AI assistants to sort through their codebases.
catgit is intended to display the contents of a git project (or any directory tree for that matter) in a consolidated, readable format directly in your terminal or through a specified text editor. It provides a quick overview of the project's structure, including ignored files based on your .gitignore settings, and can output all readable files sequentially.
catgit supports direct dumps of an entire project's contents straight into your favorite text editor, i.e. to be passed along to a LLM assistant or such with the --editor flag. It can also be used to get the structural view of regular directories and their file contents, even if they're not Git repositories.
catgit has its own .catgitignore ignore lists and .catgitinclude include lists, both work the same way as .gitignore does. You can use .catgitignore to ignore files that you don't want to be included in your project directory tree dump, or .catgitinclude (with the --includedonly command line flag) to only include the files listed in the include file.
.catgitignoreand.catgitinclude:.catgitignore: read and respect files to skip over additional files or directories specific tocatgitoutputs. Works the same way as.gitignoredoes..catgitinclude: when--includedonlycommand line flag is in use, only the files listed in the include file will be included in the printout.
- Project Overview: Outputs the complete directory and file structure of your Git project.
- Gitignore Respect: Respects
.gitignorefiles to skip over ignored files or directories. - Flexible Output: Supports output directly to the terminal or opens in a specified text editor like nano or gedit.
- Configurable: Options to toggle the inclusion of the tree view in the output, and choose between terminal output and editor output through configuration.
You can install catgit directly from the source code:
- Clone the repository:
git clone https://github.com/FlyingFathead/catgit.git- Navigate to the cloned directory:
cd catgit- Install the package:
pip install .Alternatively, if you only want to try out catgit, navigate to the catgit/ subdirectory and run it with:
python catgit.py /path/to/your/project/For quick setup after installation, just use:
catgit --setupcatgit uses a configuration file (config.ini) which allows the user to set preferences such as:
output_method: Choose betweenterminalandeditorto display the project output.editor_command: Specify which editor to use when opening the output (e.g.,vim,nano,gedit).ignore_gitignored: Toggle whether to ignore files as specified in.gitignore.include_tree_view_in_file: Decide whether to include the directory tree structure in the concatenated file output.treat_non_git_as_error: Decide whether to quit if the directory structure is not recognized as a Git repository..catgitincludeand.catgitignorefiles to ignore files or only list included (works akin to.gitignore)
Please see the config.ini for more configuration options.
To use catgit, navigate to the root directory of the project and run:
catgit /path/to/your/project/You can also pass the output directly to your editor with the flag --editor (since v0.10.4):
catgit /path/to/your/project/ --editorOr, cd to your project directory and simply run:
catgit . --editorYou will be prompted for an editor if a default isn't found. You can use i.e. vim, nano etc on Linux, notepad on Windows, etc.
After having been installed, help for using catgit is available by typing:
catgit --help0.11.4- support added for configurable extra delimiters (i.e. markdown triple-backticks; enabled by default)- see
config.inifor more - added autoconfig to default editor when i.e. listing
catgit . --editorand no suitable editor is set. - fixed
.gitignoreand.catgitignorerules and how they apply.
- see
0.11.3- fixes to ignore/include file reading and traversal rules0.11.2- added the.catgitincludefeature- this allows to only print out selected files from the project, as listed in the include file
- the logic is similar to
.gitignore(or.catgitignore), except it's files to include, not to exclude - can be utilized with
--includeonlycmdline flag
0.11.1- subprocess optimization (speeds upcatgiton larger projects)0.11.0- added.catgitignorefunctionality to ignore files- works the same way as
.gitignore, is useful for selective project outputs - also added
debug_mode(true/false) flag intoconfig.inifor verbose mode
- works the same way as
0.10.8- output clarification to minimize LLM confusion and--version0.10.7- addedThreadPoolExecutorfor faster performance; file sizes; line counting0.10.6- added thetreat_non_git_as_error(true/false) config option0.10.5- git checks made robust and verbose0.10.4- added--editorflag for sending straight to text editor, checks for editor and asks the user if not found0.10.3- improved error catching, absolute paths0.10.2- switched to usingtempfilefor better cross-platform compatibility0.10.1- added the--setupflag for quick setup in cli0.10- initial public release w/ installer
catgit was developed by FlyingFathead with digital ghost code contributions from ChaosWhisperer.
catgit is open-source software licensed under the MIT license.