Making GitHub More Open: Git-backed Wikis
github.com
github.com
One of the reasons I wrote it instead of extending ticgit was that I wanted something entirely independent of any VCS. All stuff I need to get in a readme, though. :-)
I'm curious about using CouchDB, actually. It has similar versioning and replication features to git.
I looked at Fossil for this reason (distibuted src/wiki/issues), but wasn't convinced that it was a real Mercurial or Git replacement for source control, so I gave up for now. Maybe something like Bugs Everywhere will do the trick.
UPDATE: Okay, Scott Chacon just popped into Campfire to school me in git: `git diff-tree --name-only HEAD~10 HEAD`
(By serialization of updates, I mean that, afaik, git can't apply two patches simultaneously, even if they're to completely disjoint sets of files; it has to apply one patch, then the other. That'd be like using a db that requires you to lock the whole db to do any writes. High-volume wikis instead will only lock the rows for the particular page they're editing, so edits to other pages can happen simultaneously without blocking.)
The storage backend for articles is its own mini-scm with a revision table + text storage. There's no reason why a Git based backend would be any worse of a fit for a wiki.
Also, Git-style branches only make sense as alternative branches of the entire repository, which doesn't exist in Wikipedia terms because you can't atomically commit changes to multiple articles together. It's more than possible to have a wiki with branching and cross-page atomic commits--it's even a good idea. But it wouldn't fit Wikipedia. And to get around the atomic commit problem (given the massively concurrent editing that happens on Wikipedia) you'd have to essentially have one Git repository per article, at which point you're probably better off with a different type of backend.
A Git branch is just a different head, but no, those things don't have divergent histories. They're just moving tags. Anyway, semantics aside I meant that they're doing things now that maps effortlessly to a scm.
> Having n branches of a Wikipedia article would be frowned upon
Not if it was well supported. Saying "hey, I modified the article in my own private branch, check it out and merge it if you want" would beat a long argument on a talk page any day.
Branch support doesn't need to entail multiple publicly accessible (as in the stuff normal readers see) versions of articles.
> Also, Git-style branches only make sense as alternative branches of the entire repository
What? No, they'd also make sense even if there was one Git repository per page.
> you'd have to essentially have one Git repository per article, at > which point you're probably better off with a different type of > backend.
We won't know until we try, will we? But there are lots of advantages to using a well understood and simple data format with multiple implementations over a custom schema, but of course a custom format has its own advantages.
That would work more like the current MediaWiki storage backend does, and would probably do delta compression of old revisions more efficiently than the current homebrew code.
It supports Darcs and Mercurial repositories as well as Git.
Actually, the more I read, the more this sounds like Gitit-in-Ruby-rather-than-Haskell.
Defaults to Markdown while support a bunch of other input formats? Check.
Drag and drop diffs? Check.
Git-backed wikis? Check.
Gitit still has more features (apparently there's no search for Github's wiki), but then, it's much much less popular.