svn 命令及其示例

Using command-line Subversion to access project source files

Getting started with command-line Subversion

If you are participating in a development project that is using Subversion for version control, you willneed to use Subversion to access and change project source files. You can browse the source code online toview a project’s directory structure and files
by clicking on the Subversion link inthe left navigation pane for the project.

The Subversion page displays with three subdirectories: branches/, tags/, trunk/and one README file. The README file gives a top level view of the Subversion repository. You can clickAccess options to view the Subversion
client setup instructions. You must have aSubversion client installed on your local machine.

Getting a local working copy for your project:

To get a “working copy” of the latest source files, you must check out the source files, aprocess which copies the files onto your system from the repository. In your shell or terminal client,type:

svn checkout https://(projectname).(domain)/svn/(projectname)/(DIR)(projectname) --username [type-user-name-here]

Enter your user password when prompted. This should be the same password associated with your useraccount on this site. Not specifying the directory will checkout the entire project source code. You maywant to checkout the ‘trunk/’ directory as it has the
working ‘www/’ folder.

Switches: --revision (-r) REV, --quiet (-q),--non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive,--config-dir DIR

See Basic Work Cycle,
Initial Checkout,

Note: If your site is not SSL (Secured Socket Layer) enabled, use
httpinstead of https to perform a Subversion operation. For example, to checkout the latestsource code from a project’s repository, use this command:

svn checkout https://(projectname).(domain)/svn/(projectname)/(DIR) (projectname)--username [type-user-name-here]

Working with files in the Subversion repository

Once you have checked out a local copy of the project repository, you can edit the existing files, createnew files and directories, and delete files locally. Any changes you make affect only your local copiesof the project files until you commit your changes
back to the Subversion repository.

Adding files/directories from your working copy to the repository:svn add

You can add a new file to the repository after you have first created and edited it in your working directoryor add a directory with or without it’s contents using


This will add files/directories to your working copy and schedule them for addition to the repository.They will be uploaded and added to the repository on your next commit. If you add something and change yourmind before committing, you can unschedule the
addition using svn revert.

Switches: --targets FILENAME,--non-recursive (-N), --quiet (-q), --config-dir arg, --auto-props, --no-auto-props

See Examples on addingfiles/directories

Viewing the content of specific files with revision and authorinformation:
svn blame

You can view the author and revision information in-line for the specified files by typing:

svn blame FILENAME

Each line of text is annotated at the beginning with the author (username) and the revision number for thelast change to that line.

Switches: --revision (-r) REV, --username USER, --password PASS, --no-auth-cache,--non-interactive, --config-dir DIR

Viewing the content of specific files: svn cat

At times, your working copy may be obsolete as compared to the repository or you may have modified yourlocal working copy. In such cases, you will want to see the differences in the content of a specific filebefore you commit your changes or decide edit
your working copy. Running svn cat FILENAMEwill automatically fetch the HEAD revision from the repository. This subcommand is mainly used toretrieve a file as it existed in an older revision number and display it on your screen. Alternatively,you
can browse the source code of your project on this site to do the same.

Switches: --revision (-r) REV, --usernameUSER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

Cleaning up the working copy: svn cleanup

Sometimes, you may get a “working copy locked” error. To remove the locks and recursively clean up theworking copy, use
svn update.

Switches: --diff3-cmd CMD, --config-dirDIR


Copying file or directory in a working copy or in the repository:svn copy

Your project may require you to make use of legacy documents. For example, you may want to use an alreadyexisting HTML file and use its code as reference to maintain the look and feel of the product whilecreating fresh content. Instead of creating a file
from scratch, you can simply copy this file usingsvn copy, save it under a different name and change the content. You can copy a file from therepository to your local working copy or vice versa. You can also copy files from within your localworking
copy. Subversion does not support cross repository copying. Use svn copy SRC DSTto achieve this.

Switches:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --username USER, --passwordPASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR,
--encoding ENC,--config-dir DIR

See svn copy

Deleting a file or a directory from your local working copy:

You may want to delete unwanted files from your local working copy. Using
svn deleteFILENAME
schedules it to be deleted. The actual deletion of the file in the repository takesplace only when you commit.

Switches: --force, --force-log,--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --targets FILENAME, --username USER, --passwordPASS, --no-auth-cache, --non-interactive, --editor-cmd
EDITOR, --encoding ENC, --config-dirDIR

Viewing the differences between files: svn diff

You can use svn diff to display local modifications in a specified file in your working copyagainst the one in the repository. In the command prompt, type:

