Skip to content

A lazygit-style terminal UI for Subversion

Install
curl -fsSL https://raw.githubusercontent.com/bapatchirag/revision/main/install.sh | sh

Grabs the latest release build for your platform (see Installation). You need the svn client on your PATH.

Panels, not commands

Status, Files, Log and Shelf down the left, a Main detail view beside them and the svn Command Log beneath. Switch with the number keys or tab. The panels

Staging that SVN understands

space stages a file or a whole directory subtree into a changelist — a git-index-like workflow, built out of plain svn changelist. Staging & commit

Named changelists

Group the staged set into named lists, drill into any of them in a tabbed view, and commit one as a unit. Changelists

Diffs you can work in

Additions, deletions and hunk headers each tinted. Search in place, read it side by side with s, or write it to a file with w. Working with diffs

Filter anything

/ filters the focused panel, with rev:, user:, state: and cl: parameters for the ones that support them. Filtering & searching

Update without surprises

Update to HEAD or to any revision picked out of the Log panel. Conflicts are spelled out before you confirm. Updating the working copy

Resolve it side by side

m lays a conflict — or a hunk a patch could not place — out two panes wide, with a key to take either side, both, or your editor. Resolving conflicts

Open it in your editor

Hand the selected file to vim, nvim, nano, or VS Code — which opens the real file in the window you are already in. Opening files in an editor

Themes and settings, in app

Six colour schemes and an in-app settings editor, written back to your config file. Themes · Configuration

These are the app’s own rendered output, read straight from its golden tests — selectable text, not screenshots.

