A revision graph tool that actually works on real-world CVS repositories.
If you are still maintaining a CVS codebase, you already know the problem:
- graphs that become unreadable as soon as branches grow
- tools that lag, flicker, or become slow enough to be unusable on large histories
- constant context switching between log, annotate, diff, and external tools
CVSTreeGraph fixes that.
You can find here the latest build: [CVSTreeGraph Latest Build Download Page] (https://github.com/mca-software/cvs-treegraph/releases/latest)
Each release package contains:
CVSTreeGraph.exeCVSTreeGraphShellExtension.dllPython/CVSTreeGraph.pyREADME.TXT
WinCVS and TortoiseCVS graphs become almost unusable on large histories.
CVSTreeGraph is built to handle:
- large numbers of revisions
- branch-heavy repositories
- long-lived maintenance branches
You can scroll through the entire history smoothly, without lag or redraw artifacts.
No more “close and reopen the graph” cycles just to see updated state.
CVSTreeGraph keeps the core workflows in one place:
Selections and action results are synchronized across all views.
You move from a revision to its diff or its blame instantly, without reconstructing context: You click on a node in the graph and diff and annotate will update for the revision you clicked.
Raw cvs annotate output is barely usable on real files.
CVSTreeGraph:
- renders annotate inside a syntax-highlighted editor
- keeps revision info visible in the gutter
- lets you jump from a line directly to the corresponding node in the graph
Blame becomes navigable instead of just readable.
Comparing revisions should not require exporting files or opening external tools.
CVSTreeGraph supports:
- compare with previous revision
- compare with working copy
- compare with a pinned revision
Pinned comparisons let you keep one side fixed while browsing candidates.
Advanced diff options are available when needed (algorithm selection, whitespace handling, etc.), but the default behavior is optimized for speed and readability.
If you are programming for languages that require unicode chars (like Chinese or Japanese), you will appreciate that the diff viewer can "normalize" the dfm text to actual unicode the before comparing the two files. You might also consider installing in your delphi IDE this free plugin: DFMTextStabilizer to solve the problem once for all.
Propagating the same fix across multiple branches is one of the most painful CVS workflows.
CVSTreeGraph lets you:
- pin a “merge from” revision
- pin a “merge to” revision
- reuse that interval across multiple branches
This feature is described here.
No need to manually reconstruct merge pairs every time.
In strict CVS workflow, every branch should receive its own merge.
In real-world maintenance, that often means creating dozens of identical revisions just to propagate the same trivial fix.
CVSTreeGraph allows you to move branch tags directly on the graph.
This is a deliberate shortcut:
- fewer redundant revisions
- cleaner history
- faster maintenance on large sets of active branches
If you prefer canonical workflows, this feature can be disabled.
- Automatic refresh after commit/update/merge
- Local caching of previously viewed revisions and annotate results
- Fast navigation even on large graphs
- Compact and extended graph layouts
- Collapsible branches
- Smarter tag rendering to reduce clutter
CVSTreeGraph.exeis the main application. No installation requiredCVSTreeGraphShellExtension.dllis optional (Explorer integration)Python/CVSTreeGraph.pyis an optional WinCVS macrocvs.exemust be available in the systemPATH
CVSTreeGraph is freeware. Free for personal and commercial use, with no time limit.
- No registration, no license key, no activation
- The application makes no network calls of its own — it only runs
cvs.exe - Distributed as closed-source software: this repository publishes binaries and documentation only
Support is best-effort through GitHub Issues and Discussions.
Product page: 👉 mcasoftware.dev/products/cvs-treegraph
This repository publishes binaries only.
The source code is maintained separately.