There are two methods of producing file diffs in Perforce,
either against local changes that have not been submitted yet, or between two trees (or
within a branch) in the depot. These are done with different commands, diff
and diff2
:
This generates a diff of the local changes to files in the edit state. The -du
and -dc
flags can be used to create
unified or context diffs, respectively, or the P4DIFF environment
variable can be set to a local diff command to be used instead. It is a very good idea to
use this command to review your changes before submitting them.
This creates a diff between arbitrary files in the depot, or between files specified
in a branch spec. The diff operation takes place on the server, so P4DIFF variable has no effect, though the -du
and -dc
flags do work. The two
forms of this command are:
% p4 diff2 -b branchname
and
% p4 diff2 //depot/path1 //depot/path2
In all cases the diff will be written to the standard output. Unfortunately, Perforce produces a diff format that is slightly incompatible
with the traditional Unix diff and patch tools. Using the P4DIFF
variable to point to the real diff(1) tool can help
this, but only for the p4 diff command. The output of diff2
command must be post-processed to be useful (the -u
flag of diff2
will produce unified
diffs that are somewhat compatible, but it does not include files that have been added or
deleted). There is a post-processing script at: http://people.freebsd.org/~scottl/awkdiff.