guse 0.2.0

Under development. A git-based virtual filesystem mounted with fuse. It allows mounting of multiple repositories independently. Either fetched repositories from github, or empty storing and versioning local files.
Documentation
# GUSE (goo͞s) is a git based filesystem, written in rust and mouted with FUSE.

## Under development. See Usage for current functionality

## Dependencies

This project uses [libgit2](https://libgit2.org/) (via the `git2` crate) and
[SQLite](https://sqlite.org/) (via the `rusqlite` crate).

## OS
This project has support for linux/macOS. On windows, consider using WSL2.

## How to install and use
- [Usage]Readme/usage.md

## INFO
GUSE is a learning project. It is built to allows user to interact with git directly from the filesystem, using commands such as cd, ls, mkdir, touch, cat etc

Inspired by [rencfs](https://github.com/xoriors/rencfs)

GUSE allows mounting of multiple 'repositories' and manage them independently
### The disk structure, as observed by the user is:
``` text
data_dir (Root folder. Can be renamed)
    ├── repository_1/
            ├── live                    # working files and folders
                    ├── user_file1.md
                    └── user_file2.md
            ├── YYYY-MM/                # a list of months where commits were made
                    ├── Snaps_on_MM.DD.YYYY/   #  list of days where commits were made
                    └── Snaps_on_MM.DD.YYYY/
                        ├── user_file1.md   # previous versions of the live files. Read only versions
                        └── user_file2.md
            ├── YYYY-MM/               
                    ├── Snaps_on_MM.DD.YYYY/
                    └── Snaps_on_MM.DD.YYYY/
                        ├── user_file1.md
                        └── user_file2.md
            ├── YYYY-MM/                
                    ├── Snaps_on_MM.DD.YYYY/
                    └── Snaps_on_MM.DD.YYYY/
                        ├── user_file1.md
                        └── user_file2.md
            ...
    ├── repository_2/
            ├── live
            ├── snap_1_date
            ├── snap_2_date
            ├── snap_3_date
            ...
    ├── repository_3/
            ├── live
            ├── snap_1_date
            ├── snap_2_date
            ├── snap_3_date
            ...
```

### The filesystem commands interact with git by performing different actions depending on WHERE and on WHAT they are used on.
The locations include:

1. `root` – root of the filesystem

2. `repository` folder

3. `live` folder

4. `snapshot` folder

## Commands available
```
    - mkdir
        location 1: root folder
                    - Using a name with the format github.tokio-rs.tokio.git, will initialize a repository and perform a fetch on the remote repo.
                    - Otherwise, a normal folder name will initialize an fresh repository
        location 2: repository folder
                    - This folder is read only
        location 3: live folder
                    - Will always create normal folders
        location 3: snapshot folder
                    - This folder is read only

    - cd
        Normal operation, will navigate the filesystem

    - ls
        When used on a folder:
            location 1: Normal operation
            location 2: Will perform a git log (showing the snapshots)
            location 3: Normal operation
            location 4: Normal operation
        When used on a file:
            Will try and perform a git blame
        - ls -a
            location 3: repository folder
                        - Will perform a git reflog

    - cat
        Normal operation.
        When used on a snapshot: 
            Will print a summary of the snapshot.