Oddbean new post about | logout
 The place where most of the people who say they want to use Nostr alternatives actually hang out.

It's a myth that the devs who aren't talking on Nostr are all in complete silent isolation, like monks in a scriptorium. They're chatting someplace else, is all. 
 Telegram. Signal. Simplex. 
GitHub … maybe about issues and PRs, but not much “chit chat”… 
 And discord smh 
 You forgot Slack

Issues and PRs should be on Nostr. There's no excuse not to move them, now that we have stuff like GitWorkshop and then the chat would move there, too, as devs replied to proposals and issues. 
 Really need to look into this…. 👀 
 Also, the tools simply won't improve, if nobody is using them, and the developers will eventually abandon them as failed attempts.

I feel like there's three or four of us over there, for months, now. So empty you could hear an echo. We can't expect him to keep putting in the hours on improving and expanding that, if everyone stays on GitHub.

The attention is going to end up going where the people are. 
 Patience…. and then all at once, it happens.  
 Maybe, but the next time I see someone complain that some Bitcoiner is still posting on Twitter, all #NostrOnly I'm going to be like, "How's that GitHub going, bro?" 
 running my own git-http thing on my vps off my mini pc behind my workstation with a cheap-sauce vps in romania doing the routing 
 Is there a github-like stack on nostr people can use today? I looked at git str but it points to a repo over DNS and uses nostr for patches. What if I want my repo native on nostr, like a bloom address for the initial repo? 
 Do you mean you want the blob object embedded in the events and no git?

This is what I use. I guess that's like git str, if it uses the same patch NIP.
https://gitworkshop.dev/r/naddr1qvzqqqrhnypzpgqgmmc409hm4xsdd74sf68a2uyf9pwel4g9mfdg8l5244t6x4jdqq9kw6t5wahhy6mndphhqucjqc6/issues/note1ck4lyddznk30vku5dj280nm24dlah3y9fq0s3l607mekaw90mzvshn6amg 
 Here's my proposal, from this morning.

nostr:nevent1qqsf4jtaw7fwp4y5mqkvddyv695dzp3900f2vg4307jrx093ag4xm2qpp4mhxue69uhkummn9ekx7mqzyr7jprhgeregx7q2j4fgjmjgy0xfm34l63pqvwyf2acsd9q0mynuzrfpk7s 
 Am I on track with understanding how this works?

When you do a (equivalent of) `git init` in a folder, the `.git/config` will have the relays in it, and when you do a (equivalent of) `git push`, it will publish an event that is a patch file that creates all the initially git committed files? And then all future patches to this  would be events that reference a predecessor event starting with this initial event? When you do the (equivalent of) `git clone`, it will take the initial event and all its successors as patches to reconstruct the tree in a local folder? 
 If you want to clone a git repo, just use 'git clone'. Also, pulling and pushing to origin is still over git, not ngit.

You make a local commit and type 'ngit send' and it sends that commit (you can select multiple commits) to the relays as a proposal linked to the repo event.
Anyone else can comment on it and then anyone can pull it into their local clone and then merge it to origin (if they have access to origin). You can also have the commits in branches.

init is like this
nostr:nevent1qvzqqqqqqypzphtxf40yq9jr82xdd8cqtts5szqyx5tcndvaukhsvfmduetr85ceqqsp83zmjtzj2pmntyvazdkjwmq6y6jpt04s75qmja0vp55qn0sulps3qnkx0 
 You can also push updates to a proposal you have made. If you had a typo, or whatever. Just make a new commit and then ngit push. 
 i am going to build linux amd64 binaries and fire up my bittorrent and post the magnet for it

this is important: i should not need to install rust or use cargo to use nostr git, bittorrent clients are everywhere, inside brave browsers, every linux distro has a dozen 
 You only need to install rust ifnyoubwant tonbuild from sourcr. You can just download the binaries listed on gitworkshop.dev/ngit

I think I'll add zapstore style releases as nostr events and host the binaries via blossom.

I'm also happy to use a magnet link. 
 i didn't see the links on the website tho, only instructions to get it with cargo 
 I also didn't. Went the cargo route and it took over 2 hours to download. And then another 2 hours for the update. 
 i already had it installed for the shitcoinery in replicatr repo and maybe i had it there before that for gossip

i don't mind really because i have 64gb 12 core processor fast NVMe but it used to be a pain on a 20gb 8 core with slow SSD (laptop), not as bad as C++ tho 
 yeah, to contrast with a 125mb download, and a short procedure to unpack it and add to the environment that anyone can do with Go, and then after that builds everything in under 20 seconds first time out most of the time 
 The prototype I made worked like that but in practice it is quite inefficent and problematic for large repositories with lots of commits.
Its works well for a nostr event to point to one or more git servers to fetch the latest code and exchange proposes patches and related discussion in nostr events.
`ngit send` to share a proposal (patch)
`ngit list` to review existing proposals 
 Is proposal like a synonym for pull request? Where open PR is referring to all the stuff surrounding an unmerged branch?

If there is a list of git servers instead of just one, and you do `ngit init` and `ngit push`, does it create the repo on all the servers? That to me would be the git equivalent of publishing to relays 
 The git servers are only a reference for where someone can get a clone. ngit only publishes Nostr events.

A pull request is directed at a specific repo. A proposal is just a published commit that any repo can pull.
 
 so the protocol doesn't actually cache the diffs in events, only announces them?

oh 🙁  or am i misunderstanding?

do you have to pull the thing from there and then ngit can update from events it finds that populate the tree or? 
 Y'all are starting to ask questions that have me feeling like I need to refer you to my manager. 😂

Ask DanConwayDev 
 well, i would be able to build something out that hosts actual sites and listens to relays and pulls updates, i was just kinda hoping that the events were the content itself 
 Its only the diffs of new proposed changes that get embedded in nostr events. These are proposals which could be submitted by anyone.

To get the full history of commits, use a git server listed in the repository announcement event. 
 A proposal can act just like a PR.
If you run `ngit list` and checkout a proposal it will create a local branch for you.
The author can add extra commits using `ngit push` 
you can run `ngit pull` from local branch and it will pull these extra commits.
 
 `ngit init` doesnt create anything on any git server but just acts as a pointer.
It assumes you have already pushed the repository to those servers.

creates a repo event.