4 changed files with 392 additions and 23 deletions
@ -0,0 +1,292 @@
@@ -0,0 +1,292 @@
|
||||
<script lang="ts"> |
||||
import Container from '$lib/components/Container.svelte' |
||||
</script> |
||||
|
||||
<Container> |
||||
<div class="prose m-auto mt-8"> |
||||
<h2 class="">About</h2> |
||||
<p> |
||||
gitworkshop.dev and <a href="/ngit">ngit</a> are tools to enable code |
||||
collaboration over nostr created and maintained by |
||||
<a |
||||
class="link-primary" |
||||
href="https://njump.me/nprofile1qy88wumn8ghj7mn0wvhxcmmv9uq3vamnwvaz7tmsw4e8qmr9wfjkccte9e3k7mf0qqs2qzx779ted7af5rt04vzw3l2hpzfgtk0a2pw6t2plaz4d2734vng80y96x" |
||||
>DanConwayDev</a |
||||
> |
||||
</p> |
||||
<p> |
||||
they implement the nip34 draft, which ports the <a |
||||
href="https://git-send-email.io/" |
||||
target="_blank">git-email-patch model</a |
||||
> to nostr, and also have backwards compatible enhancements (nip34+ for shorthand) |
||||
eg. to optionally enable experiences similar to github PRs |
||||
</p> |
||||
<div role="alert" class="max-w-2 alert my-3"> |
||||
<!-- licence MIT https://icon-sets.iconify.design/ph/hands-praying-fill/ --> |
||||
<svg |
||||
class="h-5 w-5 shrink-0 stroke-current" |
||||
xmlns="http://www.w3.org/2000/svg" |
||||
width="1em" |
||||
height="1em" |
||||
viewBox="0 0 256 256" |
||||
><path |
||||
fill="currentColor" |
||||
d="m235.32 180l-36.24-36.25l-36.46-120.29A21.76 21.76 0 0 0 128 12.93a21.76 21.76 0 0 0-34.62 10.53l-36.46 120.3L20.68 180a16 16 0 0 0 0 22.62l32.69 32.69a16 16 0 0 0 22.63 0L124.28 187a40.68 40.68 0 0 0 3.72-4.29a40.68 40.68 0 0 0 3.72 4.29L180 235.32a16 16 0 0 0 22.63 0l32.69-32.69a16 16 0 0 0 0-22.63M120 158.75a23.85 23.85 0 0 1-7 17L88.68 200L56 167.32l13.65-13.66a8 8 0 0 0 2-3.34l37-122.22A5.78 5.78 0 0 1 120 29.78Zm47.44 41.38L143 175.72a23.85 23.85 0 0 1-7-17v-129a5.78 5.78 0 0 1 11.31-1.68l37 122.22a8 8 0 0 0 2 3.34l14.49 14.49Z" |
||||
/></svg |
||||
> |
||||
<div> |
||||
<h4 class="my-1 font-bold">please provide feedback</h4> |
||||
<p class="mb-0 text-sm"> |
||||
via an <a class="link-secondary" href="/repo/ngit">ngit issue</a>, a |
||||
<a class="link-secondary" href="/repo/gitworkshop" |
||||
>gitworkshop.dev issue</a |
||||
> |
||||
or directly to |
||||
<a |
||||
class="link-primary" |
||||
href="https://njump.me/nprofile1qy88wumn8ghj7mn0wvhxcmmv9uq3vamnwvaz7tmsw4e8qmr9wfjkccte9e3k7mf0qqs2qzx779ted7af5rt04vzw3l2hpzfgtk0a2pw6t2plaz4d2734vng80y96x" |
||||
>DanConwayDev</a |
||||
> on nostr |
||||
</p> |
||||
<p class="mt-1 text-sm"> |
||||
the tools are in alpha and your feedback makes them better |
||||
</p> |
||||
</div> |
||||
</div> |
||||
<p> |
||||
should we focus on improving the PR-like experiences or remove them in |
||||
favor of traditional patch-model patch application? please let use know! |
||||
</p> |
||||
<h3>The Need</h3> |
||||
|
||||
<p> |
||||
git is decentralized version control system, yet most freedom tech |
||||
projects use centralized walled gardens on top of git as a social and |
||||
collaboration layer for code changes |
||||
</p> |
||||
|
||||
<p> |
||||
by far the most popular, Microsoft's GitHub, has a history of banning |
||||
accounts and repositories without warning and this creates a real risk of |
||||
disruption for important projects like bitcoin-core |
||||
</p> |
||||
|
||||
<p> |
||||
whilst alternatives do exist, nearly all of them involve moving to an |
||||
another walled garden, either controlled by a different centralized |
||||
guardian, or self-hosted which is less suitable for a anarchic project |
||||
</p> |
||||
<p> |
||||
some projects use patches-over-email: an alternative and decentralized |
||||
approach that pre-dates GitHub. despite its antiquated tooling, it has a |
||||
very smooth and effective workflow for those that use it regularly and has |
||||
proven to scale to very large projects like the linux kernal. |
||||
</p> |
||||
|
||||
<p> |
||||
ultimately, GitHub remains by far the most popular choice for freedom tech |
||||
projects. The accessible UX, convenience, inter-connected tooling and |
||||
network effect are just a few of the reasons |
||||
</p> |
||||
|
||||
<h3>The Opportunity</h3> |
||||
|
||||
<p> |
||||
nostr is the ideal permissionless, decentralized and censorship resistant |
||||
social layer for the anarchic FOSS code collaboration use case. |
||||
</p> |
||||
|
||||
<p> |
||||
patch-over-email, with its proven scalability, lays the foundation for |
||||
providing this social layer without having to re-invent the complexities |
||||
of creating an efficient alternative to git server over nostr, or use |
||||
specialized relays. |
||||
</p> |
||||
|
||||
<p> |
||||
there is an opportunity to build modern tooling that compete from a UX |
||||
perspective and have the additional benefit of integrating into a wider |
||||
social ecosystem. |
||||
</p> |
||||
|
||||
<h3>The Philosophy</h3> |
||||
|
||||
<p>there is innovation happening with git and nostr in a few places</p> |
||||
|
||||
<p>the philosophy of ngit and gitworkshop.dev can be summed up as:</p> |
||||
<ul> |
||||
<li><strong>let git be git</strong> - don't try and reinvent git</li> |
||||
<li> |
||||
<strong>let nostr be nostr</strong> - leverage the benefits of nostr |
||||
</li> |
||||
<li> |
||||
<strong>learn from the success of others</strong> - eg. the PR model has |
||||
proved to be very popular. how can we enable similar experiences with patches? |
||||
</li> |
||||
</ul> |
||||
|
||||
<h3>The Protocol</h3> |
||||
|
||||
<p> |
||||
<strong>nip34</strong> is draft nip (nostr protocol) for sending git patches |
||||
over nostr, similar to how patches are sent via email using `git format-patch` |
||||
and `git send-email`. The patches-over-email model has proven to be a robust |
||||
workflow that is used extensively; including in very large project such as |
||||
the linux kernel |
||||
</p> |
||||
|
||||
<p> |
||||
ngit and gitworkshop.dev are experimenting with some additional, backwards |
||||
compatible features (<strong>nip34+</strong> for shorthand), some of which |
||||
may make it into the nip34 specification: |
||||
</p> |
||||
|
||||
<ul> |
||||
<li> |
||||
patches optionally managed as branches, similar to GitHub PRs |
||||
<ul> |
||||
<li> |
||||
amendments to a proposal can be made by pushing a commit using <span |
||||
class="rounded bg-neutral p-2 font-mono" |
||||
><span class="py-5">ngit push</span></span |
||||
> |
||||
rather than issuing a complete revision, which modifies the original |
||||
commits (still possible with |
||||
<span class="rounded bg-neutral p-2 font-mono" |
||||
><span class="py-5">ngit push --force</span></span |
||||
> |
||||
or |
||||
<span class="rounded bg-neutral p-2 font-mono" |
||||
><span class="py-5" |
||||
>ngit send --in-reply-to nevent123...</span |
||||
></span |
||||
>) |
||||
</li> |
||||
<li> |
||||
proposal can be checked out as a branch which reflects the repo |
||||
state when the proposal was generated with pgp signatures intact |
||||
<ul> |
||||
<li> |
||||
there is less friction for reviewers with this model as they |
||||
don't have to deal with resolving conflicts as patches are |
||||
applied to the tip of the main branch. whereas maintainers, who |
||||
might be considering accepting the proposal right away, may find |
||||
it preferable to resolves conflicts as part of their review |
||||
</li> |
||||
</ul> |
||||
</li> |
||||
<li>author pgp signatures and original commit_ids can be retained</li> |
||||
<li> |
||||
features can be 'merged' using a 'merge commit' so that a series of |
||||
feature commits can remain distinct rather than each applied to the |
||||
main branch directly. |
||||
</li> |
||||
</ul> |
||||
</li> |
||||
<li> |
||||
multiple maintainers for a repository and a pathway to smoothly |
||||
transition maintainership when a maintainer moves on |
||||
</li> |
||||
<li> |
||||
ensure that user who have already cloned the repository dont get scammed |
||||
by someone else issuing a repository event, pretending to be the |
||||
maintainer, and directing users to a malicious git server |
||||
<ul> |
||||
<li> |
||||
<span class="rounded bg-neutral p-2 font-mono" |
||||
><span class="py-5">ngit init</span></span |
||||
> |
||||
creates an optional |
||||
<span class="bg-base-200 p-2 font-mono">maintainers.yaml</span> file |
||||
in the root of your repo that lists the authorized maintainers and |
||||
desired relays |
||||
<ul> |
||||
<li> |
||||
a fallback is used to prevent contributors from needing to know |
||||
the event id if a maintainer is not ready to add a nostr |
||||
specific file to the repository. ngit tags the earliest unique |
||||
commit id in the repo event. ngit defaults to uses the most |
||||
recent repo event it finds with this tag. it also tags all |
||||
proposals with this id and when listing patches, also includes |
||||
patches sent to other repo events with this id as it is clearly |
||||
intended for the same repo. |
||||
</li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
|
||||
<h3>FAQs</h3> |
||||
|
||||
<h4> |
||||
Your not replacing GitHub, your still using it GitHub as a git server. |
||||
</h4> |
||||
<p> |
||||
it is trivial to switch git servers as they all operate the exact same |
||||
protocol. changing the social layer requires a social and UX shift which |
||||
can be challenging, disruptive and timeconsuming. |
||||
</p> |
||||
|
||||
<h4>are you trying to replicate / replace Github?</h4> |
||||
|
||||
<p> |
||||
no. GitHub is a very large product with a lot of features which don't meet |
||||
the goal of freedom tech code collaboration. |
||||
</p> |
||||
<p> |
||||
we are specifically looking to address the needs of anarchic FOSS freedom |
||||
tech products |
||||
</p> |
||||
|
||||
<h3>Enhancements</h3> |
||||
|
||||
<p> |
||||
got ideas? please share them and lets explore as a community. here's three |
||||
to get you started: |
||||
</p> |
||||
<ul> |
||||
<li>DVM to run CI pipelines? <i>yes please</i></li> |
||||
<li> |
||||
services to enable merge directly from nostr events. <i>hello!</i> |
||||
</li> |
||||
<li> |
||||
repo event showing authoritive tip of main branch and referencing |
||||
multiple git_server mirros? <i>Hell yeah!</i> |
||||
</li> |
||||
</ul> |
||||
|
||||
<div role="alert" class="max-w-2 alert my-3"> |
||||
<!-- licence MIT https://icon-sets.iconify.design/ph/hands-praying-fill/ --> |
||||
<svg |
||||
class="h-5 w-5 shrink-0 stroke-current" |
||||
xmlns="http://www.w3.org/2000/svg" |
||||
width="1em" |
||||
height="1em" |
||||
viewBox="0 0 256 256" |
||||
><path |
||||
fill="currentColor" |
||||
d="m235.32 180l-36.24-36.25l-36.46-120.29A21.76 21.76 0 0 0 128 12.93a21.76 21.76 0 0 0-34.62 10.53l-36.46 120.3L20.68 180a16 16 0 0 0 0 22.62l32.69 32.69a16 16 0 0 0 22.63 0L124.28 187a40.68 40.68 0 0 0 3.72-4.29a40.68 40.68 0 0 0 3.72 4.29L180 235.32a16 16 0 0 0 22.63 0l32.69-32.69a16 16 0 0 0 0-22.63M120 158.75a23.85 23.85 0 0 1-7 17L88.68 200L56 167.32l13.65-13.66a8 8 0 0 0 2-3.34l37-122.22A5.78 5.78 0 0 1 120 29.78Zm47.44 41.38L143 175.72a23.85 23.85 0 0 1-7-17v-129a5.78 5.78 0 0 1 11.31-1.68l37 122.22a8 8 0 0 0 2 3.34l14.49 14.49Z" |
||||
/></svg |
||||
> |
||||
<div> |
||||
<h4 class="my-1 font-bold">please provide feedback</h4> |
||||
<p class="mb-0 text-sm"> |
||||
via an <a class="link-secondary" href="/repo/ngit">ngit issue</a>, a |
||||
<a class="link-secondary" href="/repo/gitworkshop" |
||||
>gitworkshop.dev issue</a |
||||
> |
||||
or directly to |
||||
<a |
||||
class="link-primary" |
||||
href="https://njump.me/nprofile1qy88wumn8ghj7mn0wvhxcmmv9uq3vamnwvaz7tmsw4e8qmr9wfjkccte9e3k7mf0qqs2qzx779ted7af5rt04vzw3l2hpzfgtk0a2pw6t2plaz4d2734vng80y96x" |
||||
>DanConwayDev</a |
||||
> on nostr |
||||
</p> |
||||
<p class="mt-1 text-sm"> |
||||
the tools are in alpha and your feedback makes them better |
||||
</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</Container> |
||||
Loading…
Reference in new issue