Distinction Between Status and Update
In Subversion, we've tried to erase a lot of the confusion
between the
cvs status
and
cvs update
commands.
The
cvs status
command has two purposes:
first, to show the user any local modifications in the working
copy, and second, to show the user which files are out-of-date.
Unfortunately, because of CVS's hard-to-read status output, many
CVS users don't take advantage of this command at all. Instead,
they've developed a habit of running
cvs
update
or
cvs -n update
to quickly
see their changes. If users forget to use
the -n
option, this has the side effect of
merging repository changes they may not be ready to deal
with.
With Subversion, we've tried to remove this muddle by making
the output of
svn status
easy to read for
both humans and parsers. Also,
svn update
only prints information about files that are updated,
not
local modifications.
svn status
prints all files that have
local modifications. By default, the repository is not
contacted. While this subcommand accepts a fair number of
options, the following are the most commonly used ones:
-
-u
-
Contact the repository to determine, and then display,
out-of-dateness information.
-
-v
-
Show
all
entries under
version control.
-
-N
-
Run non-recursively (do not descend into
subdirectories).
The
status
command has two output
formats. In the default “short” format, local
modifications look like this:
$ svn status
M foo.c
M bar/baz.c
If you specify the --show-updates
(-u
) switch, a longer output format is
used:
$ svn status -u
M 1047 foo.c
* 1045 faces.html
* bloo.png
M 1050 bar/baz.c
Status against revision: 1066
In this case, two new columns appear. The second column
contains an asterisk if the file or directory is out-of-date.
The third column shows the working-copy's revision number of the
item. In the example above, the asterisk indicates that
faces.html
would be patched if we updated,
and that bloo.png
is a newly added file in
the repository. (The absence of any revision number next to
bloo.png
means that it doesn't yet exist in
the working copy.)
Lastly, here's a quick summary of the most common status codes that
you may see:
A Resource is scheduled for Addition
D Resource is scheduled for Deletion
M Resource has local modifications
C Resource has conflicts (changes have not been completely merged
between the repository and working copy version)
X Resource is external to this working copy (comes from another
repository. See
the section called “svn:externals
”)
? Resource is not under version control
! Resource is missing or incomplete (removed by another tool than
Subversion)
Subversion has combined the CVS P
and
U
codes into just U
. When
a merge or conflict occurs, Subversion simply prints
G
or C
, rather than a
whole sentence about it.
For a more detailed discussion of
svn
status
, see
the section called “
svn status
”.