Package: repofs
RepoFSRepoFS represents the Git version control system as
a virtual file system where all commits and their contents
can be traversed concurrently in a read-only manner
using shell commands.Read the complete description and methodology onSoftwareXYou can cite RepoFS as follows.
Vitalis Salis and Diomidis Spinellis.
RepoFS: File system view of Git repositories.
SoftwareX, Volume 9, 2019, Pages 288-292, ISSN 2352-7110,https://doi.org/10.1016/j.softx.2019.03.007.InstallationRepoFS requires Python >= 3.6 and an installation of libgit2@1.1.0 and fuse.Note: If your vendor doesn't provide libgit2 v1.1.0 you can manually build
and install it from source, following the instructions outlined below.Debian & Ubuntu~❯❯❯aptinstalllibffi-devlibgit2-dev=1.1.0fusepython3-pip
~❯❯❯pip3installrepofsArch LinuxAvailable in the AUR:https://aur.archlinux.org/packages/repofs-git/.Usingpacaur:~❯❯❯pacaur-Srepofs-gitOSx~❯❯❯brewinstalllibgit2fusepython3
~❯❯❯pip3installrepofsManual installation of libgit2~❯❯❯wgethttps://github.com/libgit2/libgit2/archive/v1.1.0.tar.gz
~❯❯❯tarxzfv1.1.0.tar.gz
~❯❯❯cdlibgit2-1.1.0/
~❯❯❯cmake.
~❯❯❯make
~❯❯❯sudomakeinstall
~❯❯❯sudoldconfigUsage~❯❯❯repofs-h
usage:repofs[-h][--hash-trees][--no-ref-symlinks][--no-cache]repomount

positionalarguments:repoGitrepositorytobeprocessed.mountPathwheretheFileSystemwillbemounted.Ifitdoesn'texistitiscreatedandifitexistsandcontainsfilesRepoFSexits.

optionalarguments:-h,--helpshowthishelpmessageandexit--hash-treesStore256entries(firsttwodigits)ateachlevelofcommits-by-hashforthefirstthreelevels.--no-ref-symlinksDonotcreatesymlinksforcommitsofrefs.--no-cacheDonotusethecacheThe mount directory contains four directories:commits-by-hash: Directory containing all commits of the Git repository.
A commit directory will contain the state of the repository at the time the
commit was made. Since this directory can get large you can further organize it
using the--hash-treescommand line parameter.~❯❯❯lscommits-by-hash
06f3d110140b7ac97d000aace0ef4a4233512b6c47d3af84ddb24690a76ffac32971313cbe500841
082974029413f8c44a07912d1d581d26744fc994491307a672a07f0354134953fd356998e07fef63
09b371c11e80eb3fe27415c4bdfce367f6bd02794a8c2daab3d21c016738a19e7dc8ad8eb3a02eca
...
...commits-by-date: Directory containing all commits of the Git repository
organized by the time of their creation.~❯❯❯lscommits-by-date20172018~❯❯❯lscommits-by-date/2017010203040506070809101112~❯❯❯lscommits-by-date/2017/1201020304050607080910111213141516171819202122232425262728293031~❯❯❯lscommits-by-date/2017/12/18
1a6ca70a91f6ec1fb4de5a80bfb20a0d7b4846802677b75fd531be570373fe25fc7d576c92e8acd3
58e16f66ae5df0b6e632144ac72c7dd9e3baea37c5bbc3be37479b23e833d1cb6bddb31ca95f8293tags: Contains all tags of the Git repository. We represent the tag
relationship as a symbolic link to the commit the tag points to. In order for
the Unix commandfindto work properly we provide the--no-ref-symlinksoption.branches: Similar to the tags directory. Contains all branch names and
further organizes them to remote branches and local branches.~❯❯❯lsbranches
headsremotes
~❯❯❯lsbranches/remotes
origin
~❯❯❯lsbranches/remotes/origin
HEADmasterRunman repofsafter installation for a complete explanation of RepoFS'
usage.To unmount a Git repository from a specific mount point runumount <mount_dir>.