An encrypted version control system written in Java
Note
This project is under active experimentation, and not yet suitable for production use.
- ✅ SHA-256 Object Hashing
- ✅
zlib deflateObject Compression - ✅ Staging Area
- ✅ Commits
- ✅ AES-256 Encrypted Blob Storage
- Branching
- Diff Engine
- Garbage Collector (Explicit + Implicit)
- Unit Tests Integration
- Object Integrity Checks
- Configuration Support
EncGit encrypts all object data at rest using AES-256.
During encgit init, a cryptographically secure 256-bit key is generated and stored in the user's home directory (outside the repository). The repository maintains only a reference to this key via .encgit/ref.key.
All subsequent operations use this key to perform transparent encryption and decryption of object data.
Key reference format (.encgit/ref.key):
ref: C:\Users\jake\.encgit-keys\9e0bd17bfb0c5e53ed19acee5969486c.key
Warning
Loss of the key file results in permanent data loss, as encrypted objects cannot be recovered without it.
Here's the list of supported user-friendly commands:
encgit init
Initializes directory as an empty EncGit repository
encgit init
encgit add
Adds files to the staging area
encgit add <file1> <file2> ...
encgit commit
Creates a commit from the current staging area
encgit commit -m <message>
Here's the list of supported internal commands:
encgit cat-file
Pretty-prints details of the specified object
encgit cat-file <flag> <object-hash>
Flags:
-tprints object type-pprints object content