AnyLearn
All lessons
Programmingbeginner

Subversion: The Centralized Version Control Model

How Subversion (SVN) works and why it still exists in a Git world. Covers the centralized model, the central repository and working copy, global revision numbers and atomic commits, and the real reasons teams keep SVN: large binaries, path-based access control, and a single source of truth.

Updated · AI-authored, review-gated · how lessons are made

Not signed in: your progress and quiz score won't be saved.
Progress1 / 8

What version control does

A version control system (VCS) records the history of a set of files: every change, who made it, when, and why. It lets a team work on the same codebase without overwriting each other, roll back to any past state, and see exactly what changed between two points in time.

Git dominates today, but it is not the only model, and it was not the first to win widely. Apache Subversion (SVN), released in 2000 to replace the older CVS, was the default version control system for a large part of the industry through the 2000s. Understanding SVN is worth it for two reasons: a lot of long-lived code still lives in it, and seeing a second model makes what Git chose, and why, much clearer. This cursus covers SVN on its own terms.

Full lesson text

All 8 steps on one page, for reading, reference, and search.

Show

1. What version control does

A version control system (VCS) records the history of a set of files: every change, who made it, when, and why. It lets a team work on the same codebase without overwriting each other, roll back to any past state, and see exactly what changed between two points in time.

Git dominates today, but it is not the only model, and it was not the first to win widely. Apache Subversion (SVN), released in 2000 to replace the older CVS, was the default version control system for a large part of the industry through the 2000s. Understanding SVN is worth it for two reasons: a lot of long-lived code still lives in it, and seeing a second model makes what Git chose, and why, much clearer. This cursus covers SVN on its own terms.

2. Centralized versus distributed

This is the one distinction everything else follows from.

SVN is centralized. There is a single central repository on a server that holds the full history. Each developer checks out a working copy: the files at one revision, plus a little bookkeeping, but not the project's history. To commit, to see the log, or to branch, you talk to the server.

Git is distributed. Every developer clones the entire repository, history and all, onto their machine. Commits, branches, and history browsing happen locally; you sync with others by pushing and pulling.

That single choice explains the rest: SVN's need for connectivity, its single authoritative history, its global revision numbers, and its fine-grained server-side access control all fall out of keeping the one true repository on a server.

3. Two shapes of collaboration

Picture the two models side by side. In SVN, every developer's working copy connects to one central repository that holds all history; nothing is complete without the server. In Git, every clone is a full repository in its own right, and developers sync peer-style through a shared remote by choice, not necessity.

flowchart TD
  subgraph SVN["SVN: centralized"]
    R["Central repository (full history)"]
    W1["Working copy A"] <--> R
    W2["Working copy B"] <--> R
    W3["Working copy C"] <--> R
  end
  subgraph GIT["Git: distributed"]
    RemoteG["Shared remote"]
    C1["Full clone A"] <--> RemoteG
    C2["Full clone B"] <--> RemoteG
  end

4. The repository and the working copy

In SVN you start by pointing at a repository URL and running a checkout. That downloads a working copy: the current files plus a hidden .svn directory at the root that records which revision you have and what you have changed locally.

svn checkout https://svn.example.com/repos/acme/trunk acme
cd acme
# ... edit files ...
svn status      # what have I changed?
svn commit -m "Fix invoice rounding"

A few things to notice. The URL is central and authoritative; there is exactly one of it. The working copy is a snapshot at one revision, not the whole timeline, so browsing deep history means asking the server. And unlike Git's clone, checking out a huge project does not drag its entire past onto your disk, which matters when a repository holds years of large binary assets.

5. Global revision numbers

Here is a genuinely different design choice. In SVN, a revision is a number that names the state of the entire repository after a commit. The first commit is revision 1, the next is revision 2, and so on. Revision 4217 is a single, whole-tree snapshot of the project.

Git, by contrast, identifies each commit with a content hash like a3f9c2e, and there is no single increasing counter across the project. SVN's global integer has real ergonomic value: you can say "the bug appeared in r4217" and everyone knows exactly which repository-wide state you mean, in order, without ambiguity. Because the numbers are sequential, comparing revision N with N-1 gives you precisely the change that one commit introduced. The tradeoff is that this only works because there is one central authority handing out the next number.

6. Atomic commits

SVN commits are atomic: a commit either fully succeeds or has no effect at all. If you commit changes to twelve files and the connection drops midway, the repository does not end up with six of them applied. Nobody doing an update ever sees a half-finished commit.