svn diff (PATH of the file)(URL of the project's repository)

For example, to compare a locally modified file “index.html” against the one in the project’srepository, type:

svn diff $SRC/...../index.htmlhttps://(projectname).(domain)/svn/(projectname)/trunk (projectname) --username[type-user-name-here]

Alternatively, you can go to the directory where the file belongs and type:

svn diff(FILENAME)

This will display the difference with the revision number.

Switches: --revision (-r) REV, --oldOLD-TARGET, --new NEW-TARGET, --extensions (-x) "ARGS", --non-recursive (-N), --diff-cmd CMD,--notice-ancestry, --username USER, --password PASS,
--no-auth-cache, --non-interactive,--no-diff-deleted, --config-dir DIR

See Examining History,
svn diff

Exporting a clean directory tree on your local machine:

You can extract an unversioned copy, that is, a clean directory of a tree, on your local machine from theproject repository or from within your local working copy. To get a clean directory of an older revisionfrom the repository, type:

svn export [-r REV] [PATH]

This will export a clean directory tree from the repository specified by URL, at a revision REV (ifspecified), otherwise at HEAD, into PATH. If PATH is omitted, the last component of the URL is used for thelocal directory name. Alternatively, you can also
export a clean directory tree from the working copyspecified by PATH1 into PATH2 within your local machine. This will preserve all local changes, but willnot copy files under version control. To achieve this, type:

svn export PATH1 PATH2

Switches: --revision (-r) REV,--quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive,--config-dir DIR

Getting help on subversion: svn help

Subversion offers you help within the command-line interface. To get help on a specific subcommand,type:

svn help [SUBCOMMAND...]

Switches: --version, --quiet(-q)

Contributing your changes to the SVN repository

After making changes to files and/or directories locally, you must commit those changes to the SVNrepository.

Committing your changes: svn commit

To commit your changes into the shared repository, type:

svn commit -m "Type yourjustification here"

If you do not include a description of your change to the file, you will be prompted to add it by invoking yourfile editor before svn can complete the commit action or you will get a “Commit failed” error.All commits are logged automatically and posted to
the project’s commits discussion.

Switches: --message (-m) TEXT, --file (-F)FILE, --quiet (-q), --non-recursive (-N), --targets FILENAME, --force-log, --username USER, --passwordPASS, --no-auth-cache, --non-interactive,
--encoding ENC, --config-dir DIR

Commit YourChanges

Importing an unversioned file or tree in the project repository:svn import

You can recursively commit an unversioned file or tree into the project repository using
svnimport. Parent directories are created in the repository as required. The following commandwill recursively commit a copy from the PATH to the URL. If PATH is omitted “.” is assumed.

svn import [PATH] URL

Example: To create an unversioned directory (D) with a file on your local machine.Navigate to your Subversion page by clicking the
Subversion link in the leftnavigation pane for your project. Note that NEWDIR is not listed under
Browse sourcecode. To import D into your project’s repository, type:

svnimport -m "Type your message here" Dhttp://(projectname).(domain)/svn/(projectname)/NEWDIR

Refresh the page. Note that D is listed under Browse source code.Click
D to see the file.

Switches: --message (-m) TEXT, --file (-F)FILE, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache,--non-interactive, --force-log, --editor-cmd
EDITOR, --encoding ENC, --config-dir DIR, --auto-props,--no-auto-props

Printing information about paths in your working copy:

You will from time to time need specific information about files in your working copy to execute certainsubcommands. Typing
svn info will print exhaustive but useful information about itemsin your working copy paths in your working copy, including: Path, Name, URL, Revision, Node Kind, LastChanged, author, Last Changed Revision, Last Changed Date, Text Last Updated,
Properties Last Updatedand Checksum.

Switches:--targets FILENAME, --recursive (-R), --config-dir DIR

Viewing list of directory entries in the repository:

Before starting work on a project or fetching a ‘working copy’, you may want to see the contents i.e.directories and files in your project’s repository or view directory entries in your local workingcopy. You can type
svn list [TARGET...] in the command prompt to view the same.Alternatively, you can view your project’s repository by navigating to the
Softwareconfiguration management page within your project.

Switches: --revision (-r) REV, --verbose(-v), --recursive (-R), --username USER, --password PASS, --no-auth-cache, --non-interactive,--config-dir DIR

Viewing commit log messages: svn log

You can view the individual file/directory histories of the files/directories in your ‘working copy’ orthe repository to track revision information by typing:

svn log [PATH]

The result is a display of the file’s/directories’ revision information, starting with the most currentrevision with information such as the commit messages and the author name. Alternatively, you can usethis site to view the commit log messages for individual
files in your project repository. Click theSubversion link from the left navigation pane of your project. TheSubversion page appears. Search for your file inside the directories underBrowse source code and
click the filename. This will display a page with commit logmessages.

Switches: --revision(-r) REV, --quiet (-q), --verbose (-v), --targets FILENAME, --stop-on-copy, --incremental, --xml,--username USER, --password PASS, --no-auth-cache, --non-interactive,
--config-dir DIR


Merging changes: svn merge

You can run the svn merge command to tell Subversion to merge the latest versions of filesfrom the repository into your working copies.

Switches: --revision (-r) REV,--non-recursive (-N), --quiet (-q), --force, --dry-run, --diff3-cmd CMD, --ignore-ancestry,--username USER, --password PASS, --no-auth-cache, --non-interactive,
--config-dir DIR

See svn merge,
ResolveConflicts (Merging Others’ Changes),
Branching and Merging: CommonUse-Cases for Merging,
BestPractices for Merging

Working with the repository

Creating new directory: svn mkdir

To create a new directory in your working copy, type:

svn mkdir PATH

To create a new directory in your project repository, type:

svn mkdir URL

The final component of the PATH or URL determines the directory name. A directory in the repository iscreated with an immediate commit, so it requires a commit message

Switches: --message (-m) TEXT, --file (-F)FILE, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive,--editor-cmd EDITOR, --encoding ENC, --force-log,
--config-dir DIR

Moving a file or a directory: svn move

You can move a file or a directory within your working copy or within your project’s repository usingsvn move SRC DST. This command is equivalent to an
svn copy followed bysvn delete. Moving a file or a directory within your working copy moves and schedules itfor addition for the next commit. Moving a file or a directory within your project repository is an atomiccommit, so it requires
a commit message.

Switches: --message (-m) TEXT, --file (-F)FILE, --revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache,--non-interactive, --editor-cmd EDITOR,
--encoding ENC, --force-log, --config-dir DIR

Working with properties

Subversion has a number of specific properties that affect or determine it’s behavior. You can modify,commit, and revert property changes just like the contents of your files. You can delete, edit, print,list, set a property from files, directories or revisions
from your local working copy or your project’srepository.

See Properties,

Resolving conflicts: svn resolved

You may get a conflict while updating your local working copy. You will need to resolve the conflict. Afterresolving, type
svn resolved PATH.... to tell your working copy that the conflict hasbeen “resolved.”

Switches: --targets FILENAME,--recursive (-R), --quiet (-q), --config-dir DIR

ResolveConflicts (Merging Others’ Changes)

Reverting your changes: svn revert

As you work with Subversion, you will realize that svn revert PATH... is equivalent to aCtrl Z on Windows. You can:

  • Revert any local changes on your local working copy and thus, resolve any conflicted states.
  • Revert the contents of an item and the property changes in your working copy.
  • Cancel out any scheduling operations like file addition, file deletion etc.

NOTE that not providing any target may result in loss of changes in your workingcopy.

Switches: --targets FILENAME,--recursive (-R), --quiet (-q), --config-dir DIR

Getting status of files/directories: svn status

It is a good practice in version control to review your changes before committing them to the project’srepository. You can run
svn status to print the status of the files and directories in yourworking copy. This will result in a coded eight column output. It is humanly impossible to draw an’error-free’ conclusion from the output as each column has an exhaustive legend.
To make this tasksimpler and simultaneously see an example, type svn help status in your commandprompt.

Switches: --show-updates (-u),--verbose (-v), --non-recursive (-N), --quiet (-q), --no-ignore, --username USER, --password PASS,--no-auth-cache, --non-interactive, --config-dir

ExamineYour Changes

Switching your working copy: svn switch

You can update your working copy to mirror a new URL using svn switch URL [PATH]. You can movea working copy or a part of your working copy to a new branch. You can use this subcommand as a shortcut forbranching.

Switches: --revision (-r) REV,--non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --relocate, --username USER, --password PASS,--no-auth-cache, --non-interactive, --config-dir

See Switching a Working Copy,
Branching and Merging and
svn switch

Updating your working copy: svn update

As a good version control practice, it is recommended that you update your local working copy with theproject repository everyday using:

svn update [PATH...]

The updated items listed with their current status indicated as follows:

  • A = A file was added to your working copy.
  • U = A file was updated to your working copy.
  • D = A file was deleted from your working copy.
  • R = A file was replaced in your working copy.
  • G = A file was successfully merged.
  • C = A file has merge conflicts that must be resolved by hand

Switches: --revision (-r) REV,--non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --username USER, --password PASS,--no-auth-cache, --non-interactive, --config-dir DIR

Update YourWorking Copy
MergingConflicts By Hand

Branching and tagging

A project’s trunk is usually used for the main line of development whereas branches are usually used forvariations on that line. A branch is an ongoing line of development. In a Software Development LifeCycle, branches are often used when a public release
of a software product is due, to allow testers to workon the release candidate so that new development can go on independently of the testing. Branches arealso used for experimental work and a complete code rewrite. Tagging is a way of marking a group of filerevisions
as belonging together. Though branches and tags are created using the svn copysubcommand, branches and tags are different things. A branch represents multiple revisions while a tagrepresents a single revision.

The Subversion repository for your project hosted on this site supports branching and tagging yoursource files. Tagging and branching are easy and practical ‘copy’ operations for Subversion.

To create a branch or tag project files, type:

svn copy SRC DST -m "Type your message here"

See Branching and Merging

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.


Leave a Reply

Your email address will not be published. Required fields are marked *