921572d053
--- type: change message: Documentation fixes for dehub-remote and git-http-server change_hash: AHgOc66WotsrgX4qfuIWuI1kcI1prxoUvd4L5VKR3onI credentials: - type: pgp_signature pub_key_id: 95C46FA6A41148AC body: iQIzBAABAgAdFiEEJ6tQKp6olvZKJ0lwlcRvpqQRSKwFAl6BI0UACgkQlcRvpqQRSKxcww//fSTl5noQ7ozmlchJjE+Us0RLDK4OCjKriEvF1eaulJQNYEu+d4YJCoCJ0GMQoRvng3zgbal+juHTCZVERCI3Q8wkAk3j6UxYPcuUfzH4DAZmwH7Y9EpwofXeB3ZnVypObQpy0EzlaqIfbk/UAvMuZc+u4c+0wFUR8gBk8rydnpAV4okD6t56U8uUwQtjvF1siCakcCSEHKRx2juDdjwMIA95BebsTZ+SiBgwh2p7sWbRn2+WCqCU0F62esG+1OHeSSkQFF2nI4Wz7t3iZfmMRExsxyfnvyTRlvDuvHNb/3d9hh+7oQmeZ1YcNOwbeWOY7MmO1cTqMbg+oaf3KOj04kyQg8oDPJZfFadW7a9ITzj+O8zVGJZXTDh6A6FVTfTnwx1t04JrkAncnd7/lQTYbRk8RcIrFtzXUkbd9l7eucooINk+sRek4jvGexQZhMjATaC6Qe1lHgYH0raWeAaoFfTXIqPlGPvsCSU8jBivZqvDrXF8u+2sneLKXw2EFmXp5OvzzIP40htZHNTX58Mx7D+09sIxJU3rN1R/bvxidyMW/+EKiP/3JgEW7kXPOc1tRdEMb1rJ6Iufy6mCkNgZXboI1uAr0Q9JB3GB08ocf2JA8mhSpuVWUssF0u3i5R47dmbwxsc3v4V/i8xPoO05b/n5I3TmLqR0ewiXUvCR4J8= account: mediocregopher
102 lines
3.8 KiB
Markdown
102 lines
3.8 KiB
Markdown
# 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.
|
|
|
|
**Plugins**\*: Extend all aspects of dehub functionality via executables managed
|
|
in the repo itself (in the same style as git hooks).
|
|
|
|
## 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 YAML encoded metadata,
|
|
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](https://git-scm.com/book/en/v2/Git-on-the-Server-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](https://github.com/syncthing/syncthing), or
|
|
[NFS](https://en.wikipedia.org/wiki/Network_File_System).
|
|
|
|
* Existing git project hosts like GitHub, Bitbucket, or Keybase.
|
|
|
|
* Decentralized filesystems such as IPFS\*.
|
|
|
|
_\* Planned feature, but 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 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. As
|
|
dehub is still very much in development a high level of git and PGP profiency is
|
|
still required in order to use dehub effectively.
|
|
|
|
TODO
|
|
|
|
## Documentation
|
|
|
|
The [SPEC](/SPEC.html) 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.
|
|
|
|
## Other links
|
|
|
|
[ROADMAP](/ROADMAP.html) 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](/cmd/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](/cmd/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.
|