|
Version Control with Subversion - Basic Work Cycle -
svn status
You'll probably use the
svn status
command more than any other Subversion command.
If you run
svn status
at the top of
your working copy with no arguments, it will detect all file
and tree changes you've made. Below are examples of
the different status codes that
svn
status
can return. (Note that the text following
# is not
actually printed by
svn status
.)
L some_dir # svn left a lock in the .svn area of some_dir
M bar.c # the content in bar.c has local modifications
M baz.c # baz.c has property but no content modifications
X 3rd_party # dir is part of an externals definition
? foo.o # svn doesn't manage foo.o
! some_dir # svn manages this, but it's missing or incomplete
~ qux # versioned as file/dir/link, but type has changed
I .screenrc # svn doesn't manage this, and is set to ignore it
A + moved_dir # added with history of where it came from
M + moved_dir/README # added with history and has local modifications
D stuff/fish.c # file is scheduled for deletion
A stuff/loot/bloo.h # file is scheduled for addition
C stuff/loot/lump.c # file has textual conflicts from an update
C stuff/loot/glub.c # file has property conflicts from an update
R xyz.c # file is scheduled for replacement
S stuff/squawk # file or dir has been switched to a branch
K dog.jpg # file is locked locally; lock-token present
O cat.jpg # file is locked in the repository by other user
B bird.jpg # file is locked locally, but lock has been broken
T fish.jpg # file is locked locally, but lock has been stolen
In this output format
svn status
prints five columns of characters, followed by several
whitespace characters, followed by a file or directory name.
The first column tells the status of a file or directory
and/or its contents. The codes printed here are:
-
A item
-
The file, directory, or symbolic link
item has been scheduled for
addition into the repository.
-
C item
-
The file item is in a state
of conflict. That is, changes received from the
server during an update overlap with local changes
that you have in your working copy. You must resolve
this conflict before committing your changes to the
repository.
-
D item
-
The file, directory, or symbolic link
item has been scheduled for
deletion from the repository.
-
M item
-
The contents of the file item
have been modified.
-
R item
-
The file, directory, or symbolic link
item has been scheduled to
replace item in the repository.
This means that the object is first deleted, then
another object of the same name is added, all within a
single revision.
-
X item
-
The directory item is
unversioned, but is related to a Subversion externals
definition. To find out more about externals
definitions, see
the section called “Externals Definitions”.
-
? item
-
The file, directory, or symbolic link
item is not under version
control. You can silence the question marks by either
passing the --quiet
(-q ) switch to
svn
status
, or by setting the
svn:ignore property on the parent
directory. For more information on ignored files, see
the section called “svn:ignore ”.
-
! item
-
The file, directory, or symbolic link
item is under version control but
is missing or somehow incomplete. The item can be
missing if it's removed using a non-Subversion
command. In the case of a directory, it can be
incomplete if you happened to interrupt a checkout or
update. A quick
svn update
will
refetch the file or directory from the repository, or
svn revert file
will restore a
missing file.
-
~ item
-
The file, directory, or symbolic link
item is in the repository as one
kind of object, but what's actually in your working
copy is some other kind. For example, Subversion
might have a file in the repository, but you removed
the file and created a directory in its place, without
using the
svn delete
or
svn add
command.
-
I item
-
The file, directory, or symbolic link
item is not under version control,
and Subversion is configured to ignore it during
svn add
,
svn import
and
svn status
operations. For more
information on ignored files, see
the section called “svn:ignore ”. Note that this
symbol only shows up if you pass the
--no-ignore option to
svn
status
—otherwise the file would be
ignored and not listed at all!
The second column tells the status of a file or
directory's properties (see
the section called “Properties” for more information on
properties). If an M
appears in the second column, then the properties have been
modified, otherwise a whitespace will be printed.
The third column will only show whitespace or an
L which means that
Subversion has locked the directory's
.svn working area. You will see an
L if you run
svn
status
in a directory where an
svn
commit
is in progress—perhaps when you are
editing the log message. If Subversion is not running, then
presumably Subversion was interrupted and the lock needs to
be cleaned up by running
svn cleanup
(more about that later in this chapter).
The fourth column will only show whitespace or a
+ which means that the file
or directory is scheduled to be added or modified with
additional attached history. This typically happens when you
svn move
or
svn copy
a file
or directory. If you see
A + , this means
the item is scheduled for addition-with-history. It could be
a file, or the root of a copied directory.
+
means the item is part of a subtree scheduled for
addition-with-history, i.e. some parent got copied, and it's
just coming along for the ride.
M + means the item
is part of a subtree scheduled for addition-with-history,
and
it has local modifications. When you
commit, first the parent will be added-with-history (copied),
which means this file will automatically exist in the copy.
Then the local modifications will be uploaded into the
copy.
The fifth column will only show whitespace or an
S . This signifies that the
file or directory has been switched from the path of the
rest of the working copy (using
svn
switch
) to a branch.
The sixth column shows information about locks, which is
further explained in
the section called “Locking”.
If you pass a specific path to
svn
status
, it gives you information about that item
alone:
$ svn status stuff/fish.c
D stuff/fish.c
svn status
also has a
--verbose (-v ) switch,
which will show you the status of
every
item in your working copy, even if it has not been
changed:
$ svn status --verbose
M 44 23 sally README
44 30 sally INSTALL
M 44 20 harry bar.c
44 18 ira stuff
44 35 harry stuff/trout.c
D 44 19 ira stuff/fish.c
44 21 sally stuff/things
A 0 ? ? stuff/things/bloo.h
44 36 harry stuff/things/gloo.c
This is the “long form” output of
svn status
. The first column remains
the same, but the second column shows the working-revision of
the item. The third and fourth columns show the revision in
which the item last changed, and who changed it.
None of the above invocations to
svn
status
contact the repository, they work only
locally by comparing the metadata in the
.svn directory with the working copy.
Finally, there is the --show-updates
(-u ) switch, which contacts the repository
and adds information about things that are
out-of-date:
$ svn status --show-updates --verbose
M * 44 23 sally README
M 44 20 harry bar.c
* 44 35 harry stuff/trout.c
D 44 19 ira stuff/fish.c
A 0 ? ? stuff/things/bloo.h
Status against revision: 46
Notice the two asterisks: if you were to run
svn update
at this point, you would
receive changes to README
and trout.c . This tells you some very
useful information—you'll need to update and get the
server changes on README before you
commit, or the repository will reject your commit for being
out-of-date. (More on this subject later.)
[an error occurred while processing this directive]
|
|