Git-like repository for in-memory object versioning

ogre

An in-memory git-like repository for objects for when you need to
keep the history around for a bit longer.

Features

  • Commit
  • Branch
  • Checkout
  • Visualization via @dotinc/ogre-react
  • Merge
    • fast-forward

Usage

const repo = new Repository(new ComplexObject())

// apply changes
repo.data.name = 'my name'
repo.data.description = 'now we have a description'

// commit changes 
const init = await repo.commit('initial commit', 'author <author@test.com>')
// create a branch named savepoint pointing to the last commit
repo.createBranch('savepoint')

// switch to new branch
repo.checkout('add_details', true)

// apply changes
repo.data.name = 'a fancier name'

// a) commit & merge
  await repo.commit('change name', 'author <author@test.com>')
  repo.checkout('main')
  repo.merge('add_details')

// or b) discard change and go back
  // by using the branch name 
  repo.checkout('main')
  // by using the commit hash in a detached state
  repo.checkout(init)

TODO

  • Tags
  • Merge
    • recursive
    • octopus

GitHub

View Github