╭─ [1] Status ─────────────────╮╭─ [0] Diff ───────────────────────────────────╮
│Root      /home/alice/work/wc ││changelist: (staged)                          │
│Source    /home/alice/work/wc ││                                              │
│CWD       /home/alice/work/wc ││Loading diff…                                 │
│Branch    trunk               ││                                              │
│Revision  r42                 ││                                              │
│HEAD      r50                 ││                                              │
╰──────────────────────────────╯│                                              │
╭─ [2] ─ Changes ─── Changelist╮│                                              │
│   ▾ /                        ││                                              │
│>    ● A added.txt            ││                                              │
│       M modified.go          ││                                              │
│       D gone.txt             ││                                              │
╰────────────────── 1 of 3 ────╯│                                              │
╭─ [3] Log ────────────────────╮│                                              │
│  Rev    Author Message       ││                                              │
│     r50                      │╰──────────────────────────────────────────────╯
│   * r42                      │╭─ Command Log ────────────────────────────────╮
│                              ││No svn commands run yet.                      │
╰────────────── 1 of 2 · 1 ────╯│                                              │
╭─ [4] Shelf ──────────────────╮│                                              │
│                              ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · a add · v pick · n changelist · c commit · r revert · d delete · …
The default layout.
╭─ [1] Status ─────────────────╮╭─ [0] Diff ───────────────────────────────────╮
│Root      /home/alice/work/wc ││Index: src/a.go                              ┃│
│S╭─ Side-by-side diff — src/a.go ───────────────────────────────────────────╮┃│
│C│revision 42                         │working copy                         │┃│
│B│────────────────────────────────────┼─────────────────────────────────────│┃│
│R│@@ -1,5 +1,6 @@                                                           │┃│
│ │  1  package main                   │  1  package main                    │┃│
╰─│  2                                 │  2                                  │┃│
╭─│  3 -import "fmt"                   │  3 +import (                        │┃│
│ │                                    │  4 +    "fmt"                       │┃│
│ │                                    │  5 +)                               │┃│
│>│  4                                 │  6                                  │││
│ │  5  func main() {                  │  7  func main() {                   │││
╰─│@@ -20,3 +21,2 @@                                                         │││
╭─│ 20      done()                     │ 21      done()                      │││
│ │ 21 -    cleanup()                  │                                     │ │
│ │ 22  }                              │ 22  }                               │─╯
│ │                                    │                                     │─╮
│ │                                    │                                     │ │
╰─│                                    │                                     │ │
╭─│                                    │                                     │ │
│ ╰────────────────────────── src/a.go · 1-12 of 12 · e edit · esc close ────╯ │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · a add · v pick · n changelist · c commit · r revert · d delete · …
A diff read side by side.
╭─ [1] Status ─────────────────╮╭─ [0] Diff ───────────────────────────────────╮
│Root      /home/alice/work/wc ││changelist: (staged)                          │
│Source    /home/alice/work/wc ││                                              │
│CWD       /home/alice/work/wc ││Loading diff…                                 │
│Branch    trunk               ││                                              │
│Revision  r42                 ││                                              │
│                              ││                                              │
╰──────────────────────────────╯│                                              │
╭─ [2] ─ Changes ─── Changelist╮│                                              │
│>  ◆ feature-x (1)            ││                                              │
│   ◆ (staged) (1)             ││                                              │
│   ◆ (unstaged) (1)           ││                                              │
│                              ││                                              │
╰────────────────── 1 of 3 ────╯│                                              │
╭─ [3] Log ────────────────────╮│                                              │
│  Rev Author Message          ││                                              │
│                              │╰──────────────────────────────────────────────╯
│                              │╭─ Command Log ────────────────────────────────╮
│                              ││No svn commands run yet.                      │
╰──────────────────────────────╯│                                              │
╭─ [4] Shelf ──────────────────╮│                                              │
│                              ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · a add · v pick · n changelist · c commit · r revert · d delete · …
Named changelists, in a tabbed view.
╭─ [1] Status ─────────────────╮╭─ [0] Diff ───────────────────────────────────╮
│Root      /home/alice/work/wc ││changelist: (staged)                          │
│Source    /home/alice/work/wc ││                                              │
│CWD       /home/alice/work/wc ││Loading diff…                                 │
│Branch    trunk               ││                                              │
│Revision  r42                 ││                                              │
│               ╭─ Commit message ─────────────────────────────╮               │
╰───────────────│Fix status parsing                            │               │
╭─ [2] ─ Changes│                                              │               │
│   ▾ /         │                                              │               │
│>    ● M modifi│                                              │               │
│               │                                              │               │
│               │                                              │               │
╰───────────────│                                              │               │
╭─ [3] Log ─────│                                              │               │
│  Rev Author Me│                                              │               │
│               │ctrl+s submit · esc cancel                    │───────────────╯
│               ╰──────────────────────────────────────────────╯───────────────╮
│                              ││No svn commands run yet.                      │
╰──────────────────────────────╯│                                              │
╭─ [4] Shelf ──────────────────╮│                                              │
│                              ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · a add · v pick · n changelist · c commit · r revert · d delete · …
Committing through the inline message editor.
╭─ [1] S╭─ Keybindings ────────────────────────────────────────────────╮───────╮
│Root   │Changes                         Navigation                    │       │
│Source │  Stage / unstage        space    Jump to panel      1 2 3 4 0│       │
│CWD    │  Add to version control     a    Cycle panels tab / shift+tab│       │
│Branch │  Assign changelist          n    Move up / down         k / j│       │
│Revisio│  Commit staged / list       c    Jump top / bottom      g / G│       │
│       │  Expand changelist      enter    Next / prev history pa n / p│       │
╰───────│  Revert / delete file   r / d    Scroll main up / down  K / J│       │
╭─ [2] ─│  Apply saved patch          p    Scroll main l / r      h / l│       │
│   ▾ / │  Resolve conflict           m    Line start / end  home / end│       │
│>      │Shelf                             Filter panel               /│       │
│       │  Pick / shelve          v / z  View                          │       │
│       │  Apply / pop        enter / p    Switch file view       [ / ]│       │
╰───────│  Drop / rename          d / n    Side-by-side / save    s / w│       │
╭─ [3] L│Working copy                      Pick revisions             v│       │
│  Rev A│  Update working copy        u    Diff picked revisions  enter│       │
│       │  Update to rev (Log)    space    Dir diff / untracked   D / U│───────╯
│       │  Open file in editor        e    Toggle command log         x│───────╮
│       │  Change source path         P  General                       │       │
╰───────│  Switch repository          W    Toggle help                ?│       │
╭─ [4] S│  Refresh / settings     R / S    Quit                       q│       │
│       │  Toggle live refresh        L                                │       │
╰───────╰──────────────────────────────────────────────────────────────╯───────╯
space stage · a add · v pick · n changelist · c commit · r revert · d delete · …
Every binding, under ?.
  • Introduction — what revision is, and what it is not.
  • Quick start — stage and commit your first change.
  • Keybindings — the full key reference.
  • Troubleshooting — when svn or your keys get in the way.
  • FAQ — why not git, what it touches, and where the name came from.

revision is MIT-licensed and built in the open on GitHubissues and releases.