A read-only clone of the dehub project, for until dehub.dev can be brought back online.
Go to file
mediocregopher cefe5633e3 Remove reference to Tutorial 4 from README
---
type: change
description: Remove reference to Tutorial 4 from README
fingerprint: AAZ6mXb8pcXY9AtOk/Be3fztonzrCs3Zy5DZNdST9uNI
credentials:
- type: pgp_signature
  pub_key_id: 95C46FA6A41148AC
  body: iQIzBAABAgAdFiEEJ6tQKp6olvZKJ0lwlcRvpqQRSKwFAl9a7cIACgkQlcRvpqQRSKzdHA/9F+zTI8f2Hxhhq5I9M8DOHPlRn4LRKuowK2dH417PmpqKUTHmTcgjK/4p8Iw9LhyQ0CMJYfbZNHPXzni/ThgGXdytACCp9uws5tFCLlktAr+4teMIRsDf8H2ZzUi9VLJAh8U9p7ZyTvhSbxOZLcetLcDWj4Su6/lD/J67bKHmyFbtRk3poV45ivNh5IzrUsN3r0wcNQmSxf44bDz5S+I219pC4lKhBweR1ps8MHij0kaRq2HLRr3hCEQBTEznR9vdpB6owJ4jnzydWRyJf7e5CBqFuaERFoSJbcMONb/J72C46Fu2CzOH9JntCcmpWCK8JYlrQTchf1ZIkhHbidcx0z3Aitb8j+WGZUSEwrdsBEKMEuV30wTNSE6k4s/srcZuo4Wu9EbXg384M9n5/z3z+YECWom6SmRz27iru5aNHzbs3mERs/k47fNIshZFhQo6H6wbKyGw6URKQfK1tLuucmxCQ0LkNp6SYT+ibxTg9F1U6WqChHcGNn/d/zbLz+XcZyFJatNSqNRoZq8oi0/USqkCoEJgHZzwEh6FjVHHqdd8J9A4x6dVe/F/20qPRCJKLV80XODzl7LLcNNcbLzvigobXAzhtb43NxSHCSFCr4SAiwfEsQD+u7jq2SCdzNYwxyz2JPxFiozV9EQiqaKOyQF1h6ZZb7SllrEBkmNhV/E=
  account: mediocregopher
2020-09-10 21:23:52 -06:00
.dehub Refactor access controls to support multiple branches 2020-02-29 13:09:19 -07:00
accessctl Rework how FilterFilesChanged works 2020-05-09 18:00:00 -06:00
cmd Switch markdown generator in git-http-server 2020-05-17 21:56:27 -06:00
docs update ROADMAP, project is publicized 2020-06-01 13:09:36 -06:00
fs Initial commit, can create master commit and verify previous master commits 2020-02-15 15:13:50 -07:00
sigcred properly check for gpg not returning a matching pgp key 2020-05-02 14:09:33 -06:00
typeobj Fix a bug in typeobj when a type field's name is the same as one of its inner... 2020-04-30 15:22:27 -06:00
yamlutil Completely refactor naming of everything, in light of new SPEC 2020-04-26 14:23:10 -06:00
.gitignore Switch markdown generator in git-http-server 2020-05-17 21:56:27 -06:00
commit.go Fix a bug in typeobj when a type field's name is the same as one of its inner... 2020-04-30 15:22:27 -06:00
config.go Completely refactor naming of everything, in light of new SPEC 2020-04-26 14:23:10 -06:00
diff.go refactor how file changes and hashes are handled, and add tests for hashes 2020-04-18 13:26:32 -06:00
Dockerfile.dehub-remote Support non-fastforward commits 2020-04-24 13:33:33 -06:00
fingerprint_test.go Completely refactor naming of everything, in light of new SPEC 2020-04-26 14:23:10 -06:00
fingerprint.go Completely refactor naming of everything, in light of new SPEC 2020-04-26 14:23:10 -06:00
go.mod Give the project a proper root, dehub.dev/src/dehub.git 2020-03-29 15:16:36 -06:00
go.sum Initial commit, can create master commit and verify previous master commits 2020-02-15 15:13:50 -07:00
payload_change_test.go Completely refactor naming of everything, in light of new SPEC 2020-04-26 14:23:10 -06:00
payload_change.go add change_description field to credential commits 2020-05-13 22:19:04 -06:00
payload_comment.go Remove Payload.MessageHead error return and simplify implementations 2020-05-11 22:09:01 -06:00
payload_credential_test.go Completely refactor naming of everything, in light of new SPEC 2020-04-26 14:23:10 -06:00
payload_credential.go add change_description field to credential commits 2020-05-13 22:19:04 -06:00
payload_test.go Fix a bug which prevented force pushing to a previous commit in a branch 2020-05-02 15:28:02 -06:00
payload.go add change_description field to credential commits 2020-05-13 22:19:04 -06:00
project_test.go Completely refactor naming of everything, in light of new SPEC 2020-04-26 14:23:10 -06:00
project.go change pre-receive hook from flag to sub-command 2020-04-26 14:33:54 -06:00
README.md Remove reference to Tutorial 4 from README 2020-09-10 21:23:52 -06:00

