rgit: A git implementation in Rust
This is a simple git implementation in Rust heavily inspired from James Coglan's Building Git. It is a work in progress and is not yet fully functional. This is in no way a replacement for the original git (though you can use it for toying around), but rather a learning exercise to understand how git works under the hood and to get a better understanding of Rust.
Currently, the following commands are implemented:
rgit init <optional root directory>
: Initialize a new git repositoryrgit add <file(s)>
: Add a file(s) to the staging areargit commit -m <message>
: Commit the staged filesrgit status
: Show the status of the working directoryrgit diff
: Show the difference between the working directory and the staging areargit diff --cached
: Show the difference between the staging area and the last commit
Note: For commit to work, you need to have the following evnironment variables set:
This is because the commit command extracts the author name and email from these environment variables.
Installation
To install rgit
, clone the repository and run the following command:
This will create an executable in the target/release
directory. You can then add this directory to your PATH
to use rgit
from anywhere like this:
Usage
)
)
Local Development
To run the tests, use the following command:
This is necessary because the few tests modify the same repository and run concurrently, which can cause issues. The --test-threads=1
flag ensures that the tests run sequentially.