Modify the file name-to-type mapping table.
g-opts] typemap -i
g-opts] typemap -o
The p4 typemap command allows Perforce administrators to set up a table linking Perforce file types to file name specifications. If a filename matches an entry in the typemap table, it overrides the file type that would otherwise have been assigned by Perforce.
By default, Perforce automatically determines if a file is of type
binary based on an analysis
of the first 65,536 bytes of a file. If the high bit is clear in each of
the first 65,536 bytes, Perforce assumes it to be
binary. Files compressed in the
.zip format (including
files) are also automatically detected and assigned the type
Although this default behavior can be overridden by the use of the
-t option, it's easy
to overlook this, particularly in cases where files' types were usually
(but not always) detected correctly. This situation occasionally appears
with PDF files (which sometimes begin with over 65,536 bytes of ASCII
comments) and RTF files, which usually contain embedded formatting codes.
The p4 typemap command provides a more complete
solution, allowing administrators to bypass the default type detection
mechanism, ensuring that certain files (for example, those ending in
.rtf) will always be
assigned the desired Perforce filetype upon addition to the depot.
Users can override any file type mapping defined in the typemap table by explicitly specifying the file type on the Perforce command line.
The p4 typemap form contains a single
TypeMap: field, consisting of pairs of values linking
file types to file patterns specified in depot syntax:
Any valid Perforce file type.
For a list of valid file types, see the “File Types” section.
A file pattern in depot syntax. When a user adds a file matching
this pattern, its default file type is the file type specified
in the table. To exclude files from the typemap, use
Reads the typemap table from standard input without invoking the editor.
Writes the typemap table to standard output without invoking the editor.
See the “Global Options” section.
Can File Arguments Use Revision Specifier?
Can File Arguments Use Revision Range?
Minimal Access Level Required
To specify all files with a given extension at or below a desired subdirectory, use four periods after the directory name, followed by the extension. (for instance,
//) The first three periods specify "all files below this level". The fourth period and accompanying file extension are parsed as "ending in these characters".
File type modifiers can be used in the typemap table. Useful applications include forcing keyword expansion on or off across directory trees, enforcing the preservation of original file modification times (the
+mfile type modifier) in directories of third-party DLLs, or implementing pessimistic locking policies.
Specify multiple file type modifiers consecutively. For example,
binary+lFS10refers to a
binaryfile with exclusive-open (
l), stored in full (
F) rather than compressed, and for which only the most recent ten revisions are stored (
S10). For more information on syntax, see the “File Types” section.
If you use the
-toption and file type modifiers to specify a file type on the command line, and the file to which you are referring falls under a p4 typemap mapping, the file type specified on the command line overrides the file type specified by the typemap table.
To tell the Perforce service to regard all PDF and RTF files as
binary, use p4 typemap to modify the
typemap table as follows:
Typemap: binary //....pdf binary //....rtf
The first three periods ("
...") in the specification
are a Perforce wildcard specifying that all files beneath the root
directory are included as part of the mapping. The fourth period and the
file extension specify that the specification
applies to files ending in "
A more complicated situation might arise in a site where users in one area
of the depot use the extension
.doc for plain ASCII
text files containing documentation, and users working in another area use
.doc to refer to files in a binary file format used
by a popular word processor. A useful typemap table in this situation
Typemap: text //depot/dev_projects/....doc binary //depot/corporate/annual_reports/....doc
To enable keyword expansion for all
.h files, but disable it for your
.txt files, do the following:
Typemap: text+k //depot/dev_projects/main/src/....c text+k //depot/dev_projects/main/src/....h text //depot/dev_projects/main/src/....txt
To ensure that files in a specific directory have their original file modification times preserved (regardless of submission date), use the following:
Typemap: binary //depot/dev_projects/main/bin/... binary+m //depot/dev_projects/main/bin/thirdpartydll/...
All files at or below the
bin directory are assigned
binary. Because later mappings override earlier
mappings, files in the
are assigned type
binary+m instead. For more
information about the
+m (modtime) file type modifier,
see the “File Types” section.
By default, Perforce supports concurrent development, but environments in
which only one person is expected to have a file for edit at a time can
implement pessimistic locking by using the
(exclusive open) modifier as a partial filetype. If you use the following
+l modifier is automatically applied to
all newly-added files in the depot:
Typemap: +l //depot/...