Skip to content

A simplified version control system written in Rust, similar to Git, for local files

License

Notifications You must be signed in to change notification settings

shubhexists/vault

Repository files navigation

Vault

Vault will be a command line tool (if successful) similar to git which would have multiple features like brances etc etc.

Drop of a ✨ if you are here. It would mean a lot : )

__     __          _ _   
\ \   / /_ _ _   _| | |_ 
 \ \ / / _` | | | | | __|
  \ V / (_| | |_| | | |_ 
   \_/ \__,_|\__,_|_|\__| , simplified version control for local files 

About

Vault is a version control system in Rust, written as a learning project. It follows a similar approach of how Git works i.e.

  • Files are stored as Blobs and Directories as Trees.
  • SHA256 is used to encode these objects.
  • ZLib Compression is used for maximum efficiency.

For more details, Refer to Workflow.md (wip)

Vault is not suitable for real-world use, but might be of interest for learning about git-internals.

Installation

You can directly install from Cargo by

cargo install vault_vcs

Note - This will install the binaries with executable name vault_vcs. So, if you want to continue using vault as an executable name, you can alias vault_vcs to vault or build it from source.

References

From Source

  1. Clone this repository by running the command
git clone https://github.com/shubhexists/vault
  1. cd into the directory and run
cargo build --release

This will create binaries for the project.

  1. Export the path of the executable (It is in the /target/release/ directory .) For eg,
   export PATH="$PATH:/home/jerry/Desktop/vault/target/release"
  1. You are now all set to "VAULTIFY" your local files :)

Commands

  1. To initialize a new vault instance in your present working directory.
vault init
  1. To create a new commit.
vault commit -m "Your Commit Message"

Parameter -m or --message is optional. It would take an empty message by default if no message is provided.

  1. To create a new branch.
vault create branch_name
  1. To revert commits (get back to a previous point of directory)
vault revert -l "No. of commits" "dir_name"
  • Parameter -l or --level defines the number of commits to go back.. For eg. -l 2 would go back 2 commits in the repository. If nothing is provided , default vaule would be taken as 1.

  • dir_name requires a directory name in which the files would be added. If nothing is provided, it would replace the files of the current directory.. (wip)

For eg. for vault revert -l 2 hello, a new directory would be created namely hello, that would have the files 2 commits ago..

  1. Delete a Branch
vault delete branch_to_delete
  1. Switching to another branch ( git checkout )
vault switch branch_to_switch
  1. Logs of the current branch
vault log

Note - Output of vault log just consists of the logs of current active branch.

Output of vault log 8) (Mainly For Debugging Purposes) To read the contents of a Zlib compressed binary

vault cat hash_string_to_read

Note - vault cat command should be run in the root directory. i.e. the directory in which .vault exists. Screenshot from 2023-12-23 10-05-08

Limitations / WIP

  1. .vaultignore is not functional currently
  2. To add - Test cases and subsequent workflows
  3. Add more useful commands

There would be probably many more! Some of them are in the issues.

Thanks

If you read till here, thanks for showing interest in the project :)