Multiverse - A decentralized version control system

Multiverse is a version control system built using libp2p and IPFS. The goal of the project is to create a Github like platform that is decentralized and uses peer-to-peer networking. The project consists of a command line interface for version control tasks and an integrated web server for offline code viewing. I am looking for feedback on what features you think could be added to improve the project.

multiverse-vcs/go-multiverse: Decentralized Version Control System (github.com)

2 Likes

Sounds interesting. Can you explain, please, how other peers know that a new commit was made?

Doesn’t build for me. Here is the output:

$ make all
go build -o ./bin/multi ./cmd/multi
go: downloading ...snip...
...
web/web.go:5:2: package embed is not in GOROOT (/use/lib/go/src/embed)
make: *** [Makefile:9 multi] Error 1
$ go version
go version how.15.7 linux/amd64

Using archlinux.

You’ll need the go1.16beta1 release for the embed package. I updated the project readme with instructions on how to get it. I also updated the Makefile so make sure to pull those changes before building. Let me know if you run into any other issues.

Sounds interesting. Can you explain, please, how other peers know that a new commit was made?

Currently you will have to use an outside channel such as email or a messaging app. I am working on a pubsub implementation that will allow you to share your peer ID with others and automatically sync pull requests and issues.

Built and installed without error this time, but I get a new error:

$ multi init
panic: open templates/index.html: no such file or directory

goroutine 1 [running]:
html/template.Must(...)
   /home/teknomunk/sdk/go1.16beta1/sec/html/template/template.go:438
github.com/multiverse-vcs/go-multiverse/web.init()
   /home/teknomunk/go-multiverse/web/blob.go:14 +0xac6

As to features, do you have an import function to pull in commit history from an existing git repo?

Built and installed without error this time, but I get a new error:

I forgot the embed the web template. I pushed a change to fix it. Thank you for your patience.

I also forgot to mention this above but I have a getting started guide here https://www.multiverse-vcs.com/docs/

As to features, do you have an import function to pull in commit history from an existing git repo?

I have an old importer that I was prototyping a while ago. I’ve been playing around with the idea of creating a service that imports your Git repo into IPFS using the Multiverse format. It would essentially allow for read only back ups and code browsing via IPFS / Filecoin. If people are interested in that idea I can publish the code.

1 Like

I think something like multi import git [url] that does a git clone, then an import to the multiverse format would be better in the long run than an external service or script to perform the conversion.

1 Like

Found two more issues:

If you try to run commands without the daemon running, you get this error message:

dial unix /home/telnomunk/.multiverse/rpc.sock: connect: connection refused

Having this instead be message that the daemon is not running and needs to be to function would be better.

If you try to run multi status in a directory containing symbolic link cycles, it fails. This will be the case for every crystal project that has at least one shared (non-stdlib dependency).

I’ll add some tests to cover the symlink issue and update that error message later today.

I appreciate the feedback!

No problem.

Should I expect to be able to load the repo from an IPFS gateway using /ipns/$PEER_ID?

You can load it through a gateway but it will need to be the /ipfs/$CID path.

Here is an example link to a repo I’m currently hosting. Since the public gateways only support viewing files you need to link directory to a branch and file tree.

1 Like

I don’t see a way to remove a repo in the event that it was not initialized correctly and needs to be reinitialized.

Instead of further bug reports here, I’m going to start filing them at GitHub.

Hi! You may be interested in A preliminary discussion of the “Workswap” protocol . In the presented paper I’ve used an example of a decentralized version control system (the example 2) and I discuss what IPFS-friendly ecosystem can be used instead of an “outside channel” to message about changes. Thanks in advance for any comments and suggestions!