We've already covered in detail how Subversion stores and
retrieves various versions of files and directories in its
repository. Whole chapters have been devoted to this most
fundamental piece of functionality provided by the tool. And
if the versioning support stopped there, Subversion would still
be complete from a version control perspective. But it
doesn't stop there.
In addition to versioning your directories and files,
Subversion provides interfaces for adding, modifying, and
removing versioned metadata on each of your versioned
directories and files. We refer to this metadata as
properties, and they can be thought of as
two-column tables that map property names to arbitrary values
attached to each item in your working copy. Generally speaking,
the names and values of the properties can be whatever you want
them to be, with the constraint that the names must be
human-readable text. And the best part about these properties
is that they, too, are versioned, just like the textual contents
of your files. You can modify, commit, and revert property
changes as easily as committing textual changes. And you
receive other people's property changes as you update your
working copy.
In this section, we will examine the utility—both to
users of Subversion, and to Subversion itself—of property
support. You'll learn about the property-related
svn
subcommands, and how property
modifications affect your normal Subversion workflow.
Hopefully, you'll be convinced that Subversion properties can
enhance your version control experience.
Properties can be very useful additions to your working
copy. In fact, Subversion itself uses properties to house
special information, and as a way to denote that certain
special processing might be needed. Likewise, you can use
properties for your own purposes. Of course, anything you can
do with properties you could also do using regular versioned
files, but consider the following example of Subversion
property use.
Say you wish to design a website that houses many digital
photos, and displays them with captions and a datestamp. Now,
your set of photos is constantly changing, so you'd like to
have as much of this site automated as possible. These photos
can be quite large, so as is common with sites of this nature,
you want to provide smaller thumbnail images to your site
visitors. You can do this with traditional files. That is,
you can have your image123.jpg
and an
image123-thumbnail.jpg
side-by-side in a
directory. Or if you want to keep the filenames the same, you
might have your thumbnails in a different directory, like
thumbnails/image123.jpg
. You can also
store your captions and datestamps in a similar fashion, again
separated from the original image file. Soon, your tree of
files is a mess, and grows in multiples with each new photo
added to the site.
Now consider the same setup using Subversion's file
properties. Imagine having a single image file,
image123.jpg
, and then properties set on
that file named caption
,
datestamp
, and even
thumbnail
. Now your working copy directory
looks much more manageable—in fact, it looks like there
are nothing but image files in it. But your automation
scripts know better. They know that they can use
svn
(or better yet, they can use the
Subversion language bindings—see
the section called “Using Languages Other than C and C++”) to dig out the extra
information that your site needs to display without having to
read an index file or play path manipulation games.
How (and if) you use Subversion properties is up to you.
As we mentioned, Subversion has it own uses for properties,
which we'll discuss a little later in this chapter. But
first, let's discuss how to manipulate properties using the
svn
program.
[an error occurred while processing this directive]