Skip to main content

mv_git — git for MultiValue accounts, on UniData and UniVerse (open source, GPL-2.0)

  • August 25, 2026
  • 0 replies
  • 21 views

gordonh

I've been building a tool that puts a MultiValue account under real version control. It runs on UniData and UniVerse today, and it's built to port to any MV system — the engine sits on a deliberately narrow set of record primitives, so a new platform means implementing that handful, not the tool. jBASE is in active development — its test suite is passing and I expect it in 2.1.

What it does. It commits the account's own records directly to git objects — your records, your dictionaries, your VOC. The live account is the working tree, so there's no export copy drifting out of step and no import step to forget. Change a record, GIT STATUS shows it changed.

Both surfaces work. From the shell it's udt-git / uv-git, taking the same subcommands and flags as stock git. From inside a session it's a cataloged GIT verb — GIT ADD -A, GIT COMMIT -m "...". Since 2.0.0 both commit identical bytes, which took longer to get right than everything else put together: a dictionary isn't stored the way it's held, and each side had its own opinion about that.

Installing is a tarball and a script:

tar xzf mv_git-2.0.1-udt-linux-x86_64-le.tar.gzcd mv_git./install.sh

On EL8 you'll need libgit2 from EPEL first — dnf install epel-release && dnf install libgit2_1.7 — the base 0.26 is far too old. UniVerse is the same shape with the -uv- tarball; it runs the git work in a background process, because UniVerse gives BASIC no in-process route to libgit2.

Because it's portable, it's also a migration path. An account committed on UniData rebuilds as a live account on UniVerse, and vice versa — the portable form carries the dictionaries and file controls, not just the data. That's what makes the jBASE work worth doing: it's another platform accounts can move between, not just another place to run git.

A demo account to try it against, so you don't have to point it at your own data first:
github.com/mvx-lang/demo

udt-git clone https://github.com/mvx-lang/demo.git mydemo

It's a real MultiValue account kept in the portable format — clone it on UniData or UniVerse and you get a live account with clients, orders, inventory and staff, dictionaries and all.

Longer write-up — how it handles dictionaries, and what it costs: heydon.consulting/articles/git-pick-world
Releases: github.com/mvx-lang/mv_git/releases/latest

GPL-2.0, and I'd genuinely like bug reports — particularly from anyone running it against a real account with unusual dictionaries.