got

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 24, 2026 License: GPL-3.0

README

Got

Like Git, but with an 'o'

Got is version control, with a model similar to Git's. A solution to the problems that come from using Git to store all of your data. Got uses an improved data structure that better handles large files and directories, and encrypts all the data that you give it.

Features/Roadmap

  • Content-Defined chunking of large files into blobs with a maximum size.
  • E2E encryption. Branch names, directory names, file names, and file sizes can all be hidden from remote repositories.
  • Efficiently add/remove large files and directories to/from existing filesystems.
  • Stage changes with add, rm, put, and discard commands.
  • Inspect branch state with cat and ls.
  • Print and change the active branch with active command.
  • Commit changes, with commit.
  • Create, delete, and list branches with branch commands.
  • Copy one branch state to another with sync.
  • Share repositories using the Blobcache protocol with serve command.
  • Efficiently pack many small files into fewer blobs.
  • Checkout the head of a branch to the working directory.
  • Merge 2 branches.

Getting Started

Installation

Either download a prebuilt binary or build one from source.

Installs to /usr/bin/got with just.

$ just install

This will build Got for the current architecture, leaving the binary in build/out/got.

Create a New Repo

Then initialize a repository in the current working directory. Make sure you cd to where you want the repository.

$ got init

That will create a new repo using an in-process blobcache. All content will be stored in the .got/blobcache directory.

This is the recommended way to try out blobcache.

A repo can also be initially configured to use the system (or any) blobcache instance.

$ got init --blobcache-client <http endpoint> --volume <volume-oid>

For large repositories, it is recommended to use an out of process blobcache

The HTTP endpoint should just work, the BCP endpoint requires granting access to Got.

Contributing

We use just as a command runner. All of the common development tasks have just commands.

To run the tests:

$ just test

To build release binaries

just build-exec

The release binaries for all architectures will be under the build/out directory.

Got in Action

Got importing a 3GB file.

$ got add large_file.dat
[1.608s]
  [1.564s] large_file.dat data_in=(1.24GB Δ=799.35MB/s)
    [1.564s] worker-0 blobs_in=(182blobs Δ=117.26blobs/s), data_in=(157.09MB Δ=101.21MB/s)
    [1.564s] worker-1 blobs_in=(197blobs Δ=127.43blobs/s), data_in=(158.19MB Δ=102.33MB/s)
    [1.564s] worker-2 blobs_in=(181blobs Δ=116.50blobs/s), data_in=(154.83MB Δ=99.66MB/s)
    [1.564s] worker-3 blobs_in=(172blobs Δ=112.63blobs/s), data_in=(154.01MB Δ=100.85MB/s)
    [1.564s] worker-4 blobs_in=(179blobs Δ=116.82blobs/s), data_in=(157.34MB Δ=102.68MB/s)
    [1.564s] worker-5 blobs_in=(177blobs Δ=115.36blobs/s), data_in=(156.12MB Δ=101.75MB/s)
    [1.564s] worker-6 blobs_in=(199blobs Δ=130.09blobs/s), data_in=(155.20MB Δ=101.46MB/s)
    [1.564s] worker-7 blobs_in=(161blobs Δ=104.50blobs/s), data_in=(150.69MB Δ=97.81MB/s)

More

Read more about configuration in doc/Config.md.

Support and development discussion happen in the INET256 discord.

Directories

Path Synopsis
cmd
got command
src
adapters/gotiofs
package gotiofs provides an adapter from Got to an io/fs.FS
package gotiofs provides an adapter from Got to an io/fs.FS
gotrepo/internal/reposchema
Package reposchema implements a Blobcache Schema for a Got Repo.
Package reposchema implements a Blobcache Schema for a Got Repo.
gotrope
Package gotrope implements a Rope data structure.
Package gotrope implements a Rope data structure.
gotwc
Package gotwc implements working copies of Got repositories
Package gotwc implements working copies of Got repositories
gotwc/internal/porting
package porting deals with importing and exporting to and from gotfs
package porting deals with importing and exporting to and from gotfs
internal/sbe
package sbe implements simple binary encoding formats for serializing and deserializing data.
package sbe implements simple binary encoding formats for serializing and deserializing data.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL