Version Control with Subversion - Properties -
svn:ignore
The svn:ignore property contains a
list of file patterns which certain Subversion operations
will ignore. Perhaps the most commonly used special
property, it works in conjunction with the
global-ignores run-time configuration
option (see
the section called “Config”) to
filter unversioned files and directories out of commands
svn status
,
svn
add
, and
svn import
.
The rationale behind the svn:ignore
property is easily explained. Subversion does not assume
that every file or subdirectory in a working copy directory
is intended for version control. Resources must be
explicitly placed under Subversion's management using the
svn add
or
svn import
commands. As a result, there are often many resources in a
working copy that are not versioned.
Now, the
svn status
command displays
as part of its output every unversioned file or subdirectory
in a working copy that is not already filtered out by the
global-ignores option (or its built-in
default value). This is done so that users can see if
perhaps they've forgotten to add a resource to version
control.
But Subversion cannot possibly guess the names of
every resource that should be ignored. Also, quite often
there are things that should be ignored in
every
working copy of a particular
repository. To force every user of that repository to add
patterns for those resources to their run-time configuration
areas would be not just a burden, but has the potential to
clash with the configuration needs of other working copies
that the user has checked out.
The solution is to store ignore patterns that are unique
to the resources likely to appear in a given directory with
the directory itself. Common examples of unversioned
resources that are basically unique to a directory, yet
likely to appear there, include output from program
compilations. Or—to use an example more appropriate
to this book—the HTML, PDF, or PostScript files
generated as the result of a conversion of some source
DocBook XML files to a more legible output format.
For this purpose, the svn:ignore
property is the solution. Its value is a multi-line
collection of file patterns, one pattern per line. The
property is set on the directory in which you wish the
patterns to be applied.
[34]
For example, say you have the following output from
svn status
:
$ svn status calc
M calc/button.c
? calc/calculator
? calc/data.c
? calc/debug_log
? calc/debug_log.1
? calc/debug_log.2.gz
? calc/debug_log.3.gz
In this example, you have made some property
modifications to button.c , but in your
working copy you also have some unversioned files:
the latest calculator program
that you've compiled from your source code, a source file
named data.c , and a set of debugging
output log files. Now, you know that your build system
always results in the calculator
program being generated.
[35]
And you know that your test suite always leaves those
debugging log files lying around. These facts are true for
all working copies, not just your own. And you know that
you aren't interested in seeing those things every time you
run
svn status
. So you use
svn
propedit svn:ignore calc
to add some ignore
patterns to the calc directory. For
example, you might add this as the new value of the
svn:ignore property:
calculator
debug_log*
After you've added this property, you will now have a
local property modification on the calc
directory. But notice what else is different about your
svn status
output:
$ svn status
M calc
M calc/button.c
? calc/data.c
Now, all the cruft is missing from the output! Of
course, those files are still in your working copy.
Subversion is simply not reminding you that they are present
and unversioned. And now with all the trivial noise removed
from the display, you are left with more interesting
items—such as that source code file that you probably
forgot to add to version control.
If you want to see the ignored files, you can pass the
--no-ignore option to Subversion:
$ svn status --no-ignore
M calc/button.c
I calc/calculator
? calc/data.c
I calc/debug_log
I calc/debug_log.1
I calc/debug_log.2.gz
I calc/debug_log.3.gz
The list of patterns to ignore is also used by
svn add
and
svn
import
. Both of these operations involve asking
Subversion to begin managing some set of files and
directories. Rather than force the user to pick and choose
which files in a tree she wishes to start versioning,
Subversion uses the ignore patterns to determine which files
should not be swept into the version control system as part
of a larger recursive addition or import operation.
[an error occurred while processing this directive]
|