Git is a distributed version control system. Developers should not be coerced to have accounts on a single platform to contribute... Github ahem. And there is no need for additional interfaces other than the one provided by Git. This is also described here: <https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows>.
A Git repository is initialised on the developer's machine. The developer can then either:
1. add remote and push the work (`git remote add [name] [url]`) or 2. runs the Git daemon locally regularly or by arrangement.
Note, it is far simpler to have one highly-available Git server somewhere and all it needs to support is Git or HTTP protocols.
Contributors clone this master and proceed to work on it. When their changes are ready they either:
1. push to their own public remotes and ask the maintainer to pull their work: `git push [remote-name] [branch-name]`
`origin` is the default remote (where original cloned from) and additional remotes added with `git remote add [name] [url]`
2. send a patch to the developer via email, instant message, etc: `git diff > patch-name.patch` 3. even bundle: `git bundle create [bundle name] [git-rev-list-args]`
To get all of the updates from the maintainer(s) or even other contributors: `git fetch --all`. There is no need for ActivityPub or anything special.
The benefit of this decentralised flow, is that it does not require the contributors to have accounts on the original machine. Contributors can use whichever server they favour, or not have one at all. What validates the authenticity of their contribution depends on the protocol used (HTTPS certificate, PGP signature, etc), but a simple checksum in the message can also suffice.