Workshop: Collaborative git without GitHub (pijul mirror)
#+title: Git without GitHub
#+subtitle: A smol workshop
#+author: Jez Cope
#+date: 3 September 2025
#+options: num:t timestamp:nil toc:nil
#+options: reveal_history:t
#+reveal_root: reveal.js-4.6.0
#+reveal_theme: dracula
#+reveal_trans: fade
#+reveal_extra_css: custom.css
#+export_file_name: index.html
#+exclude_tags: noexport draft
#+columns: %40ITEM %Duration

* Overview
:PROPERTIES:
:CUSTOM_ID: overview
:Duration: 5 minutes
:END:
1. Why bother with alternatives
2. What's possible
3. Strategies

** Please note...
This workshop is in *beta*!

Any and all feedback welcome (but be kind 😅)

# ** Ground rules
# :PROPERTIES:
# :CUSTOM_ID: ground-rules
# :END:
#+reveal:split

We are /not/ here to bash anyone's choice of tool, workflow, knowledge, experience, etc

We are all learning: /please be generous & curious/


** Recurse Center's 4 rules
:PROPERTIES:
:CUSTOM_ID: recurse-centers-4-rules
:END:

1. No well-actually's
2. No feigned surprise
3. No backseat driving
4. No subtle -isms

[[https://www.recurse.com/social-rules]]

** Icebreaker
:PROPERTIES:
:Duration: 10 minutes
:END:

Your name

Your favourite comfort food

One thing you hope to learn today

* Why consider alternatives to GitHub?
** Monocultures are fragile
** Git is distributed by design
** It's good to have backup options

* A brief (and probably wrong) history of (mostly) open source version control

#+reveal: split
#+attr_html: :style width: 70%;
[[file:PCR-896.jpg]]
#+reveal: split
#+attr_html: :style width: 70%;
[[file:PCR-896-routing.jpg]]
#+reveal: split
#+attr_html: :style width: 70%;
[[file:First_Computer_Bug_1945.jpg]]
#+reveal: split
#+attr_html: :style width: 70%;
[[file:SAR-L-1D-03.jpg]]
#+reveal: split
Images: [[https://www.ibiblio.org/apollo/links2.html#PcrsPcns&gsc.tab=0][Virtual AGC Document Library]]/[[https://commons.wikimedia.org/wiki/File:First_Computer_Bug,_1945.jpg][Wikimedia]]

** In the beginning there was Unix

Shared access to files

But what if *two people*\\
edit the *same file*\\
at the *same time*...

** 1982: Revision Control System (RCS)

Works through file locking:\\
check out -> edit -> check in

Per-file history (no security)

No concept of a "repository"

** 1986: Concurrent Version System (CVS)

A front-end to RCS

Server/client model

Repositories!

** 2000: Subversion

Many improvements on CVS

Atomic commits

Branch and directory tracking

HTTP/WebDAV support

** Mid-2000s: The Cambrian Explosion!

Distributed version control as we know it

Darcs released in 2003!\\
Bazaar, Git, Mercurial in 2005\\
Fossil in 2006

Every working copy is a first-class repository

Push from/pull to multiple repositories

Work offline & sync changes later

** Forges

#+attr_reveal: :frag (fade)
- Sourceforge (CVS, later Subversion, Bazaar, Mercurial, Git)
- GitHub, Gitorious, GitLab, Bitbucket and many more (during the Cambrian Explosion)
- Network effects kick in, GitHub "wins"
- Microsoft purchases GitHub, invests heavily in differentiating features (i.e. vendor lock-in)
- /...time passes.../
- GitHub marketed as "the world’s most widely adopted AI-powered developer platform" 💀

* Your experiences

*5 minutes* in breakout rooms

- What do you use GitHub for?
  - If you /don't/ use it: what do you use instead?
- What features do you use?
- What would you miss most/least if it wasn't there?

#+reveal: split data-background-iframe="https://wall.sli.do/event/e7o7sMfEg4X3wsL58HQD2j"

* Strategies

** Stick with it... for now

** Replace wholesale

** Replace piecemeal

** Augment

** Back to basics

** All of the above?

- Stick with it... for now
- Replace wholesale
- Replace piecemeal
- Augment
- Back to basics

* Intermission

* Options

** Before you start: make backups

- ~git clone --mirror~
- [[https://docs.github.com/en/repositories/archiving-a-github-repository/backing-up-a-repository][GitHub API or CLI]] 
- [[https://pypi.org/project/github-backup/][ ~python-github-backup~ script]]
- Zenodo & figshare integrations

** Alternative forges

- GitLab: https://gitlab.com
- Bitbucket: https://bitbucket.org
- Codeberg: https://codeberg.org
  - [[https://codeberg.org/forgejo-contrib/delightful-forgejo#public-instances][Many other instances]] available
- Sourcehut: https://sr.ht
- Azure DevOps

** Serverless or self-hosted

- A shared folder!: Access via network share or SSH
- Patches by email: ~git send-email~
- Static web site: Use ~git update-server-info~ & any web server
- Gitolite: Minimal ssh-based setup
- Radicle: Peer to peer
- Forgejo, Gitea, Gogs, Kallithea: Full self-hostable web forges
- Soft Serve: TUI-style minimalist server

** Individual pieces

N.B. these lists are *not* authoritative or complete

*** Issue tracking

- Minimal
  - Mailing lists
  - In-repository management e.g. trackdown
- Open source
  - Bugzilla
  - Trac
  - Request Tracker
  - Redmine
- Commercial
  - Jira
  - Trello

*** Code review

- Minimal
  - Mailing lists
- Open source
  - Gerrit
- Commercial
  - /Sooooo many.../

*** Continuous Integration/Deployment

- Minimal
  - Git ~pre-commit~ or ~post-commit~ hooks
- Open source
  - Woodpecker CI
  - Circle CI
  - Jenkins
- Commercial
  - Travis CI
  - Netlify
- Honourable mention
  - Radicle CI

*** Static web hosting

- Minimal
  - Your internet service provider
  - Your employer/institution
- Open source
  - Apache httpd
  - nginx
  - lighttpd
- Commercial
  - /Sooooo many.../

*** Project management

- Minimal
  - Plain text files
  - Taskjuggler, todo.txt, org-mode
  - Whiteboard & sticky notes
- Open source
  - Launchpad
  - Redmine
- Commercial
  - /Sooooo many.../

*** Wiki

- Minimal
  - Text files in version control
  - Tiddlywiki
- Open source
  - Mediawiki
  - DokuWiki
  - MoinMoin
- Commercial
  - /Sooooo many.../

* Discussion

10 minutes in breakout rooms



#+reveal: split data-background-iframe="https://app.sli.do/event/e7o7sMfEg4X3wsL58HQD2j/embed/polls/4be1e96e-a54a-415a-8d5d-bba9bdcc4b0a"

* A final thought

- *Easygit:* Alternative frontend to git
- *Mercurial:* Python-based, very stable and flexible, can clone/pull/push git repositories
- *Breezy:* Python-based, successor to Bazaar, can work directly on git working copies
- *Fossil:* Integrates many forge-features directly
- *Darcs:* Haskell-based, stores patches instead of snapshots
- *Pijul:* Rust-based, under development, also patch-focused

#+reveal: split data-background-iframe="https://wall.sli.do/event/e7o7sMfEg4X3wsL58HQD2j/embed/polls/41b59695-f671-4173-86e1-9af125016cc5"