Like onionshare, but for git repos. Instead of hosting your project (only) on github or the like, host it from a swarm of onions that synchronize from each other! ⚠ WORK IN PROGRESS ⚠ some conceptual issues need to be resolved before proceeding

fnordomat fd63041dad conceptual work 4 months ago
docs fd63041dad conceptual work 4 months ago
oniongitshare c497f130e1 will "git remote update" do the trick and get all the refs? 4 months ago
scripts 920c375a1d Globalist becomes oniongitshare 4 months ago
HISTORY.md bfbeb29a8e Create HISTORY.md 4 months ago
ISSUES.md 646822c613 v 0.0.6.2 3 years ago
LICENSE 278040525b Initial commit 4 years ago
README.md b0b31b632a Update README.md 4 months ago
setup.py a97b811402 version 0.1.1 4 months ago

README.md

oniongitshare

Like onionshare, but for git repos.

Distributed githubless repository sharing.

oniongitshare is an attempt to ease the distribution of git repos, away from central points of failure. It makes it easy to host git repos on a distributed swarm instead of just one central server.

Nodes can come and go, and network topology only depends on the peers entries in the nodes' config files. Changes that are merged by one's peers propagate by diffusion.

Future plans: oniongitshare is meant to evolve into an experimental distributed asynchronous collaboration platform. This means issue tracking, etc.

Come join the effort! Try it out!

Usage

Make a new directory and put this in the file ./repo.cfg (when creating a new repository instead of cloning from a peer, the list or indeed the repo.cfg file can remain empty)

[network]
peers = <comma-separated list of onion domain names, with or without the suffix .onion>

For a public repository, no authentication is needed (option -X). In case authentication is used, prepend the secret as follows: somebody:secret@peeroniondomainname.onion

For each shared repo, Globalist will create one .onion service. Note that it is possible to use either bare repos or not-bare repos.

To initialize a new blank repo and an onion address for it (using the current directory to store the config and repo):

oniongitshare -i

To clone a bare repo:

oniongitshare -c ...

To pull once from a bare repo:

oniongitshare -p

There are various other options and parameters, which you can view:

oniongitshare -h

For example, this uses /srv/oniongit/foobar as base directory, starts its own tor process under /srv/oniongit/foobar/tor, communicates with it via the given port, and starts serving:

oniongitshare -T /usr/bin/tor -C 9251 -d /srv/oniongit/foobar

If you initialize a new oniongitshare instance with -i or -c, then an onion address will be generated automatically that you can start handing out immediately. This is persistent and will be re-used anytime you serve from the same directory. No need to configure tor manually!

To install locally

You need the pip3 package setuptools, the rest will be downloaded automatically.

./setup.py install --user

or

torsocks pip3 install -v -e .

To do

Ideas, further work, TODOs:

  • also manage issues and PRs in a companion repo
  • what about the security of the git daemon?
  • make user aware of the importance of signed commits when using software from untrusted sources!
  • support overlay networks other than Tor
  • support version control systems other than git
  • improve UX
  • improve things overall
  • popularize the approach