A Comprehensive Guide to SVN Commands and Their Uses
Subversion (SVN), a centralized version control system, is a powerful tool for managing and tracking changes in files and directories over time. It allows multiple developers to collaborate on a project, maintaining a complete history of every modification, facilitating easy rollback to previous versions, and enabling branching and merging for parallel development. This comprehensive guide delves into the essential SVN commands, explaining their functionalities and providing practical examples to help you effectively utilize SVN in your projects.
I. Setting Up Your Repository and Working Copy:
svnadmin create REPOSITORY_PATH
: This command creates a new SVN repository at the specified path. For example,svnadmin create /path/to/myrepo
creates a repository named “myrepo.” This is typically done only once, establishing the central repository.svn checkout URL [PATH]
: Checks out a working copy from the repository.URL
specifies the repository location, andPATH
(optional) designates the local directory where the working copy will be placed. Example:svn checkout https://svn.example.com/myrepo /my/local/copy
. This creates a local copy of the repository in “/my/local/copy”.svn import PATH URL -m "LOG_MESSAGE"
: Imports an unversioned directory tree into the repository.PATH
specifies the local directory to import,URL
is the target repository location, andLOG_MESSAGE
provides a descriptive message about the import. Example:svn import /my/project https://svn.example.com/myrepo/trunk -m "Initial import of project"
.
II. Basic Workflow Commands:
svn update [PATH]
: Updates your working copy with the latest changes from the repository.PATH
(optional) specifies which files or directories to update. If omitted, the entire working copy is updated. Example:svn update
orsvn update /my/local/copy/specific/file.txt
.svn add PATH
: Schedules new files or directories to be added to the repository during the next commit.PATH
specifies the files or directories to add. Example:svn add newfile.txt
orsvn add newdirectory
.svn delete PATH
: Schedules files or directories for deletion from the repository.PATH
specifies the items to delete. Example:svn delete oldfile.txt
.svn commit -m "LOG_MESSAGE" [PATH]
: Commits changes from your working copy to the repository.LOG_MESSAGE
is a mandatory descriptive message about the changes.PATH
(optional) allows committing specific files or directories. Example:svn commit -m "Fixed bug #123"
orsvn commit -m "Added new feature" specific/file.txt
.svn status [PATH]
: Displays the status of your working copy, showing which files have been modified, added, deleted, or are in conflict.PATH
(optional) filters the output to specific files or directories. Example:svn status
orsvn status specific/directory
.svn diff [PATH]
: Shows the differences between your working copy and the repository, or between two revisions.PATH
(optional) limits the comparison to specific files. Example:svn diff
orsvn diff -r 100:200
.svn revert PATH
: Reverts local changes in your working copy, discarding modifications and restoring the file to its last updated state.PATH
specifies the files to revert. Example:svn revert myfile.txt
.svn cleanup PATH
: Recursively cleans up the working copy, resolving any incomplete operations and removing lock files.PATH
specifies the directory to clean. Example:svn cleanup .
.
III. Branching and Merging:
svn copy URL1 URL2 -m "LOG_MESSAGE"
: Creates a branch or tag by copying an existing directory in the repository.URL1
is the source,URL2
is the destination, andLOG_MESSAGE
describes the operation. Example:svn copy https://svn.example.com/myrepo/trunk https://svn.example.com/myrepo/branches/newfeature -m "Creating branch for new feature"
.svn merge URL [PATH]
: Merges changes from one branch or tag to another, or from the repository to your working copy.URL
specifies the source of the changes, andPATH
(optional) indicates the target directory in the working copy. Example:svn merge https://svn.example.com/myrepo/branches/newfeature .
svn switch URL [PATH]
: Switches your working copy to a different branch or tag.URL
specifies the new branch or tag, andPATH
(optional) limits the switch to a specific subdirectory. Example:svn switch https://svn.example.com/myrepo/branches/newfeature
.
IV. Examining History and Revisions:
svn log [PATH]
: Displays the commit log messages for a file or directory.PATH
(optional) specifies the target. Example:svn log
orsvn log myfile.txt
.svn info [PATH]
: Shows information about a file or directory, including its URL, revision number, and last modification date.PATH
(optional) specifies the target. Example:svn info
.svn cat URL[@REV]
: Displays the content of a file at a specific revision.URL
specifies the file, and@REV
(optional) indicates the revision number. Example:svn cat myfile.txt@100
.svn list URL[@REV]
: Lists the contents of a directory at a specific revision.URL
specifies the directory, and@REV
(optional) indicates the revision number. Example:svn list https://svn.example.com/myrepo/trunk@200
.svn blame URL[@REV]
: Shows who last modified each line of a file and at which revision.URL
specifies the file, and@REV
(optional) specifies the revision. Example:svn blame myfile.txt
.
V. Properties and Keywords:
svn proplist PATH
: Lists the properties set on a file or directory.PATH
specifies the target. Example:svn proplist myfile.txt
.svn propget PROPNAME PATH
: Retrieves the value of a specific property.PROPNAME
is the name of the property, andPATH
is the target. Example:svn propget svn:keywords myfile.txt
.svn propset PROPNAME PROPVALUE PATH
: Sets the value of a property.PROPNAME
is the name of the property,PROPVALUE
is the new value, andPATH
is the target. Example:svn propset svn:keywords "Author Date Revision" myfile.txt
.svn propedit PROPNAME PATH
: Edits the value of a property using the default editor.PROPNAME
is the property name, andPATH
is the target. Example:svn propedit svn:ignore .
.
VI. Repository Administration:
svnadmin dump REPOSITORY_PATH
: Creates a dump file of the repository, useful for backups and migrations. Example:svnadmin dump /path/to/myrepo > myrepo.dump
.svnadmin load REPOSITORY_PATH
: Loads a dump file into a repository. Example:svnadmin load /path/to/myrepo < myrepo.dump
.svnadmin create REPOSITORY_PATH --fs-type fsfs|bdb
: Creates a repository with a specific file system type.fsfs
is recommended for most cases. Example:svnadmin create /path/to/myrepo --fs-type fsfs
.
VII. Dealing with Conflicts:
svn resolved PATH
: Marks a file as resolved after a conflict has been manually edited.PATH
specifies the conflicted file. Example:svn resolved myfile.txt
.
VIII. Relocating a Working Copy:
svn switch --relocate OLD_URL NEW_URL [PATH]
: Relocates a working copy to a new repository URL.OLD_URL
is the original URL,NEW_URL
is the new URL, andPATH
(optional) limits the relocation to a subdirectory. Example:svn switch --relocate https://old.example.com/myrepo https://new.example.com/myrepo
.
IX. Ignoring Files and Directories:
Use the svn:ignore
property to exclude files and directories from version control. This is typically set on a directory and applies recursively to its subdirectories. Commonly ignored files include compiled binaries, temporary files, and editor backup files. Edit the svn:ignore
property on a directory to add patterns of files or directories to ignore.
This comprehensive guide covers the most frequently used SVN commands. By mastering these commands, you can effectively manage your codebase, collaborate with other developers, and maintain a comprehensive history of your project’s evolution. Remember to always provide clear and concise log messages when committing changes to facilitate understanding and tracking of modifications. Explore the SVN documentation for further details and advanced functionalities. Remember to practice with these commands in a test environment before applying them to your production code.