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 and Log 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                       │╭─ [4] Command Log ────────────────────────────╮
│  * r42                       ││No svn commands run yet.                      │
│                              ││                                              │
│                              ││                                              │
│                              ││                                              │
╰────────────── 1 of 2 · 1 ────╯╰──────────────────────────────────────────────╯
space stage · n changelist · c commit · r revert · d delete · [ ] view · ? help 
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 · n changelist · c commit · r revert · d delete · [ ] view · ? help 
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          │╰──────────────────────────────────────────────╯
│                              │╭─ [4] Command Log ────────────────────────────╮
│                              ││No svn commands run yet.                      │
│                              ││                                              │
│                              ││                                              │
│                              ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · n changelist · c commit · r revert · d delete · [ ] view · ? help 
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 modifie│                                              │               │
│               │                                              │               │
│               │                                              │               │
│               │                                              │               │
╰───────────────│                                              │               │
╭─ [3] Log ─────│                                              │               │
│  Rev Author Me│ctrl+s submit · esc cancel                    │───────────────╯
│               ╰──────────────────────────────────────────────╯───────────────╮
│                              ││No svn commands run yet.                      │
│                              ││                                              │
│                              ││                                              │
│                              ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · n changelist · c commit · r revert · d delete · [ ] view · ? help 
Committing through the inline message editor.
╭─ [1] Status ─────────────────╮╭─ [0] Diff ───────────────────────────────────╮
│Root      /home/alice/work/wc ││Loading diff…                                 │
│Source ╭─ Keybindings ────────────────────────────────────────────────╮       │
│CWD    │Changes                         Navigation                    │       │
│Branch │  Stage / unstage        space    Jump to panel      1 2 3 4 0│       │
│Revisio│  Assign changelist          n    Cycle panels tab / shift+tab│       │
│       │  Commit staged / list       c    Move up / down         k / j│       │
╰───────│  Expand changelist      enter    Jump top / bottom      g / G│       │
╭─ [2] ─│  Revert / delete file   r / d    Next / prev history pa n / p│       │
│  ▾ /  │  Apply saved patch          p    Scroll main up / down  K / J│       │
│>     M│  Resolve conflict           m    Scroll main l / r      h / l│       │
│       │Working copy                      Line start / end  home / end│       │
│       │  Update working copy        u    Filter panel               /│       │
│       │  Update to rev (Log)    space  View                          │       │
╰───────│  Open file in editor        e    Switch file view       [ / ]│       │
╭─ [3] L│  Change source path         P    Side-by-side / save    s / w│       │
│  Rev A│  Switch repository          W    Dir diff / untracked   D / U│───────╯
│       │  Refresh / settings     R / S    Toggle command log         x│───────╮
│       │  Toggle live refresh        L  General                       │       │
│       │                                  Toggle help                ?│       │
│       │                                  Quit                       q│       │
│       ╰──────────────────────────────────────────────────────────────╯       │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · n changelist · c commit · r revert · d delete · [ ] view · ? help 
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.