dehub

dehub aims to provide all the features of a git hosting platform, but without the hosting part. These features include:

User management - Authentication that commits come from the user they say they do, and fine-grained control over which users can do what.

Pull requests and issues - Facilitation of discussion via comment commits, and fine-grained (down to the file level) sign-off requirements.

Tags and releases - Mark releases in the repo itself, and provide immutable and verifiable git tags so there's never any funny business. (Not yet implemented)

Plugins: Extend all aspects of dehub functionality via executables managed in the repo itself (in the same style as git hooks). (Not yet implemented)

Key Concepts

To implement these features, dehub combines two key concepts:

First, repo configuration is defined in the repo itself. A file called .dehub/config.yml contains all information related to user accounts, their pgp keys, branch and file level access controls, and more. Every commit must adhere to the configuration of its parent in order to be considered verifiable. The configuration file is committed to the repo like any other file would be, and so is even able to define the access controls on itself.

Second, the commit message of every dehub commit contains a YAML encoded payload, which allows dehub to extend git and provide multiple commit types, each with its own capabilities and restrictions. Some example dehub commit types are change commits, comment commits, and credential commits.

Infrastructure (or lack thereof)

Because a dehub project is entirely housed within a traditional git project, which is merely a collection of files, any existing git or network filesystem infrastructure can be used to host any dehub project:

  • The most barebones git daemon server (with a simple pre-receive hook set up).

  • A remote SSH endpoint.

  • A mailing list (aka the old school way).

  • Network file syncing utilities such as dropbox, syncthing, or NFS.

  • Existing git project hosts like GitHub, Bitbucket, or Keybase.

  • Decentralized filesystems such as IPFS. (Not yet implemented)

Getting Started

The dehub project itself can be found by cloning https://dehub.dev/src/dehub.git.

Installation of the dehub tool is currently done via the go get command:

go get -u -v dehub.dev/src/dehub.git/cmd/dehub

This will install the binary to your $GOBIN path, which you'll want to put in your $PATH. Run go env if you're not sure where your $GOBIN is.

Once installed, running dehub -h should show you the help output of the command. You can continue on to the tutorials if you're not sure where to go from here.

Tutorials

The following tutorials will guide you through the basic usage of dehub. Note that dehub is in the infancy of its development, and so a certain level of profiency with git and PGP is required in order to follow these tutorials.

Documentation

The SPEC is the best place to see every possible nitty-gritty detail of how dehub works. It attempts to be both human-readable and exhaustive in its coverage.

ROADMAP documents upcoming features and other work required on the project. If you're looking to contribute, this is a great place to start.

dehub-remote is a simple docker image which can be used to host a remote dehub project over http(s). The endpoint will automatically verify all pushed commits.

git-http-server is a small server which makes a git repo's file tree available via http. It will automatically render markdown files to html as well. git-http-server is used to render dehub's website.