You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.2 KiB


This repo contains an implementation of a "Git-like version control system (VCS)". It was made by following the step by step tutorial created by nikita (which is fantastic btw), as a learning exercise, first to understand Git internals and also to practice a bit with the Rust programing language.

You can find the original μgit tutorial here:

The code on this repository was not written to be idiomatic, clear, and/or beautiful, the only concern was to follow the provided Python code as closely as possible.

Note: At the moment, the program is not yet finished. The last 3 steps related to the add (staging) feature are still missing.

Note 2: Do not use it for any meaningful work.

Current commands

$ rgit --help
rgit vcs 0.1.0
Gonçalo Valério <>
A watered-down git clone

    rgit [SUBCOMMAND]

    -h, --help       Prints help information
    -V, --version    Prints version information

    add            Add files to the index
    branch         Create a new branch
    cat-file       outputs the original object from the provided hash
    checkout       Move the current content and HEAD to given commit
    commit         writes a named snapshot of the current tree
    diff           Compare the working tree with the given commit
    fetch          Fetch refs and objects from another repository
    hash-object    created an hash for an object
    help           Prints this message or the help of the given subcommand(s)
    init           creates new repository
    k              visualize refs and commits
    log            List all commits
    merge          Merge changes of a different commit/branch
    merge-base     Find the common ancestor between two commits
    push           Push refs and objects to another repository
    read-tree      writes a given tree to the working directory
    reset          Move the current content and HEAD to given commit with dereferencing
    show           Show diff from a commit
    status         check current branch
    tag            Create a tag for a given commit
    write-tree     write the current working directory to the database