Originally published on 2010-11-26; fully revised and updated.
Subversion includes more than just the svn client binary. If you are developing, administering repositories, or setting up network access, knowing which component to use prevents mistakes and speeds up troubleshooting. This guide explains the core Subversion components, how they fit together, and the commands you are most likely to run.

Subversion components at a glance
The original post listed the primary binaries and modules commonly installed with Subversion. The table below summarizes what each one is for.
| Component | Type | Primary purpose |
|---|---|---|
svn | Client CLI | Day-to-day version control operations from a working copy |
svnversion | Client utility | Reports working copy revision state |
svnlook | Repository inspection utility | Reads repository data directly (no working copy required) |
svnadmin | Repository admin utility | Creates, maintains, backs up, and repairs repositories |
mod_dav_svn | Apache module | Publishes repositories over HTTP or HTTPS |
svnserve | Server daemon | Publishes repositories using the Subversion network protocol |
svndumpfilter | Stream utility | Filters repository dump streams by path |
svnsync | Replication utility | Incrementally mirrors one repository to another |
How these components fit together
In a typical setup, developers use client commands, repositories are served via Apache or svnserve, and admin tools handle backup, inspection, and replication.
flowchart LR
Dev[Developer] --> Cli[svn client]
Cli -->|https| Apache[Apache mod_dav_svn]
Cli -->|svn or svn+ssh| Serve[svnserve]
Apache --> Repo[(Subversion repository)]
Serve --> Repo
Look[svnlook] --> Repo
Admin[svnadmin] --> Repo
Repo --> Dump[Repository dump]
Dump --> Filter[svndumpfilter]
Repo --> Mirror[svnsync job]
Client and inspection commands you will run most often
These examples cover common developer and read-only inspection tasks. Adjust repository URLs and filesystem paths to your environment.
# Working copy operations
svn checkout https://svn.example.com/svn/project project-wc
cd project-wc
svn update
svn status
svnversion .
# Repository inspection without checkout
svnlook youngest /srv/svn/project
svnlook tree /srv/svn/project | headCode language: PHP (php)
Administration, dump filtering, and mirroring
Use administrative tools directly on repository storage paths or repository URLs, not inside a working copy. For mirroring with svnsync, destination-side hook setup is typically required before synchronization.
# Create and back up a repository
svnadmin create /srv/svn/project
svnadmin hotcopy /srv/svn/project /backups/project-hotcopy
svnadmin dump /srv/svn/project > /backups/project.dump
# Filter paths from a dump stream
svndumpfilter include trunk branches/team-a < /backups/project.dump > /backups/project-filtered.dump
# Initialize and run a mirror
svnsync init file:///srv/svn/project-mirror https://svn.example.com/svn/project
svnsync sync file:///srv/svn/project-mirrorCode language: PHP (php)
Serving repositories: Apache module vs svnserve
| Option | Protocol and URL style | Strengths | Trade-offs |
|---|---|---|---|
mod_dav_svn with Apache | HTTP or HTTPS Example: https://svn.example.com/svn/project | Works with Apache ecosystem (TLS termination, auth modules, reverse proxies) | More moving parts to configure and maintain |
svnserve daemon | svn protocol Example: svn://svn.example.com/project | Lightweight and straightforward deployment | Different auth and transport model than web-based access |
svnserve via SSH tunnel | svn+ssh protocol Example: svn+ssh://alice@svn.example.com/project | Uses SSH accounts and encrypted transport | Operational model depends on SSH account management |
# Start svnserve as a daemon, rooted at /srv/svn
svnserve -d -r /srv/svnCode language: PHP (php)
Common pitfalls
- Running
svnadminor other repository-admin commands against a working copy path instead of repository storage. - Assuming
svnversionis the same as a single global repository revision; mixed-revision working copies can report ranges or flags. - Editing repository internals directly instead of using supported tools such as
svnadminandsvnlook. - Setting up
svnsyncwithout destination-side hook prerequisites. - Choosing an access method without planning authentication, authorization, and transport security requirements.
I’m Rajesh Kumar, a DevOps, SRE, DevSecOps, Cloud, and Platform Engineering expert passionate about sharing practical knowledge, real-world experiences, and industry best practices. I have worked at Cotocus and regularly write about technology, travel, investing, health, product reviews, and digital marketing through my various platforms.
I publish technical articles at DevOps School, travel stories at Holiday Landmark, stock market insights at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow, and SEO and digital marketing strategies at Wizbrand.
Find Trusted Cardiac Hospitals
Compare heart hospitals by city and services — all in one place.
Explore Hospitals