Synopsis

DESCRIPTION

This tool reports differences between two repository histories.
The histories may be presented as git repository directories or
as fast-import streams, or as one of each.

Revisions are first paired into correspondence by committer and
commit date. Any revision in the left-hand (L) history that cannot be
paired with a revision in the right-hand (R) history is interpreted as
having been deleted; any revision in the R history that cannot be
paired with a revision in the L history is interpreted as having been
inserted.

For each changed, inserted, or deleted revision, a summary line
is emitted identifying it by commit ID (for a repo) or mark (for a
stream file) in the first history. In change reports, the
corresponding revision in the second history is similarly identified
and the report indicates the nature of the changes.

A trailing statistics line summarizes the operation counts.

Tags and heads are compared as well. Two tags match if their contents
do and they point at paired commits.

OPTIONS

The --legacy-map or -m option takes a legacy map file in the format
produced by reposurgeon, associating legacy commit IDs with committer/time
pairs. If the tool can find a matching committer/time pair for a commit
in this file, reports on this commit (and any matched pair it is part of)
will be decorated with the legacy ID of the commit. (This will work, in
particular, for displaying Subversion revisions of commits lifted from
a Subversion file.)

The --single or -s option compares single commits in detail. The
argument must be a pair of commit IDs (marks or hashes) separated by an
equals sign.

The --ignore or -i option causes differences between specified
parts to be ignored. Part tags are as follows:

author

Ignore differences in the (name part of the)
author field.

authordate

Ignore differences in the author date part.

committer

Ignore differences in the (name part of the)
committer field.

committerdate

Ignore differences in the commit date part

parents

Ignore differences in parent links.

timezone

Apply a modulo 360 operation to timestamps before
comparison, so as to ignore time-zone skew.

tree

Ignore tree-content differences. (It is not expected
that this option will be useful; it is provided for completeness's
sake.)

gitignore

Ignore .gitignore and .cvsignore files when comparing
tree content. Useful if you are comparing translations done by pairs
of lifting tools only one of which lifts these; a notable case of this
is reposurgeon vs. git-svn.

email

Ignore email addresses when comparing names. This
can be useful when comparing two repositories translated from Subversion;
typically they'll have the Subversion Unix user ID as the name part of the
address, but whether and how a host part is generated for the address varies.

One of these or a comma-separated list of several can be
specified.

The --fullhash or -f option forces reporting of full 40-digit
hash IDs, rather than the normal short hash.

Normally only the names of differing files are listed. With the
--tree-diff option, context diffs of the files are listed.

The --quiet or -q option suppresses the progress meter.

The --verbose or -v option enables debugging messages that are
probably only of interest to developers; consult the source code for
details.

RETURN VALUES

For scripting use, this program returns 0 unless content (tree)
differences were found in matching commits, in which case it returns 1.
Right-side-only or left-side-only commits do not cause a return of 1, nor
do differences in change comments only.