Subversion joins the ranks of the many applications that recognize
and make use of Multipurpose Internet Mail Extensions (MIME) content types. Besides being a general-purpose storage
location for a file’s content type, the value of the svn:mime-type
file
property determines some behavioral characteristics of Subversion
itself.
For example, one of the benefits that Subversion typically
provides is contextual, line-based merging of changes received from the
server during an update into your working file. But for files containing
nontextual data, there is often no concept of a “line.” So,
for versioned files whose svn:mime-type
property is set to a nontextual
MIME type (generally, something that doesn’t begin with text/
, though there are exceptions),
Subversion does not attempt to perform contextual merges during updates.
Instead, any time you have locally modified a binary working copy file
that is also being updated, your file is left untouched and Subversion
creates two new files. One file has a .oldrev extension and contains the BASE
revision of the file. The other file has a .newrev extension and contains the contents
of the updated revision of the file. This behavior is really for the
protection of the user against failed attempts at performing contextual
merges on files that simply cannot be contextually merged.
The svn:mime-type
property,
when set to a value that does not indicate textual file contents, can
cause some unexpected behaviors with respect to other properties. For
example, since the idea of line endings (and therefore, line-ending
conversion) makes no sense when applied to nontextual files,
Subversion will prevent you from setting the svn:eol-style
property on such files. This
is obvious when attempted on a single file target—svn propset will error out. But it might not
be as clear if you perform a recursive property set, where Subversion
will silently skip over files that it deems unsuitable for a given
property.
Beginning in Subversion 1.5, users can configure a new mime-types-file
runtime configuration
parameter, which identifies the location of a MIME types mapping file.
Subversion will consult this mapping file to determine the MIME type of
newly added and imported files.
Also, if the svn:mime-type
property is set, then the Subversion Apache module will use its value to
populate the Content-type:
HTTP
header when responding to GET requests. This gives your web browser a
crucial clue about how to display a file when you use it to peruse your
Subversion repository’s contents.
[10] You think that was rough? During that same era, WordPerfect also used .DOC for their proprietary file format’s preferred extension!