159 lines
5.9 KiB
Plaintext
159 lines
5.9 KiB
Plaintext
This directory contains the GNU DIFF and DIFF3 utilities, version 1.15.
|
|
See file COPYING for copying conditions. To compile and install on
|
|
system V, you must edit the makefile according to comments therein.
|
|
|
|
Report bugs to bug-gnu-utils@prep.ai.mit.edu
|
|
|
|
Version 1.15 has the following new features; please see below for details.
|
|
|
|
-L (+file-label) option
|
|
-u (+unified) option
|
|
-a and -m options for diff3
|
|
Most output styles can represent incomplete input lines.
|
|
`Text' is defined by ISO 8859.
|
|
diff3 exit status 0 means success, 1 means overlaps, 2 means trouble.
|
|
|
|
|
|
This version of diff provides all the features of BSD's diff.
|
|
It has these additional features:
|
|
|
|
An input file may end in a non-newline character. If so, its last
|
|
line is called an incomplete line and is distinguished on output
|
|
from a full line. In the default, -c, and -u output styles, an
|
|
incomplete output line is followed by a diagnostic line that starts
|
|
with \. With -n, an incomplete line is output without a trailing
|
|
newline. Other output styles (-D, -e, -f) cannot represent an
|
|
incomplete line, so they pretend that there was a newline, and -e and -f
|
|
also print an error message. For example, suppose F and G are one-byte
|
|
files that contain just ``f'' and ``g'', respectively.
|
|
|
|
Then ``diff F G'' outputs
|
|
|
|
1c1
|
|
< f
|
|
\ No newline at end of file
|
|
---
|
|
> g
|
|
\ No newline at end of file
|
|
|
|
(The exact diagnostic message may differ, e.g. for non-English locales.)
|
|
``diff -n F G'' outputs the following without a trailing newline:
|
|
|
|
d1 1
|
|
a1 1
|
|
g
|
|
|
|
``diff -e F G'' sends two diagnostics to stderr and the following to stdout:
|
|
|
|
1c
|
|
g
|
|
.
|
|
|
|
A file is considered to be text if its first characters are all in the
|
|
ISO 8859 character set; BSD's diff uses Ascii.
|
|
|
|
GNU DIFF has the following additional options:
|
|
|
|
-a Always treat files as text and compare them line-by-line,
|
|
even if they do not appear to be text.
|
|
|
|
-B ignore changes that just insert or delete blank lines.
|
|
|
|
-C #
|
|
request -c format and specify number of context lines.
|
|
|
|
-F regexp
|
|
in context format, for each unit of differences, show some of
|
|
the last preceding line that matches the specified regexp.
|
|
|
|
-H use heuristics to speed handling of large files that
|
|
have numerous scattered small changes. The algorithm becomes
|
|
asymptotically linear for such files!
|
|
|
|
-I regexp
|
|
ignore changes that just insert or delete lines that
|
|
match the specified regexp.
|
|
|
|
-L label
|
|
Use the specified label in file header lines output by the -c option.
|
|
This option may be given zero, one, or two times,
|
|
to affect neither label, just the first file's label, or both labels.
|
|
A file's default label is its name, a tab, and its modification date.
|
|
|
|
-N in directory comparison, if a file is found in only one directory,
|
|
treat it as present but empty in the other directory.
|
|
|
|
-p equivalent to -c -F'^[_a-zA-Z]'. This is useful for C code
|
|
because it shows which function each change is in.
|
|
|
|
-T print a tab rather than a space before the text of a line
|
|
in normal or context format. This causes the alignment
|
|
of tabs in the line to look normal.
|
|
|
|
-u[#]
|
|
produce unified style output with # context lines (default 3).
|
|
This style is like -c, but it is more compact because context
|
|
lines are printed only once. Lines from just the first file
|
|
are marked '-'; lines from just the second file are marked '+'.
|
|
|
|
This version of diff3 has all of BSD diff3's features, with the following
|
|
additional features.
|
|
|
|
An input file may end in a non-newline character. With the -m option,
|
|
an incomplete last line stays incomplete. Other output styles treat
|
|
incomplete lines like diff.
|
|
|
|
The file name '-' denotes the standard input. It can appear at most once.
|
|
|
|
diff3 has the following additional options:
|
|
|
|
-a Always treat files as text and compare them line-by-line,
|
|
even if they do not appear to be text.
|
|
|
|
-i Include 'w' and 'q' commands at the end of the output, to write out
|
|
the changed file, thus emulating system V behavior. One of the edit
|
|
script options -e, -E, -x, -X, -3 must also be specified.
|
|
|
|
-m Apply the edit script to the first file and send the result to
|
|
standard output. Unlike piping diff3's output to ed(1), this works
|
|
even for binary files and incomplete lines. -E is assumed if no edit
|
|
script option is specified. This option is incompatible with -i.
|
|
|
|
-L label
|
|
Use the specified label for lines output by the -E and -X options,
|
|
one of which must also be specified. This option may be given zero,
|
|
one, or two times; the first label marks <<<<<<< lines and the second
|
|
marks >>>>>>> lines. The default labels are the names of the first and
|
|
third files on the command line. Thus ``diff3 -L X -L Z -E A B C''
|
|
acts like ``diff3 -E A B C'', except that the output looks like it
|
|
came from files named X and Z rather than from files named A and C.
|
|
|
|
Exit status 0 means success, 1 means overlaps were found and -E or -X was
|
|
specified, and 2 means trouble.
|
|
|
|
|
|
|
|
GNU DIFF was written by Mike Haertel, David Hayes, Richard Stallman
|
|
and Len Tower. The basic algorithm is described in: "An O(ND)
|
|
Difference Algorithm and its Variations", Eugene Myers, Algorithmica
|
|
Vol. 1 No. 2, 1986, p 251.
|
|
|
|
Many bugs were fixed by Paul Eggert. The unified diff idea and format
|
|
are from Wayne Davison.
|
|
|
|
Suggested projects for improving GNU DIFF:
|
|
|
|
* Handle very large files by not keeping the entire text in core.
|
|
|
|
One way to do this is to scan the files sequentally to compute hash
|
|
codes of the lines and put the lines in equivalence classes based only
|
|
on hash code. Then compare the files normally. This will produce
|
|
some false matches.
|
|
|
|
Then scan the two files sequentially again, checking each match to see
|
|
whether it is real. When a match is not real, mark both the
|
|
"matching" lines as changed. Then build an edit script as usual.
|
|
|
|
The output routines would have to be changed to scan the files
|
|
sequentially looking for the text to print.
|