MiniGit is a lightweight, educational implementation of Git’s core functionality, written in Java. It’s a project to explore and understand Git’s internals by recreating its key components, like objects, commits, and the index. This is a learning tool, not a production-ready replacement for Git, but it’s a fun way to dig into how version control works under the hood.
- init: Initializes a new Git repository with a- .gitdirectory.
- hash-object: Computes SHA-1 hashes for files and optionally stores them as blob objects.
- cat-file: Displays details about Git objects (type, size, or content).
- ls-tree: Lists the contents of a tree object, with an option to show only file names.
More features, like add and commit, are in progress as the project evolves.
- src/core/: Defines Git objects (- Blob,- Tree,- Commit,- IndexEntry).
- src/commands/: Implements commands (- InitCommand,- CatFileCommand, etc.).
- src/repo/: Manages repository logic (- Repository,- ObjectStore,- WorkTree).
- src/utils/: Utilities for hashing, compression, and hex conversion.
- src/Main.java: Entry point for running commands.
MiniGit is built with Java 21. Clone the repo, compile the code, and run commands via the Main class. Check src/Main.java for supported commands and their usage.
This is primarily a learning project, but feel free to open issues for bugs, ideas, or questions about Git’s internals. Contributions are welcome, especially if you’ve got insights into Git’s plumbing!
- CodeCrafters: For providing a great starting point to build and learn Git internals.
- Git Documentation: Official reference for Git’s commands and internals.
- Pro Git Book: An awesome resource for understanding Git’s concepts in depth.
Licensed under the MIT License. See the LICENSE file for details.