This sounds obvious, but SVN's predecessor CVS did not guarantee it, and the lack caused real corruption and confusion. Atomicity is why a revision number can stand for a coherent whole-tree state: every revision is a complete, consistent point you can check out, build, and trust. It is one of the core reasons SVN was considered a serious upgrade over CVS when it arrived, and it remains a property teams rely on for reproducible builds tied to a revision.

7. Why teams still choose SVN

Git won the general case, but centralization is a feature in some settings, and that is why SVN persists. Reported adopters of SVN include large organizations such as LinkedIn, NASA, Siemens, and Citigroup, per a 2025 RhodeCode review of version control usage. Three reasons recur:

  • Large binary assets. Git stores full snapshots and struggles as binary blobs accumulate; SVN handles large, non-mergeable files more gracefully, which is why game studios and CAD/media teams favor it.
  • Granular access control. Because the repository is central, you can grant a contributor read or write access to specific subdirectories. Git's model is essentially all-or-nothing per repository.
  • A single source of truth. One authoritative repository, one linear revision history, one simple mental model, which some enterprise, government, and financial teams prefer.

SVN is a deliberate fit for these, not a legacy accident.

8. SVN and Git at a glance

A compact comparison to anchor the model before the next lesson digs into the daily workflow:

Subversion (SVN)Git
ModelCentralizedDistributed
Local copyWorking copy at one revisionFull repository clone
HistoryLives on the serverLives in every clone
Commit idGlobal sequential number (r42)Content hash (a3f9c2e)
Offline commitsNoYes
Access controlPer path, fine-grainedPer repository
Big binariesHandled gracefullyAwkward without extensions

Neither column is simply better. Git optimizes for distributed, offline, branch-heavy development; SVN optimizes for a controlled central authority with fine-grained access and large assets. Knowing both makes you effective wherever the code actually lives. Next: the day-to-day SVN commands.

Check your understanding

The lesson ends with a 5-question quiz. Take it in the player above to see your score.

  1. What is the defining architectural difference between SVN and Git?
    • SVN is centralized with one server repository; Git is distributed with a full copy in every clone
    • SVN cannot track file history; Git can
    • SVN only works for small text files; Git only works for binaries
    • SVN has no commits; Git introduced them
  2. In SVN, what does a working copy contain after checkout?
    • The complete history of the entire project
    • The files at one revision plus local bookkeeping, but not the full history
    • Only a link to the server with no actual files
    • Every branch and tag ever created, locally
  3. What does a global revision number like r4217 name in SVN?
    • A single developer's local branch
    • The state of one file only
    • The state of the entire repository tree after that commit
    • A random content hash with no ordering
  4. Why does the guarantee of atomic commits matter?
    • It makes commits faster than Git in all cases
    • A commit fully succeeds or has no effect, so no one ever sees a half-applied change
    • It lets developers commit while offline
    • It removes the need for a central server
  5. Which scenario most favors SVN over Git?
    • A distributed open-source team that commits frequently while offline
    • A studio managing large binary assets that needs per-directory access control and one source of truth
    • A solo developer wanting fast local branching
    • A project that must be fully cloned onto every laptop

Related lessons

Programming
advanced

The Failure Modes the Design Creates

Reconciliation buys robustness and charges for it in a specific currency: nothing is ever definitely finished, commands succeed without meaning anything worked, and manual fixes are silently undone. This lesson covers the failures that come from the model rather than from bugs, how to debug them, and when the whole thing is the wrong tool.

8 steps·~12 min
Programming
advanced

Scheduling and Resources: Requests Are Not Limits

Two numbers govern where a pod lands and how it behaves under pressure, and they do completely different jobs. Requests are used for placement and are a promise; limits are enforced at run time and are a ceiling. This lesson separates them, covers the asymmetry between CPU and memory enforcement, and explains what actually happens when a node runs out.

8 steps·~12 min
Programming
advanced

Pods, Services, and the Label That Joins Them

The object types look like an arbitrary vocabulary until you notice they are layers of controllers, each reconciling the one below. This lesson works up from the pod, explains why a Service can point at something whose address changes constantly, and shows that the whole system is joined by one mechanism: a label match.

8 steps·~12 min
Programming
advanced

Reconciliation: Declare the End State, Not the Steps

Kubernetes is often taught as a pile of object types. Underneath it is one idea repeated: store a description of the desired state, and run loops that continuously compare it to reality and act on the difference. This lesson builds that loop, explains why it is level-triggered rather than event-driven, and shows what the design buys and costs.

8 steps·~12 min