summaryrefslogtreecommitdiff
path: root/doc/diffutils.info
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2012-11-06 22:51:15 -0800
committerAnas Nashif <anas.nashif@intel.com>2012-11-06 22:51:15 -0800
commit20c6d7ec2c817aa561410130efc8c8254fbef2b2 (patch)
tree7fedf733ccf6f9ff3ee00913c4fc07110f4a7ba9 /doc/diffutils.info
downloaddiffutils-20c6d7ec2c817aa561410130efc8c8254fbef2b2.tar.gz
diffutils-20c6d7ec2c817aa561410130efc8c8254fbef2b2.tar.bz2
diffutils-20c6d7ec2c817aa561410130efc8c8254fbef2b2.zip
Imported Upstream version 3.2upstream/3.2
Diffstat (limited to 'doc/diffutils.info')
-rw-r--r--doc/diffutils.info5308
1 files changed, 5308 insertions, 0 deletions
diff --git a/doc/diffutils.info b/doc/diffutils.info
new file mode 100644
index 0000000..b44d1cf
--- /dev/null
+++ b/doc/diffutils.info
@@ -0,0 +1,5308 @@
+This is diffutils.info, produced by makeinfo version 4.13 from
+diffutils.texi.
+
+This manual is for GNU Diffutils (version 3.2, 15 August 2011), and
+documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for
+showing the differences between files and the GNU `patch' command for
+using their output to update files.
+
+ Copyright (C) 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2011 Free
+Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts, and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License."
+
+INFO-DIR-SECTION Individual utilities
+START-INFO-DIR-ENTRY
+* cmp: (diffutils)Invoking cmp. Compare 2 files byte by byte.
+* diff: (diffutils)Invoking diff. Compare 2 files line by line.
+* diff3: (diffutils)Invoking diff3. Compare 3 files line by line.
+* patch: (diffutils)Invoking patch. Apply a patch to a file.
+* sdiff: (diffutils)Invoking sdiff. Merge 2 files side-by-side.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION Text creation and manipulation
+START-INFO-DIR-ENTRY
+* Diffutils: (diffutils). Comparing and merging files.
+END-INFO-DIR-ENTRY
+
+
+File: diffutils.info, Node: Top, Next: Overview, Up: (dir)
+
+Comparing and Merging Files
+***************************
+
+This manual is for GNU Diffutils (version 3.2, 15 August 2011), and
+documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for
+showing the differences between files and the GNU `patch' command for
+using their output to update files.
+
+ Copyright (C) 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2011 Free
+Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts, and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License."
+
+* Menu:
+
+* Overview:: Preliminary information.
+* Comparison:: What file comparison means.
+
+* Output Formats:: Formats for two-way difference reports.
+* Incomplete Lines:: Lines that lack trailing newlines.
+* Comparing Directories:: Comparing files and directories.
+* Adjusting Output:: Making `diff' output prettier.
+* diff Performance:: Making `diff' smarter or faster.
+
+* Comparing Three Files:: Formats for three-way difference reports.
+* diff3 Merging:: Merging from a common ancestor.
+
+* Interactive Merging:: Interactive merging with `sdiff'.
+
+* Merging with patch:: Using `patch' to change old files into new ones.
+* Making Patches:: Tips for making and using patch distributions.
+
+* Invoking cmp:: Compare two files byte by byte.
+* Invoking diff:: Compare two files line by line.
+* Invoking diff3:: Compare three files line by line.
+* Invoking patch:: Apply a diff file to an original.
+* Invoking sdiff:: Side-by-side merge of file differences.
+
+* Standards conformance:: Conformance to the POSIX standard.
+* Projects:: If you've found a bug or other shortcoming.
+
+* Copying This Manual:: How to make copies of this manual.
+* Translations:: Available translations of this manual.
+* Index:: Index.
+
+
+File: diffutils.info, Node: Overview, Next: Comparison, Prev: Top, Up: Top
+
+Overview
+********
+
+Computer users often find occasion to ask how two files differ. Perhaps
+one file is a newer version of the other file. Or maybe the two files
+started out as identical copies but were changed by different people.
+
+ You can use the `diff' command to show differences between two
+files, or each corresponding file in two directories. `diff' outputs
+differences between files line by line in any of several formats,
+selectable by command line options. This set of differences is often
+called a "diff" or "patch". For files that are identical, `diff'
+normally produces no output; for binary (non-text) files, `diff'
+normally reports only that they are different.
+
+ You can use the `cmp' command to show the byte and line numbers
+where two files differ. `cmp' can also show all the bytes that differ
+between the two files, side by side. A way to compare two files
+character by character is the Emacs command `M-x compare-windows'.
+*Note Other Window: (emacs)Other Window, for more information on that
+command.
+
+ You can use the `diff3' command to show differences among three
+files. When two people have made independent changes to a common
+original, `diff3' can report the differences between the original and
+the two changed versions, and can produce a merged file that contains
+both persons' changes together with warnings about conflicts.
+
+ You can use the `sdiff' command to merge two files interactively.
+
+ You can use the set of differences produced by `diff' to distribute
+updates to text files (such as program source code) to other people.
+This method is especially useful when the differences are small compared
+to the complete files. Given `diff' output, you can use the `patch'
+program to update, or "patch", a copy of the file. If you think of
+`diff' as subtracting one file from another to produce their
+difference, you can think of `patch' as adding the difference to one
+file to reproduce the other.
+
+ This manual first concentrates on making diffs, and later shows how
+to use diffs to update files.
+
+ GNU `diff' was written by Paul Eggert, Mike Haertel, David Hayes,
+Richard Stallman, and Len Tower. Wayne Davison designed and
+implemented the unified output format. The basic algorithm is described
+by Eugene W. Myers in "An O(ND) Difference Algorithm and its
+Variations", `Algorithmica' Vol. 1 No. 2, 1986, pp. 251-266; and in "A
+File Comparison Program", Webb Miller and Eugene W. Myers,
+`Software--Practice and Experience' Vol. 15 No. 11, 1985, pp. 1025-1040.
+The algorithm was independently discovered as described by E. Ukkonen in
+"Algorithms for Approximate String Matching", `Information and Control'
+Vol. 64, 1985, pp. 100-118. Unless the `--minimal' option is used,
+`diff' uses a heuristic by Paul Eggert that limits the cost to O(N^1.5
+log N) at the price of producing suboptimal output for large inputs
+with many differences. Related algorithms are surveyed by Alfred V.
+Aho in section 6.3 of "Algorithms for Finding Patterns in Strings",
+`Handbook of Theoretical Computer Science' (Jan Van Leeuwen, ed.), Vol.
+A, `Algorithms and Complexity', Elsevier/MIT Press, 1990, pp. 255-300.
+
+ GNU `diff3' was written by Randy Smith. GNU `sdiff' was written by
+Thomas Lord. GNU `cmp' was written by Torbjo"rn Granlund and David
+MacKenzie.
+
+ GNU `patch' was written mainly by Larry Wall and Paul Eggert;
+several GNU enhancements were contributed by Wayne Davison and David
+MacKenzie. Parts of this manual are adapted from a manual page written
+by Larry Wall, with his permission.
+
+
+File: diffutils.info, Node: Comparison, Next: Output Formats, Prev: Overview, Up: Top
+
+1 What Comparison Means
+***********************
+
+There are several ways to think about the differences between two files.
+One way to think of the differences is as a series of lines that were
+deleted from, inserted in, or changed in one file to produce the other
+file. `diff' compares two files line by line, finds groups of lines
+that differ, and reports each group of differing lines. It can report
+the differing lines in several formats, which have different purposes.
+
+ GNU `diff' can show whether files are different without detailing
+the differences. It also provides ways to suppress certain kinds of
+differences that are not important to you. Most commonly, such
+differences are changes in the amount of white space between words or
+lines. `diff' also provides ways to suppress differences in alphabetic
+case or in lines that match a regular expression that you provide.
+These options can accumulate; for example, you can ignore changes in
+both white space and alphabetic case.
+
+ Another way to think of the differences between two files is as a
+sequence of pairs of bytes that can be either identical or different.
+`cmp' reports the differences between two files byte by byte, instead
+of line by line. As a result, it is often more useful than `diff' for
+comparing binary files. For text files, `cmp' is useful mainly when
+you want to know only whether two files are identical, or whether one
+file is a prefix of the other.
+
+ To illustrate the effect that considering changes byte by byte can
+have compared with considering them line by line, think of what happens
+if a single newline character is added to the beginning of a file. If
+that file is then compared with an otherwise identical file that lacks
+the newline at the beginning, `diff' will report that a blank line has
+been added to the file, while `cmp' will report that almost every byte
+of the two files differs.
+
+ `diff3' normally compares three input files line by line, finds
+groups of lines that differ, and reports each group of differing lines.
+Its output is designed to make it easy to inspect two different sets of
+changes to the same file.
+
+* Menu:
+
+* Hunks:: Groups of differing lines.
+* White Space:: Suppressing differences in white space.
+* Blank Lines:: Suppressing differences whose lines are all blank.
+* Specified Lines:: Suppressing differences whose lines all match a pattern.
+* Case Folding:: Suppressing differences in alphabetic case.
+* Brief:: Summarizing which files are different.
+* Binary:: Comparing binary files or forcing text comparisons.
+
+
+File: diffutils.info, Node: Hunks, Next: White Space, Up: Comparison
+
+1.1 Hunks
+=========
+
+When comparing two files, `diff' finds sequences of lines common to
+both files, interspersed with groups of differing lines called "hunks".
+Comparing two identical files yields one sequence of common lines and
+no hunks, because no lines differ. Comparing two entirely different
+files yields no common lines and one large hunk that contains all lines
+of both files. In general, there are many ways to match up lines
+between two given files. `diff' tries to minimize the total hunk size
+by finding large sequences of common lines interspersed with small
+hunks of differing lines.
+
+ For example, suppose the file `F' contains the three lines `a', `b',
+`c', and the file `G' contains the same three lines in reverse order
+`c', `b', `a'. If `diff' finds the line `c' as common, then the command
+`diff F G' produces this output:
+
+ 1,2d0
+ < a
+ < b
+ 3a2,3
+ > b
+ > a
+
+But if `diff' notices the common line `b' instead, it produces this
+output:
+
+ 1c1
+ < a
+ ---
+ > c
+ 3c3
+ < c
+ ---
+ > a
+
+It is also possible to find `a' as the common line. `diff' does not
+always find an optimal matching between the files; it takes shortcuts
+to run faster. But its output is usually close to the shortest
+possible. You can adjust this tradeoff with the `--minimal' (`-d')
+option (*note diff Performance::).
+
+
+File: diffutils.info, Node: White Space, Next: Blank Lines, Prev: Hunks, Up: Comparison
+
+1.2 Suppressing Differences in Blank and Tab Spacing
+====================================================
+
+The `--ignore-tab-expansion' (`-E') option ignores the distinction
+between tabs and spaces on input. A tab is considered to be equivalent
+to the number of spaces to the next tab stop (*note Tabs::).
+
+ The `--ignore-trailing-space' (`-Z') option ignores white space at
+line end.
+
+ The `--ignore-space-change' (`-b') option is stronger than `-E' and
+`-Z' combined. It ignores white space at line end, and considers all
+other sequences of one or more white space characters within a line to
+be equivalent. With this option, `diff' considers the following two
+lines to be equivalent, where `$' denotes the line end:
+
+ Here lyeth muche rychnesse in lytell space. -- John Heywood$
+ Here lyeth muche rychnesse in lytell space. -- John Heywood $
+
+ The `--ignore-all-space' (`-w') option is stronger still. It
+ignores differences even if one line has white space where the other
+line has none. "White space" characters include tab, vertical tab,
+form feed, carriage return, and space; some locales may define
+additional characters to be white space. With this option, `diff'
+considers the following two lines to be equivalent, where `$' denotes
+the line end and `^M' denotes a carriage return:
+
+ Here lyeth muche rychnesse in lytell space.-- John Heywood$
+ He relyeth much erychnes seinly tells pace. --John Heywood ^M$
+
+ For many other programs newline is also a white space character, but
+`diff' is a line-oriented program and a newline character always ends a
+line. Hence the `-w' or `--ignore-all-space' option does not ignore
+newline-related changes; it ignores only other white space changes.
+
+
+File: diffutils.info, Node: Blank Lines, Next: Specified Lines, Prev: White Space, Up: Comparison
+
+1.3 Suppressing Differences Whose Lines Are All Blank
+=====================================================
+
+The `--ignore-blank-lines' (`-B') option ignores changes that consist
+entirely of blank lines. With this option, for example, a file
+containing
+ 1. A point is that which has no part.
+
+ 2. A line is breadthless length.
+ -- Euclid, The Elements, I
+ is considered identical to a file containing
+ 1. A point is that which has no part.
+ 2. A line is breadthless length.
+
+
+ -- Euclid, The Elements, I
+
+ Normally this option affects only lines that are completely empty,
+but if you also specify an option that ignores trailing spaces, lines
+are also affected if they look empty but contain white space. In other
+words, `-B' is equivalent to `-I '^$'' by default, but it is equivalent
+to `-I '^[[:space:]]*$'' if `-b', `-w' or `-Z' is also specified.
+
+
+File: diffutils.info, Node: Specified Lines, Next: Case Folding, Prev: Blank Lines, Up: Comparison
+
+1.4 Suppressing Differences Whose Lines All Match a Regular Expression
+======================================================================
+
+To ignore insertions and deletions of lines that match a `grep'-style
+regular expression, use the `--ignore-matching-lines=REGEXP' (`-I
+REGEXP') option. You should escape regular expressions that contain
+shell metacharacters to prevent the shell from expanding them. For
+example, `diff -I '^[[:digit:]]'' ignores all changes to lines
+beginning with a digit.
+
+ However, `-I' only ignores the insertion or deletion of lines that
+contain the regular expression if every changed line in the hunk--every
+insertion and every deletion--matches the regular expression. In other
+words, for each nonignorable change, `diff' prints the complete set of
+changes in its vicinity, including the ignorable ones.
+
+ You can specify more than one regular expression for lines to ignore
+by using more than one `-I' option. `diff' tries to match each line
+against each regular expression.
+
+
+File: diffutils.info, Node: Case Folding, Next: Brief, Prev: Specified Lines, Up: Comparison
+
+1.5 Suppressing Case Differences
+================================
+
+GNU `diff' can treat lower case letters as equivalent to their upper
+case counterparts, so that, for example, it considers `Funky Stuff',
+`funky STUFF', and `fUNKy stuFf' to all be the same. To request this,
+use the `-i' or `--ignore-case' option.
+
+
+File: diffutils.info, Node: Brief, Next: Binary, Prev: Case Folding, Up: Comparison
+
+1.6 Summarizing Which Files Differ
+==================================
+
+When you only want to find out whether files are different, and you
+don't care what the differences are, you can use the summary output
+format. In this format, instead of showing the differences between the
+files, `diff' simply reports whether files differ. The `--brief'
+(`-q') option selects this output format.
+
+ This format is especially useful when comparing the contents of two
+directories. It is also much faster than doing the normal line by line
+comparisons, because `diff' can stop analyzing the files as soon as it
+knows that there are any differences.
+
+ You can also get a brief indication of whether two files differ by
+using `cmp'. For files that are identical, `cmp' produces no output.
+When the files differ, by default, `cmp' outputs the byte and line
+number where the first difference occurs, or reports that one file is a
+prefix of the other. You can use the `-s', `--quiet', or `--silent'
+option to suppress that information, so that `cmp' produces no output
+and reports whether the files differ using only its exit status (*note
+Invoking cmp::).
+
+ Unlike `diff', `cmp' cannot compare directories; it can only compare
+two files.
+
+
+File: diffutils.info, Node: Binary, Prev: Brief, Up: Comparison
+
+1.7 Binary Files and Forcing Text Comparisons
+=============================================
+
+If `diff' thinks that either of the two files it is comparing is binary
+(a non-text file), it normally treats that pair of files much as if the
+summary output format had been selected (*note Brief::), and reports
+only that the binary files are different. This is because line by line
+comparisons are usually not meaningful for binary files.
+
+ `diff' determines whether a file is text or binary by checking the
+first few bytes in the file; the exact number of bytes is system
+dependent, but it is typically several thousand. If every byte in that
+part of the file is non-null, `diff' considers the file to be text;
+otherwise it considers the file to be binary.
+
+ Sometimes you might want to force `diff' to consider files to be
+text. For example, you might be comparing text files that contain null
+characters; `diff' would erroneously decide that those are non-text
+files. Or you might be comparing documents that are in a format used
+by a word processing system that uses null characters to indicate
+special formatting. You can force `diff' to consider all files to be
+text files, and compare them line by line, by using the `--text' (`-a')
+option. If the files you compare using this option do not in fact
+contain text, they will probably contain few newline characters, and
+the `diff' output will consist of hunks showing differences between
+long lines of whatever characters the files contain.
+
+ You can also force `diff' to report only whether files differ (but
+not how). Use the `--brief' (`-q') option for this.
+
+ Normally, differing binary files count as trouble because the
+resulting `diff' output does not capture all the differences. This
+trouble causes `diff' to exit with status 2. However, this trouble
+cannot occur with the `--text' (`-a') option, or with the `--brief'
+(`-q') option, as these options both cause `diff' to generate a form of
+output that represents differences as requested.
+
+ In operating systems that distinguish between text and binary files,
+`diff' normally reads and writes all data as text. Use the `--binary'
+option to force `diff' to read and write binary data instead. This
+option has no effect on a POSIX-compliant system like GNU or
+traditional Unix. However, many personal computer operating systems
+represent the end of a line with a carriage return followed by a
+newline. On such systems, `diff' normally ignores these carriage
+returns on input and generates them at the end of each output line, but
+with the `--binary' option `diff' treats each carriage return as just
+another input character, and does not generate a carriage return at the
+end of each output line. This can be useful when dealing with non-text
+files that are meant to be interchanged with POSIX-compliant systems.
+
+ The `--strip-trailing-cr' causes `diff' to treat input lines that
+end in carriage return followed by newline as if they end in plain
+newline. This can be useful when comparing text that is imperfectly
+imported from many personal computer operating systems. This option
+affects how lines are read, which in turn affects how they are compared
+and output.
+
+ If you want to compare two files byte by byte, you can use the `cmp'
+program with the `--verbose' (`-l') option to show the values of each
+differing byte in the two files. With GNU `cmp', you can also use the
+`-b' or `--print-bytes' option to show the ASCII representation of
+those bytes. *Note Invoking cmp::, for more information.
+
+ If `diff3' thinks that any of the files it is comparing is binary (a
+non-text file), it normally reports an error, because such comparisons
+are usually not useful. `diff3' uses the same test as `diff' to decide
+whether a file is binary. As with `diff', if the input files contain a
+few non-text bytes but otherwise are like text files, you can force
+`diff3' to consider all files to be text files and compare them line by
+line by using the `-a' or `--text' option.
+
+
+File: diffutils.info, Node: Output Formats, Next: Incomplete Lines, Prev: Comparison, Up: Top
+
+2 `diff' Output Formats
+***********************
+
+`diff' has several mutually exclusive options for output format. The
+following sections describe each format, illustrating how `diff'
+reports the differences between two sample input files.
+
+* Menu:
+
+* Sample diff Input:: Sample `diff' input files for examples.
+* Context:: Showing differences with the surrounding text.
+* Side by Side:: Showing differences in two columns.
+* Normal:: Showing differences without surrounding text.
+* Scripts:: Generating scripts for other programs.
+* If-then-else:: Merging files with if-then-else.
+
+
+File: diffutils.info, Node: Sample diff Input, Next: Context, Up: Output Formats
+
+2.1 Two Sample Input Files
+==========================
+
+Here are two sample files that we will use in numerous examples to
+illustrate the output of `diff' and how various options can change it.
+
+ This is the file `lao':
+
+ The Way that can be told of is not the eternal Way;
+ The name that can be named is not the eternal name.
+ The Nameless is the origin of Heaven and Earth;
+ The Named is the mother of all things.
+ Therefore let there always be non-being,
+ so we may see their subtlety,
+ And let there always be being,
+ so we may see their outcome.
+ The two are the same,
+ But after they are produced,
+ they have different names.
+
+ This is the file `tzu':
+
+ The Nameless is the origin of Heaven and Earth;
+ The named is the mother of all things.
+
+ Therefore let there always be non-being,
+ so we may see their subtlety,
+ And let there always be being,
+ so we may see their outcome.
+ The two are the same,
+ But after they are produced,
+ they have different names.
+ They both may be called deep and profound.
+ Deeper and more profound,
+ The door of all subtleties!
+
+ In this example, the first hunk contains just the first two lines of
+`lao', the second hunk contains the fourth line of `lao' opposing the
+second and third lines of `tzu', and the last hunk contains just the
+last three lines of `tzu'.
+
+
+File: diffutils.info, Node: Context, Next: Side by Side, Prev: Sample diff Input, Up: Output Formats
+
+2.2 Showing Differences in Their Context
+========================================
+
+Usually, when you are looking at the differences between files, you will
+also want to see the parts of the files near the lines that differ, to
+help you understand exactly what has changed. These nearby parts of the
+files are called the "context".
+
+ GNU `diff' provides two output formats that show context around the
+differing lines: "context format" and "unified format". It can
+optionally show in which function or section of the file the differing
+lines are found.
+
+ If you are distributing new versions of files to other people in the
+form of `diff' output, you should use one of the output formats that
+show context so that they can apply the diffs even if they have made
+small changes of their own to the files. `patch' can apply the diffs
+in this case by searching in the files for the lines of context around
+the differing lines; if those lines are actually a few lines away from
+where the diff says they are, `patch' can adjust the line numbers
+accordingly and still apply the diff correctly. *Note Imperfect::, for
+more information on using `patch' to apply imperfect diffs.
+
+* Menu:
+
+* Context Format:: An output format that shows surrounding lines.
+* Unified Format:: A more compact output format that shows context.
+* Sections:: Showing which sections of the files differences are in.
+* Alternate Names:: Showing alternate file names in context headers.
+
+
+File: diffutils.info, Node: Context Format, Next: Unified Format, Up: Context
+
+2.2.1 Context Format
+--------------------
+
+The context output format shows several lines of context around the
+lines that differ. It is the standard format for distributing updates
+to source code.
+
+ To select this output format, use the `--context[=LINES]' (`-C
+LINES') or `-c' option. The argument LINES that some of these options
+take is the number of lines of context to show. If you do not specify
+LINES, it defaults to three. For proper operation, `patch' typically
+needs at least two lines of context.
+
+* Menu:
+
+* Example Context:: Sample output in context format.
+* Less Context:: Another sample with less context.
+* Detailed Context:: A detailed description of the context output format.
+
+
+File: diffutils.info, Node: Example Context, Next: Less Context, Up: Context Format
+
+2.2.1.1 An Example of Context Format
+....................................
+
+Here is the output of `diff -c lao tzu' (*note Sample diff Input::, for
+the complete contents of the two files). Notice that up to three lines
+that are not different are shown around each line that is different;
+they are the context lines. Also notice that the first two hunks have
+run together, because their contents overlap.
+
+ *** lao 2002-02-21 23:30:39.942229878 -0800
+ --- tzu 2002-02-21 23:30:50.442260588 -0800
+ ***************
+ *** 1,7 ****
+ - The Way that can be told of is not the eternal Way;
+ - The name that can be named is not the eternal name.
+ The Nameless is the origin of Heaven and Earth;
+ ! The Named is the mother of all things.
+ Therefore let there always be non-being,
+ so we may see their subtlety,
+ And let there always be being,
+ --- 1,6 ----
+ The Nameless is the origin of Heaven and Earth;
+ ! The named is the mother of all things.
+ !
+ Therefore let there always be non-being,
+ so we may see their subtlety,
+ And let there always be being,
+ ***************
+ *** 9,11 ****
+ --- 8,13 ----
+ The two are the same,
+ But after they are produced,
+ they have different names.
+ + They both may be called deep and profound.
+ + Deeper and more profound,
+ + The door of all subtleties!
+
+
+File: diffutils.info, Node: Less Context, Next: Detailed Context, Prev: Example Context, Up: Context Format
+
+2.2.1.2 An Example of Context Format with Less Context
+......................................................
+
+Here is the output of `diff -C 1 lao tzu' (*note Sample diff Input::,
+for the complete contents of the two files). Notice that at most one
+context line is reported here.
+
+ *** lao 2002-02-21 23:30:39.942229878 -0800
+ --- tzu 2002-02-21 23:30:50.442260588 -0800
+ ***************
+ *** 1,5 ****
+ - The Way that can be told of is not the eternal Way;
+ - The name that can be named is not the eternal name.
+ The Nameless is the origin of Heaven and Earth;
+ ! The Named is the mother of all things.
+ Therefore let there always be non-being,
+ --- 1,4 ----
+ The Nameless is the origin of Heaven and Earth;
+ ! The named is the mother of all things.
+ !
+ Therefore let there always be non-being,
+ ***************
+ *** 11 ****
+ --- 10,13 ----
+ they have different names.
+ + They both may be called deep and profound.
+ + Deeper and more profound,
+ + The door of all subtleties!
+
+
+File: diffutils.info, Node: Detailed Context, Prev: Less Context, Up: Context Format
+
+2.2.1.3 Detailed Description of Context Format
+..............................................
+
+The context output format starts with a two-line header, which looks
+like this:
+
+ *** FROM-FILE FROM-FILE-MODIFICATION-TIME
+ --- TO-FILE TO-FILE-MODIFICATION TIME
+
+The time stamp normally looks like `2002-02-21 23:30:39.942229878
+-0800' to indicate the date, time with fractional seconds, and time
+zone in Internet RFC 2822 format
+(ftp://ftp.isi.edu/in-notes/rfc2822.txt). (The fractional seconds are
+omitted on hosts that do not support fractional time stamps.) However,
+a traditional time stamp like `Thu Feb 21 23:30:39 2002' is used if the
+`LC_TIME' locale category is either `C' or `POSIX'.
+
+ You can change the header's content with the `--label=LABEL' option;
+see *note Alternate Names::.
+
+ Next come one or more hunks of differences; each hunk shows one area
+where the files differ. Context format hunks look like this:
+
+ ***************
+ *** FROM-FILE-LINE-NUMBERS ****
+ FROM-FILE-LINE
+ FROM-FILE-LINE...
+ --- TO-FILE-LINE-NUMBERS ----
+ TO-FILE-LINE
+ TO-FILE-LINE...
+
+ If a hunk contains two or more lines, its line numbers look like
+`START,END'. Otherwise only its end line number appears. An empty
+hunk is considered to end at the line that precedes the hunk.
+
+ The lines of context around the lines that differ start with two
+space characters. The lines that differ between the two files start
+with one of the following indicator characters, followed by a space
+character:
+
+`!'
+ A line that is part of a group of one or more lines that changed
+ between the two files. There is a corresponding group of lines
+ marked with `!' in the part of this hunk for the other file.
+
+`+'
+ An "inserted" line in the second file that corresponds to nothing
+ in the first file.
+
+`-'
+ A "deleted" line in the first file that corresponds to nothing in
+ the second file.
+
+ If all of the changes in a hunk are insertions, the lines of
+FROM-FILE are omitted. If all of the changes are deletions, the lines
+of TO-FILE are omitted.
+
+
+File: diffutils.info, Node: Unified Format, Next: Sections, Prev: Context Format, Up: Context
+
+2.2.2 Unified Format
+--------------------
+
+The unified output format is a variation on the context format that is
+more compact because it omits redundant context lines. To select this
+output format, use the `--unified[=LINES]' (`-U LINES'), or `-u' option.
+The argument LINES is the number of lines of context to show. When it
+is not given, it defaults to three.
+
+ At present, only GNU `diff' can produce this format and only GNU
+`patch' can automatically apply diffs in this format. For proper
+operation, `patch' typically needs at least three lines of context.
+
+* Menu:
+
+* Example Unified:: Sample output in unified format.
+* Detailed Unified:: A detailed description of unified format.
+
+
+File: diffutils.info, Node: Example Unified, Next: Detailed Unified, Up: Unified Format
+
+2.2.2.1 An Example of Unified Format
+....................................
+
+Here is the output of the command `diff -u lao tzu' (*note Sample diff
+Input::, for the complete contents of the two files):
+
+ --- lao 2002-02-21 23:30:39.942229878 -0800
+ +++ tzu 2002-02-21 23:30:50.442260588 -0800
+ @@ -1,7 +1,6 @@
+ -The Way that can be told of is not the eternal Way;
+ -The name that can be named is not the eternal name.
+ The Nameless is the origin of Heaven and Earth;
+ -The Named is the mother of all things.
+ +The named is the mother of all things.
+ +
+ Therefore let there always be non-being,
+ so we may see their subtlety,
+ And let there always be being,
+ @@ -9,3 +8,6 @@
+ The two are the same,
+ But after they are produced,
+ they have different names.
+ +They both may be called deep and profound.
+ +Deeper and more profound,
+ +The door of all subtleties!
+
+
+File: diffutils.info, Node: Detailed Unified, Prev: Example Unified, Up: Unified Format
+
+2.2.2.2 Detailed Description of Unified Format
+..............................................
+
+The unified output format starts with a two-line header, which looks
+like this:
+
+ --- FROM-FILE FROM-FILE-MODIFICATION-TIME
+ +++ TO-FILE TO-FILE-MODIFICATION-TIME
+
+The time stamp looks like `2002-02-21 23:30:39.942229878 -0800' to
+indicate the date, time with fractional seconds, and time zone. The
+fractional seconds are omitted on hosts that do not support fractional
+time stamps.
+
+ You can change the header's content with the `--label=LABEL' option;
+see *Note Alternate Names::.
+
+ Next come one or more hunks of differences; each hunk shows one area
+where the files differ. Unified format hunks look like this:
+
+ @@ FROM-FILE-LINE-NUMBERS TO-FILE-LINE-NUMBERS @@
+ LINE-FROM-EITHER-FILE
+ LINE-FROM-EITHER-FILE...
+
+ If a hunk contains just one line, only its start line number appears.
+Otherwise its line numbers look like `START,COUNT'. An empty hunk is
+considered to start at the line that follows the hunk.
+
+ If a hunk and its context contain two or more lines, its line
+numbers look like `START,COUNT'. Otherwise only its end line number
+appears. An empty hunk is considered to end at the line that precedes
+the hunk.
+
+ The lines common to both files begin with a space character. The
+lines that actually differ between the two files have one of the
+following indicator characters in the left print column:
+
+`+'
+ A line was added here to the first file.
+
+`-'
+ A line was removed here from the first file.
+
+
+File: diffutils.info, Node: Sections, Next: Alternate Names, Prev: Unified Format, Up: Context
+
+2.2.3 Showing Which Sections Differences Are in
+-----------------------------------------------
+
+Sometimes you might want to know which part of the files each change
+falls in. If the files are source code, this could mean which function
+was changed. If the files are documents, it could mean which chapter
+or appendix was changed. GNU `diff' can show this by displaying the
+nearest section heading line that precedes the differing lines. Which
+lines are "section headings" is determined by a regular expression.
+
+* Menu:
+
+* Specified Headings:: Showing headings that match regular expressions.
+* C Function Headings:: Showing headings of C functions.
+
+
+File: diffutils.info, Node: Specified Headings, Next: C Function Headings, Up: Sections
+
+2.2.3.1 Showing Lines That Match Regular Expressions
+....................................................
+
+To show in which sections differences occur for files that are not
+source code for C or similar languages, use the
+`--show-function-line=REGEXP' (`-F REGEXP') option. `diff' considers
+lines that match the `grep'-style regular expression REGEXP to be the
+beginning of a section of the file. Here are suggested regular
+expressions for some common languages:
+
+`^[[:alpha:]$_]'
+ C, C++, Prolog
+
+`^('
+ Lisp
+
+`^@node'
+ Texinfo
+
+ This option does not automatically select an output format; in order
+to use it, you must select the context format (*note Context Format::)
+or unified format (*note Unified Format::). In other output formats it
+has no effect.
+
+ The `--show-function-line' (`-F') option finds the nearest unchanged
+line that precedes each hunk of differences and matches the given
+regular expression. Then it adds that line to the end of the line of
+asterisks in the context format, or to the `@@' line in unified format.
+If no matching line exists, this option leaves the output for that hunk
+unchanged. If that line is more than 40 characters long, it outputs
+only the first 40 characters. You can specify more than one regular
+expression for such lines; `diff' tries to match each line against each
+regular expression, starting with the last one given. This means that
+you can use `-p' and `-F' together, if you wish.
+
+
+File: diffutils.info, Node: C Function Headings, Prev: Specified Headings, Up: Sections
+
+2.2.3.2 Showing C Function Headings
+...................................
+
+To show in which functions differences occur for C and similar
+languages, you can use the `--show-c-function' (`-p') option. This
+option automatically defaults to the context output format (*note
+Context Format::), with the default number of lines of context. You
+can override that number with `-C LINES' elsewhere in the command line.
+You can override both the format and the number with `-U LINES'
+elsewhere in the command line.
+
+ The `--show-c-function' (`-p') option is equivalent to `-F
+'^[[:alpha:]$_]'' if the unified format is specified, otherwise `-c -F
+'^[[:alpha:]$_]'' (*note Specified Headings::). GNU `diff' provides
+this option for the sake of convenience.
+
+
+File: diffutils.info, Node: Alternate Names, Prev: Sections, Up: Context
+
+2.2.4 Showing Alternate File Names
+----------------------------------
+
+If you are comparing two files that have meaningless or uninformative
+names, you might want `diff' to show alternate names in the header of
+the context and unified output formats. To do this, use the
+`--label=LABEL' option. The first time you give this option, its
+argument replaces the name and date of the first file in the header;
+the second time, its argument replaces the name and date of the second
+file. If you give this option more than twice, `diff' reports an
+error. The `--label' option does not affect the file names in the `pr'
+header when the `-l' or `--paginate' option is used (*note
+Pagination::).
+
+ Here are the first two lines of the output from `diff -C 2
+--label=original --label=modified lao tzu':
+
+ *** original
+ --- modified
+
+
+File: diffutils.info, Node: Side by Side, Next: Normal, Prev: Context, Up: Output Formats
+
+2.3 Showing Differences Side by Side
+====================================
+
+`diff' can produce a side by side difference listing of two files. The
+files are listed in two columns with a gutter between them. The gutter
+contains one of the following markers:
+
+white space
+ The corresponding lines are in common. That is, either the lines
+ are identical, or the difference is ignored because of one of the
+ `--ignore' options (*note White Space::).
+
+`|'
+ The corresponding lines differ, and they are either both complete
+ or both incomplete.
+
+`<'
+ The files differ and only the first file contains the line.
+
+`>'
+ The files differ and only the second file contains the line.
+
+`('
+ Only the first file contains the line, but the difference is
+ ignored.
+
+`)'
+ Only the second file contains the line, but the difference is
+ ignored.
+
+`\'
+ The corresponding lines differ, and only the first line is
+ incomplete.
+
+`/'
+ The corresponding lines differ, and only the second line is
+ incomplete.
+
+ Normally, an output line is incomplete if and only if the lines that
+it contains are incomplete; *Note Incomplete Lines::. However, when an
+output line represents two differing lines, one might be incomplete
+while the other is not. In this case, the output line is complete, but
+its the gutter is marked `\' if the first line is incomplete, `/' if
+the second line is.
+
+ Side by side format is sometimes easiest to read, but it has
+limitations. It generates much wider output than usual, and truncates
+lines that are too long to fit. Also, it relies on lining up output
+more heavily than usual, so its output looks particularly bad if you
+use varying width fonts, nonstandard tab stops, or nonprinting
+characters.
+
+ You can use the `sdiff' command to interactively merge side by side
+differences. *Note Interactive Merging::, for more information on
+merging files.
+
+* Menu:
+
+* Side by Side Format:: Controlling side by side output format.
+* Example Side by Side:: Sample side by side output.
+
+
+File: diffutils.info, Node: Side by Side Format, Next: Example Side by Side, Up: Side by Side
+
+2.3.1 Controlling Side by Side Format
+-------------------------------------
+
+The `--side-by-side' (`-y') option selects side by side format.
+Because side by side output lines contain two input lines, the output
+is wider than usual: normally 130 print columns, which can fit onto a
+traditional printer line. You can set the width of the output with the
+`--width=COLUMNS' (`-W COLUMNS') option. The output is split into two
+halves of equal width, separated by a small gutter to mark differences;
+the right half is aligned to a tab stop so that tabs line up. Input
+lines that are too long to fit in half of an output line are truncated
+for output.
+
+ The `--left-column' option prints only the left column of two common
+lines. The `--suppress-common-lines' option suppresses common lines
+entirely.
+
+
+File: diffutils.info, Node: Example Side by Side, Prev: Side by Side Format, Up: Side by Side
+
+2.3.2 An Example of Side by Side Format
+---------------------------------------
+
+Here is the output of the command `diff -y -W 72 lao tzu' (*note Sample
+diff Input::, for the complete contents of the two files).
+
+ The Way that can be told of is n <
+ The name that can be named is no <
+ The Nameless is the origin of He The Nameless is the origin of He
+ The Named is the mother of all t | The named is the mother of all t
+ >
+ Therefore let there always be no Therefore let there always be no
+ so we may see their subtlety, so we may see their subtlety,
+ And let there always be being, And let there always be being,
+ so we may see their outcome. so we may see their outcome.
+ The two are the same, The two are the same,
+ But after they are produced, But after they are produced,
+ they have different names. they have different names.
+ > They both may be called deep and
+ > Deeper and more profound,
+ > The door of all subtleties!
+
+
+File: diffutils.info, Node: Normal, Next: Scripts, Prev: Side by Side, Up: Output Formats
+
+2.4 Showing Differences Without Context
+=======================================
+
+The "normal" `diff' output format shows each hunk of differences
+without any surrounding context. Sometimes such output is the clearest
+way to see how lines have changed, without the clutter of nearby
+unchanged lines (although you can get similar results with the context
+or unified formats by using 0 lines of context). However, this format
+is no longer widely used for sending out patches; for that purpose, the
+context format (*note Context Format::) and the unified format (*note
+Unified Format::) are superior. Normal format is the default for
+compatibility with older versions of `diff' and the POSIX standard.
+Use the `--normal' option to select this output format explicitly.
+
+* Menu:
+
+* Example Normal:: Sample output in the normal format.
+* Detailed Normal:: A detailed description of normal output format.
+
+
+File: diffutils.info, Node: Example Normal, Next: Detailed Normal, Up: Normal
+
+2.4.1 An Example of Normal Format
+---------------------------------
+
+Here is the output of the command `diff lao tzu' (*note Sample diff
+Input::, for the complete contents of the two files). Notice that it
+shows only the lines that are different between the two files.
+
+ 1,2d0
+ < The Way that can be told of is not the eternal Way;
+ < The name that can be named is not the eternal name.
+ 4c2,3
+ < The Named is the mother of all things.
+ ---
+ > The named is the mother of all things.
+ >
+ 11a11,13
+ > They both may be called deep and profound.
+ > Deeper and more profound,
+ > The door of all subtleties!
+
+
+File: diffutils.info, Node: Detailed Normal, Prev: Example Normal, Up: Normal
+
+2.4.2 Detailed Description of Normal Format
+-------------------------------------------
+
+The normal output format consists of one or more hunks of differences;
+each hunk shows one area where the files differ. Normal format hunks
+look like this:
+
+ CHANGE-COMMAND
+ < FROM-FILE-LINE
+ < FROM-FILE-LINE...
+ ---
+ > TO-FILE-LINE
+ > TO-FILE-LINE...
+
+ There are three types of change commands. Each consists of a line
+number or comma-separated range of lines in the first file, a single
+character indicating the kind of change to make, and a line number or
+comma-separated range of lines in the second file. All line numbers are
+the original line numbers in each file. The types of change commands
+are:
+
+`LaR'
+ Add the lines in range R of the second file after line L of the
+ first file. For example, `8a12,15' means append lines 12-15 of
+ file 2 after line 8 of file 1; or, if changing file 2 into file 1,
+ delete lines 12-15 of file 2.
+
+`FcT'
+ Replace the lines in range F of the first file with lines in range
+ T of the second file. This is like a combined add and delete, but
+ more compact. For example, `5,7c8,10' means change lines 5-7 of
+ file 1 to read as lines 8-10 of file 2; or, if changing file 2 into
+ file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1.
+
+`RdL'
+ Delete the lines in range R from the first file; line L is where
+ they would have appeared in the second file had they not been
+ deleted. For example, `5,7d3' means delete lines 5-7 of file 1;
+ or, if changing file 2 into file 1, append lines 5-7 of file 1
+ after line 3 of file 2.
+
+
+File: diffutils.info, Node: Scripts, Next: If-then-else, Prev: Normal, Up: Output Formats
+
+2.5 Making Edit Scripts
+=======================
+
+Several output modes produce command scripts for editing FROM-FILE to
+produce TO-FILE.
+
+* Menu:
+
+* ed Scripts:: Using `diff' to produce commands for `ed'.
+* Forward ed:: Making forward `ed' scripts.
+* RCS:: A special `diff' output format used by RCS.
+
+
+File: diffutils.info, Node: ed Scripts, Next: Forward ed, Up: Scripts
+
+2.5.1 `ed' Scripts
+------------------
+
+`diff' can produce commands that direct the `ed' text editor to change
+the first file into the second file. Long ago, this was the only
+output mode that was suitable for editing one file into another
+automatically; today, with `patch', it is almost obsolete. Use the
+`--ed' (`-e') option to select this output format.
+
+ Like the normal format (*note Normal::), this output format does not
+show any context; unlike the normal format, it does not include the
+information necessary to apply the diff in reverse (to produce the first
+file if all you have is the second file and the diff).
+
+ If the file `d' contains the output of `diff -e old new', then the
+command `(cat d && echo w) | ed - old' edits `old' to make it a copy of
+`new'. More generally, if `d1', `d2', ..., `dN' contain the outputs of
+`diff -e old new1', `diff -e new1 new2', ..., `diff -e newN-1 newN',
+respectively, then the command `(cat d1 d2 ... dN && echo w) | ed -
+old' edits `old' to make it a copy of `newN'.
+
+* Menu:
+
+* Example ed:: A sample `ed' script.
+* Detailed ed:: A detailed description of `ed' format.
+
+
+File: diffutils.info, Node: Example ed, Next: Detailed ed, Up: ed Scripts
+
+2.5.1.1 Example `ed' Script
+...........................
+
+Here is the output of `diff -e lao tzu' (*note Sample diff Input::, for
+the complete contents of the two files):
+
+ 11a
+ They both may be called deep and profound.
+ Deeper and more profound,
+ The door of all subtleties!
+ .
+ 4c
+ The named is the mother of all things.
+
+ .
+ 1,2d
+
+
+File: diffutils.info, Node: Detailed ed, Prev: Example ed, Up: ed Scripts
+
+2.5.1.2 Detailed Description of `ed' Format
+...........................................
+
+The `ed' output format consists of one or more hunks of differences.
+The changes closest to the ends of the files come first so that
+commands that change the number of lines do not affect how `ed'
+interprets line numbers in succeeding commands. `ed' format hunks look
+like this:
+
+ CHANGE-COMMAND
+ TO-FILE-LINE
+ TO-FILE-LINE...
+ .
+
+ Because `ed' uses a single period on a line to indicate the end of
+input, GNU `diff' protects lines of changes that contain a single
+period on a line by writing two periods instead, then writing a
+subsequent `ed' command to change the two periods into one. The `ed'
+format cannot represent an incomplete line, so if the second file ends
+in a changed incomplete line, `diff' reports an error and then pretends
+that a newline was appended.
+
+ There are three types of change commands. Each consists of a line
+number or comma-separated range of lines in the first file and a single
+character indicating the kind of change to make. All line numbers are
+the original line numbers in the file. The types of change commands
+are:
+
+`La'
+ Add text from the second file after line L in the first file. For
+ example, `8a' means to add the following lines after line 8 of file
+ 1.
+
+`Rc'
+ Replace the lines in range R in the first file with the following
+ lines. Like a combined add and delete, but more compact. For
+ example, `5,7c' means change lines 5-7 of file 1 to read as the
+ text file 2.
+
+`Rd'
+ Delete the lines in range R from the first file. For example,
+ `5,7d' means delete lines 5-7 of file 1.
+
+
+File: diffutils.info, Node: Forward ed, Next: RCS, Prev: ed Scripts, Up: Scripts
+
+2.5.2 Forward `ed' Scripts
+--------------------------
+
+`diff' can produce output that is like an `ed' script, but with hunks
+in forward (front to back) order. The format of the commands is also
+changed slightly: command characters precede the lines they modify,
+spaces separate line numbers in ranges, and no attempt is made to
+disambiguate hunk lines consisting of a single period. Like `ed'
+format, forward `ed' format cannot represent incomplete lines.
+
+ Forward `ed' format is not very useful, because neither `ed' nor
+`patch' can apply diffs in this format. It exists mainly for
+compatibility with older versions of `diff'. Use the `-f' or
+`--forward-ed' option to select it.
+
+
+File: diffutils.info, Node: RCS, Prev: Forward ed, Up: Scripts
+
+2.5.3 RCS Scripts
+-----------------
+
+The RCS output format is designed specifically for use by the Revision
+Control System, which is a set of free programs used for organizing
+different versions and systems of files. Use the `--rcs' (`-n') option
+to select this output format. It is like the forward `ed' format
+(*note Forward ed::), but it can represent arbitrary changes to the
+contents of a file because it avoids the forward `ed' format's problems
+with lines consisting of a single period and with incomplete lines.
+Instead of ending text sections with a line consisting of a single
+period, each command specifies the number of lines it affects; a
+combination of the `a' and `d' commands are used instead of `c'. Also,
+if the second file ends in a changed incomplete line, then the output
+also ends in an incomplete line.
+
+ Here is the output of `diff -n lao tzu' (*note Sample diff Input::,
+for the complete contents of the two files):
+
+ d1 2
+ d4 1
+ a4 2
+ The named is the mother of all things.
+
+ a11 3
+ They both may be called deep and profound.
+ Deeper and more profound,
+ The door of all subtleties!
+
+
+File: diffutils.info, Node: If-then-else, Prev: Scripts, Up: Output Formats
+
+2.6 Merging Files with If-then-else
+===================================
+
+You can use `diff' to merge two files of C source code. The output of
+`diff' in this format contains all the lines of both files. Lines
+common to both files are output just once; the differing parts are
+separated by the C preprocessor directives `#ifdef NAME' or `#ifndef
+NAME', `#else', and `#endif'. When compiling the output, you select
+which version to use by either defining or leaving undefined the macro
+NAME.
+
+ To merge two files, use `diff' with the `-D NAME' or `--ifdef=NAME'
+option. The argument NAME is the C preprocessor identifier to use in
+the `#ifdef' and `#ifndef' directives.
+
+ For example, if you change an instance of `wait (&s)' to `waitpid
+(-1, &s, 0)' and then merge the old and new files with the
+`--ifdef=HAVE_WAITPID' option, then the affected part of your code
+might look like this:
+
+ do {
+ #ifndef HAVE_WAITPID
+ if ((w = wait (&s)) < 0 && errno != EINTR)
+ #else /* HAVE_WAITPID */
+ if ((w = waitpid (-1, &s, 0)) < 0 && errno != EINTR)
+ #endif /* HAVE_WAITPID */
+ return w;
+ } while (w != child);
+
+ You can specify formats for languages other than C by using line
+group formats and line formats, as described in the next sections.
+
+* Menu:
+
+* Line Group Formats:: Formats for general if-then-else line groups.
+* Line Formats:: Formats for each line in a line group.
+* Example If-then-else:: Sample if-then-else format output.
+* Detailed If-then-else:: A detailed description of if-then-else format.
+
+
+File: diffutils.info, Node: Line Group Formats, Next: Line Formats, Up: If-then-else
+
+2.6.1 Line Group Formats
+------------------------
+
+Line group formats let you specify formats suitable for many
+applications that allow if-then-else input, including programming
+languages and text formatting languages. A line group format specifies
+the output format for a contiguous group of similar lines.
+
+ For example, the following command compares the TeX files `old' and
+`new', and outputs a merged file in which old regions are surrounded by
+`\begin{em}'-`\end{em}' lines, and new regions are surrounded by
+`\begin{bf}'-`\end{bf}' lines.
+
+ diff \
+ --old-group-format='\begin{em}
+ %<\end{em}
+ ' \
+ --new-group-format='\begin{bf}
+ %>\end{bf}
+ ' \
+ old new
+
+ The following command is equivalent to the above example, but it is a
+little more verbose, because it spells out the default line group
+formats.
+
+ diff \
+ --old-group-format='\begin{em}
+ %<\end{em}
+ ' \
+ --new-group-format='\begin{bf}
+ %>\end{bf}
+ ' \
+ --unchanged-group-format='%=' \
+ --changed-group-format='\begin{em}
+ %<\end{em}
+ \begin{bf}
+ %>\end{bf}
+ ' \
+ old new
+
+ Here is a more advanced example, which outputs a diff listing with
+headers containing line numbers in a "plain English" style.
+
+ diff \
+ --unchanged-group-format='' \
+ --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
+ %<' \
+ --new-group-format='-------- %dN line%(N=1?:s) added after %de:
+ %>' \
+ --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
+ %<-------- to:
+ %>' \
+ old new
+
+ To specify a line group format, use `diff' with one of the options
+listed below. You can specify up to four line group formats, one for
+each kind of line group. You should quote FORMAT, because it typically
+contains shell metacharacters.
+
+`--old-group-format=FORMAT'
+ These line groups are hunks containing only lines from the first
+ file. The default old group format is the same as the changed
+ group format if it is specified; otherwise it is a format that
+ outputs the line group as-is.
+
+`--new-group-format=FORMAT'
+ These line groups are hunks containing only lines from the second
+ file. The default new group format is same as the changed group
+ format if it is specified; otherwise it is a format that outputs
+ the line group as-is.
+
+`--changed-group-format=FORMAT'
+ These line groups are hunks containing lines from both files. The
+ default changed group format is the concatenation of the old and
+ new group formats.
+
+`--unchanged-group-format=FORMAT'
+ These line groups contain lines common to both files. The default
+ unchanged group format is a format that outputs the line group
+ as-is.
+
+ In a line group format, ordinary characters represent themselves;
+conversion specifications start with `%' and have one of the following
+forms.
+
+`%<'
+ stands for the lines from the first file, including the trailing
+ newline. Each line is formatted according to the old line format
+ (*note Line Formats::).
+
+`%>'
+ stands for the lines from the second file, including the trailing
+ newline. Each line is formatted according to the new line format.
+
+`%='
+ stands for the lines common to both files, including the trailing
+ newline. Each line is formatted according to the unchanged line
+ format.
+
+`%%'
+ stands for `%'.
+
+`%c'C''
+ where C is a single character, stands for C. C may not be a
+ backslash or an apostrophe. For example, `%c':'' stands for a
+ colon, even inside the then-part of an if-then-else format, which
+ a colon would normally terminate.
+
+`%c'\O''
+ where O is a string of 1, 2, or 3 octal digits, stands for the
+ character with octal code O. For example, `%c'\0'' stands for a
+ null character.
+
+`FN'
+ where F is a `printf' conversion specification and N is one of the
+ following letters, stands for N's value formatted with F.
+
+ `e'
+ The line number of the line just before the group in the old
+ file.
+
+ `f'
+ The line number of the first line in the group in the old
+ file; equals E + 1.
+
+ `l'
+ The line number of the last line in the group in the old file.
+
+ `m'
+ The line number of the line just after the group in the old
+ file; equals L + 1.
+
+ `n'
+ The number of lines in the group in the old file; equals L -
+ F + 1.
+
+ `E, F, L, M, N'
+ Likewise, for lines in the new file.
+
+
+ The `printf' conversion specification can be `%d', `%o', `%x', or
+ `%X', specifying decimal, octal, lower case hexadecimal, or upper
+ case hexadecimal output respectively. After the `%' the following
+ options can appear in sequence: a series of zero or more flags; an
+ integer specifying the minimum field width; and a period followed
+ by an optional integer specifying the minimum number of digits.
+ The flags are `-' for left-justification, `'' for separating the
+ digit into groups as specified by the `LC_NUMERIC' locale category,
+ and `0' for padding with zeros instead of spaces. For example,
+ `%5dN' prints the number of new lines in the group in a field of
+ width 5 characters, using the `printf' format `"%5d"'.
+
+`(A=B?T:E)'
+ If A equals B then T else E. A and B are each either a decimal
+ constant or a single letter interpreted as above. This format
+ spec is equivalent to T if A's value equals B's; otherwise it is
+ equivalent to E.
+
+ For example, `%(N=0?no:%dN) line%(N=1?:s)' is equivalent to `no
+ lines' if N (the number of lines in the group in the new file) is
+ 0, to `1 line' if N is 1, and to `%dN lines' otherwise.
+
+
+File: diffutils.info, Node: Line Formats, Next: Example If-then-else, Prev: Line Group Formats, Up: If-then-else
+
+2.6.2 Line Formats
+------------------
+
+Line formats control how each line taken from an input file is output
+as part of a line group in if-then-else format.
+
+ For example, the following command outputs text with a one-character
+change indicator to the left of the text. The first character of output
+is `-' for deleted lines, `|' for added lines, and a space for
+unchanged lines. The formats contain newline characters where newlines
+are desired on output.
+
+ diff \
+ --old-line-format='-%l
+ ' \
+ --new-line-format='|%l
+ ' \
+ --unchanged-line-format=' %l
+ ' \
+ old new
+
+ To specify a line format, use one of the following options. You
+should quote FORMAT, since it often contains shell metacharacters.
+
+`--old-line-format=FORMAT'
+ formats lines just from the first file.
+
+`--new-line-format=FORMAT'
+ formats lines just from the second file.
+
+`--unchanged-line-format=FORMAT'
+ formats lines common to both files.
+
+`--line-format=FORMAT'
+ formats all lines; in effect, it sets all three above options
+ simultaneously.
+
+ In a line format, ordinary characters represent themselves;
+conversion specifications start with `%' and have one of the following
+forms.
+
+`%l'
+ stands for the contents of the line, not counting its trailing
+ newline (if any). This format ignores whether the line is
+ incomplete; *Note Incomplete Lines::.
+
+`%L'
+ stands for the contents of the line, including its trailing newline
+ (if any). If a line is incomplete, this format preserves its
+ incompleteness.
+
+`%%'
+ stands for `%'.
+
+`%c'C''
+ where C is a single character, stands for C. C may not be a
+ backslash or an apostrophe. For example, `%c':'' stands for a
+ colon.
+
+`%c'\O''
+ where O is a string of 1, 2, or 3 octal digits, stands for the
+ character with octal code O. For example, `%c'\0'' stands for a
+ null character.
+
+`Fn'
+ where F is a `printf' conversion specification, stands for the
+ line number formatted with F. For example, `%.5dn' prints the
+ line number using the `printf' format `"%.5d"'. *Note Line Group
+ Formats::, for more about printf conversion specifications.
+
+
+ The default line format is `%l' followed by a newline character.
+
+ If the input contains tab characters and it is important that they
+line up on output, you should ensure that `%l' or `%L' in a line format
+is just after a tab stop (e.g. by preceding `%l' or `%L' with a tab
+character), or you should use the `-t' or `--expand-tabs' option.
+
+ Taken together, the line and line group formats let you specify many
+different formats. For example, the following command uses a format
+similar to normal `diff' format. You can tailor this command to get
+fine control over `diff' output.
+
+ diff \
+ --old-line-format='< %l
+ ' \
+ --new-line-format='> %l
+ ' \
+ --old-group-format='%df%(f=l?:,%dl)d%dE
+ %<' \
+ --new-group-format='%dea%dF%(F=L?:,%dL)
+ %>' \
+ --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+ %<---
+ %>' \
+ --unchanged-group-format='' \
+ old new
+
+
+File: diffutils.info, Node: Example If-then-else, Next: Detailed If-then-else, Prev: Line Formats, Up: If-then-else
+
+2.6.3 An Example of If-then-else Format
+---------------------------------------
+
+Here is the output of `diff -DTWO lao tzu' (*note Sample diff Input::,
+for the complete contents of the two files):
+
+ #ifndef TWO
+ The Way that can be told of is not the eternal Way;
+ The name that can be named is not the eternal name.
+ #endif /* ! TWO */
+ The Nameless is the origin of Heaven and Earth;
+ #ifndef TWO
+ The Named is the mother of all things.
+ #else /* TWO */
+ The named is the mother of all things.
+
+ #endif /* TWO */
+ Therefore let there always be non-being,
+ so we may see their subtlety,
+ And let there always be being,
+ so we may see their outcome.
+ The two are the same,
+ But after they are produced,
+ they have different names.
+ #ifdef TWO
+ They both may be called deep and profound.
+ Deeper and more profound,
+ The door of all subtleties!
+ #endif /* TWO */
+
+
+File: diffutils.info, Node: Detailed If-then-else, Prev: Example If-then-else, Up: If-then-else
+
+2.6.4 Detailed Description of If-then-else Format
+-------------------------------------------------
+
+For lines common to both files, `diff' uses the unchanged line group
+format. For each hunk of differences in the merged output format, if
+the hunk contains only lines from the first file, `diff' uses the old
+line group format; if the hunk contains only lines from the second
+file, `diff' uses the new group format; otherwise, `diff' uses the
+changed group format.
+
+ The old, new, and unchanged line formats specify the output format of
+lines from the first file, lines from the second file, and lines common
+to both files, respectively.
+
+ The option `--ifdef=NAME' is equivalent to the following sequence of
+options using shell syntax:
+
+ --old-group-format='#ifndef NAME
+ %<#endif /* ! NAME */
+ ' \
+ --new-group-format='#ifdef NAME
+ %>#endif /* NAME */
+ ' \
+ --unchanged-group-format='%=' \
+ --changed-group-format='#ifndef NAME
+ %<#else /* NAME */
+ %>#endif /* NAME */
+ '
+
+ You should carefully check the `diff' output for proper nesting.
+For example, when using the `-D NAME' or `--ifdef=NAME' option, you
+should check that if the differing lines contain any of the C
+preprocessor directives `#ifdef', `#ifndef', `#else', `#elif', or
+`#endif', they are nested properly and match. If they don't, you must
+make corrections manually. It is a good idea to carefully check the
+resulting code anyway to make sure that it really does what you want it
+to; depending on how the input files were produced, the output might
+contain duplicate or otherwise incorrect code.
+
+ The `patch' `-D NAME' option behaves like the `diff' `-D NAME'
+option, except it operates on a file and a diff to produce a merged
+file; *Note patch Options::.
+
+
+File: diffutils.info, Node: Incomplete Lines, Next: Comparing Directories, Prev: Output Formats, Up: Top
+
+3 Incomplete Lines
+******************
+
+When an input file ends in a non-newline character, its last line is
+called an "incomplete line" because its last character is not a
+newline. All other lines are called "full lines" and end in a newline
+character. Incomplete lines do not match full lines unless differences
+in white space are ignored (*note White Space::).
+
+ An incomplete line is normally distinguished on output from a full
+line by a following line that starts with `\'. However, the RCS format
+(*note RCS::) outputs the incomplete line as-is, without any trailing
+newline or following line. The side by side format normally represents
+incomplete lines as-is, but in some cases uses a `\' or `/' gutter
+marker; *Note Side by Side::. The if-then-else line format preserves a
+line's incompleteness with `%L', and discards the newline with `%l';
+*Note Line Formats::. Finally, with the `ed' and forward `ed' output
+formats (*note Output Formats::) `diff' cannot represent an incomplete
+line, so it pretends there was a newline and reports an error.
+
+ 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 message may differ in non-English locales.) `diff -n F G'
+outputs the following without a trailing newline:
+
+ d1 1
+ a1 1
+ g
+
+`diff -e F G' reports two errors and outputs the following:
+
+ 1c
+ g
+ .
+
+
+File: diffutils.info, Node: Comparing Directories, Next: Adjusting Output, Prev: Incomplete Lines, Up: Top
+
+4 Comparing Directories
+***********************
+
+You can use `diff' to compare some or all of the files in two directory
+trees. When both file name arguments to `diff' are directories, it
+compares each file that is contained in both directories, examining
+file names in alphabetical order as specified by the `LC_COLLATE'
+locale category. Normally `diff' is silent about pairs of files that
+contain no differences, but if you use the `--report-identical-files'
+(`-s') option, it reports pairs of identical files. Normally `diff'
+reports subdirectories common to both directories without comparing
+subdirectories' files, but if you use the `-r' or `--recursive' option,
+it compares every corresponding pair of files in the directory trees,
+as many levels deep as they go.
+
+ For file names that are in only one of the directories, `diff'
+normally does not show the contents of the file that exists; it reports
+only that the file exists in that directory and not in the other. You
+can make `diff' act as though the file existed but was empty in the
+other directory, so that it outputs the entire contents of the file that
+actually exists. (It is output as either an insertion or a deletion,
+depending on whether it is in the first or the second directory given.)
+To do this, use the `--new-file' (`-N') option.
+
+ If the older directory contains one or more large files that are not
+in the newer directory, you can make the patch smaller by using the
+`--unidirectional-new-file' option instead of `-N'. This option is
+like `-N' except that it only inserts the contents of files that appear
+in the second directory but not the first (that is, files that were
+added). At the top of the patch, write instructions for the user
+applying the patch to remove the files that were deleted before
+applying the patch. *Note Making Patches::, for more discussion of
+making patches for distribution.
+
+ To ignore some files while comparing directories, use the
+`--exclude=PATTERN' (`-x PATTERN') option. This option ignores any
+files or subdirectories whose base names match the shell pattern
+PATTERN. Unlike in the shell, a period at the start of the base of a
+file name matches a wildcard at the start of a pattern. You should
+enclose PATTERN in quotes so that the shell does not expand it. For
+example, the option `-x '*.[ao]'' ignores any file whose name ends with
+`.a' or `.o'.
+
+ This option accumulates if you specify it more than once. For
+example, using the options `-x 'RCS' -x '*,v'' ignores any file or
+subdirectory whose base name is `RCS' or ends with `,v'.
+
+ If you need to give this option many times, you can instead put the
+patterns in a file, one pattern per line, and use the
+`--exclude-from=FILE' (`-X FILE') option. Trailing white space and
+empty lines are ignored in the pattern file.
+
+ If you have been comparing two directories and stopped partway
+through, later you might want to continue where you left off. You can
+do this by using the `--starting-file=FILE' (`-S FILE') option. This
+compares only the file FILE and all alphabetically later files in the
+topmost directory level.
+
+ If two directories differ only in that file names are lower case in
+one directory and upper case in the upper, `diff' normally reports many
+differences because it compares file names in a case sensitive way.
+With the `--ignore-file-name-case' option, `diff' ignores case
+differences in file names, so that for example the contents of the file
+`Tao' in one directory are compared to the contents of the file `TAO'
+in the other. The `--no-ignore-file-name-case' option cancels the
+effect of the `--ignore-file-name-case' option, reverting to the default
+behavior.
+
+ If an `--exclude=PATTERN' (`-x PATTERN') option, or an
+`--exclude-from=FILE' (`-X FILE') option, is specified while the
+`--ignore-file-name-case' option is in effect, case is ignored when
+excluding file names matching the specified patterns.
+
+
+File: diffutils.info, Node: Adjusting Output, Next: diff Performance, Prev: Comparing Directories, Up: Top
+
+5 Making `diff' Output Prettier
+*******************************
+
+`diff' provides several ways to adjust the appearance of its output.
+These adjustments can be applied to any output format.
+
+* Menu:
+
+* Tabs:: Preserving the alignment of tab stops.
+* Trailing Blanks:: Suppressing blanks before empty output lines.
+* Pagination:: Page numbering and time-stamping `diff' output.
+
+
+File: diffutils.info, Node: Tabs, Next: Trailing Blanks, Up: Adjusting Output
+
+5.1 Preserving Tab Stop Alignment
+=================================
+
+The lines of text in some of the `diff' output formats are preceded by
+one or two characters that indicate whether the text is inserted,
+deleted, or changed. The addition of those characters can cause tabs
+to move to the next tab stop, throwing off the alignment of columns in
+the line. GNU `diff' provides two ways to make tab-aligned columns
+line up correctly.
+
+ The first way is to have `diff' convert all tabs into the correct
+number of spaces before outputting them; select this method with the
+`--expand-tabs' (`-t') option. To use this form of output with
+`patch', you must give `patch' the `-l' or `--ignore-white-space'
+option (*note Changed White Space::, for more information). `diff'
+normally assumes that tab stops are set every 8 print columns, but this
+can be altered by the `--tabsize=COLUMNS' option.
+
+ The other method for making tabs line up correctly is to add a tab
+character instead of a space after the indicator character at the
+beginning of the line. This ensures that all following tab characters
+are in the same position relative to tab stops that they were in the
+original files, so that the output is aligned correctly. Its
+disadvantage is that it can make long lines too long to fit on one line
+of the screen or the paper. It also does not work with the unified
+output format, which does not have a space character after the change
+type indicator character. Select this method with the `-T' or
+`--initial-tab' option.
+
+
+File: diffutils.info, Node: Trailing Blanks, Next: Pagination, Prev: Tabs, Up: Adjusting Output
+
+5.2 Omitting trailing blanks
+============================
+
+When outputting lines in normal or context format, or outputting an
+unchanged line in unified format, `diff' normally outputs a blank just
+before each line. If the line is empty, the output of `diff' therefore
+contains trailing blanks even though the input does not contain them.
+For example, when outputting an unchanged empty line in context format,
+`diff' normally outputs a line with two leading spaces.
+
+ Some text editors and email agents routinely delete trailing blanks,
+so it can be a problem to deal with diff output files that contain
+them. You can avoid this problem with the `--suppress-blank-empty'
+option. It causes `diff' to omit trailing blanks at the end of output
+lines in normal, context, and unified format, unless the trailing
+blanks were already present in the input. This changes the output
+format slightly, so that output lines are guaranteed to never end in a
+blank unless an input line ends in a blank. This format is less likely
+to be munged by text editors or by transmission via email. It is
+accepted by GNU `patch' as well.
+
+
+File: diffutils.info, Node: Pagination, Prev: Trailing Blanks, Up: Adjusting Output
+
+5.3 Paginating `diff' Output
+============================
+
+It can be convenient to have long output page-numbered and time-stamped.
+The `--paginate' (`-l') option does this by sending the `diff' output
+through the `pr' program. Here is what the page header might look like
+for `diff -lc lao tzu':
+
+ 2002-02-22 14:20 diff -lc lao tzu Page 1
+
+
+File: diffutils.info, Node: diff Performance, Next: Comparing Three Files, Prev: Adjusting Output, Up: Top
+
+6 `diff' Performance Tradeoffs
+******************************
+
+GNU `diff' runs quite efficiently; however, in some circumstances you
+can cause it to run faster or produce a more compact set of changes.
+
+ One way to improve `diff' performance is to use hard or symbolic
+links to files instead of copies. This improves performance because
+`diff' normally does not need to read two hard or symbolic links to the
+same file, since their contents must be identical. For example,
+suppose you copy a large directory hierarchy, make a few changes to the
+copy, and then often use `diff -r' to compare the original to the copy.
+If the original files are read-only, you can greatly improve
+performance by creating the copy using hard or symbolic links (e.g.,
+with GNU `cp -lR' or `cp -sR'). Before editing a file in the copy for
+the first time, you should break the link and replace it with a regular
+copy.
+
+ You can also affect the performance of GNU `diff' by giving it
+options that change the way it compares files. Performance has more
+than one dimension. These options improve one aspect of performance at
+the cost of another, or they improve performance in some cases while
+hurting it in others.
+
+ The way that GNU `diff' determines which lines have changed always
+comes up with a near-minimal set of differences. Usually it is good
+enough for practical purposes. If the `diff' output is large, you
+might want `diff' to use a modified algorithm that sometimes produces a
+smaller set of differences. The `--minimal' (`-d') option does this;
+however, it can also cause `diff' to run more slowly than usual, so it
+is not the default behavior.
+
+ When the files you are comparing are large and have small groups of
+changes scattered throughout them, you can use the
+`--speed-large-files' option to make a different modification to the
+algorithm that `diff' uses. If the input files have a constant small
+density of changes, this option speeds up the comparisons without
+changing the output. If not, `diff' might produce a larger set of
+differences; however, the output will still be correct.
+
+ Normally `diff' discards the prefix and suffix that is common to
+both files before it attempts to find a minimal set of differences.
+This makes `diff' run faster, but occasionally it may produce
+non-minimal output. The `--horizon-lines=LINES' option prevents `diff'
+from discarding the last LINES lines of the prefix and the first LINES
+lines of the suffix. This gives `diff' further opportunities to find a
+minimal output.
+
+ Suppose a run of changed lines includes a sequence of lines at one
+end and there is an identical sequence of lines just outside the other
+end. The `diff' command is free to choose which identical sequence is
+included in the hunk. In this case, `diff' normally shifts the hunk's
+boundaries when this merges adjacent hunks, or shifts a hunk's lines
+towards the end of the file. Merging hunks can make the output look
+nicer in some cases.
+
+
+File: diffutils.info, Node: Comparing Three Files, Next: diff3 Merging, Prev: diff Performance, Up: Top
+
+7 Comparing Three Files
+***********************
+
+Use the program `diff3' to compare three files and show any differences
+among them. (`diff3' can also merge files; see *note diff3 Merging::).
+
+ The "normal" `diff3' output format shows each hunk of differences
+without surrounding context. Hunks are labeled depending on whether
+they are two-way or three-way, and lines are annotated by their
+location in the input files.
+
+ *Note Invoking diff3::, for more information on how to run `diff3'.
+
+* Menu:
+
+* Sample diff3 Input:: Sample `diff3' input for examples.
+* Example diff3 Normal:: Sample output in the normal format.
+* diff3 Hunks:: The format of normal output format.
+* Detailed diff3 Normal:: A detailed description of normal output format.
+
+
+File: diffutils.info, Node: Sample diff3 Input, Next: Example diff3 Normal, Up: Comparing Three Files
+
+7.1 A Third Sample Input File
+=============================
+
+Here is a third sample file that will be used in examples to illustrate
+the output of `diff3' and how various options can change it. The first
+two files are the same that we used for `diff' (*note Sample diff
+Input::). This is the third sample file, called `tao':
+
+ The Way that can be told of is not the eternal Way;
+ The name that can be named is not the eternal name.
+ The Nameless is the origin of Heaven and Earth;
+ The named is the mother of all things.
+
+ Therefore let there always be non-being,
+ so we may see their subtlety,
+ And let there always be being,
+ so we may see their result.
+ The two are the same,
+ But after they are produced,
+ they have different names.
+
+ -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+
+
+File: diffutils.info, Node: Example diff3 Normal, Next: diff3 Hunks, Prev: Sample diff3 Input, Up: Comparing Three Files
+
+7.2 An Example of `diff3' Normal Format
+=======================================
+
+Here is the output of the command `diff3 lao tzu tao' (*note Sample
+diff3 Input::, for the complete contents of the files). Notice that it
+shows only the lines that are different among the three files.
+
+ ====2
+ 1:1,2c
+ 3:1,2c
+ The Way that can be told of is not the eternal Way;
+ The name that can be named is not the eternal name.
+ 2:0a
+ ====1
+ 1:4c
+ The Named is the mother of all things.
+ 2:2,3c
+ 3:4,5c
+ The named is the mother of all things.
+
+ ====3
+ 1:8c
+ 2:7c
+ so we may see their outcome.
+ 3:9c
+ so we may see their result.
+ ====
+ 1:11a
+ 2:11,13c
+ They both may be called deep and profound.
+ Deeper and more profound,
+ The door of all subtleties!
+ 3:13,14c
+
+ -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+
+
+File: diffutils.info, Node: Detailed diff3 Normal, Prev: diff3 Hunks, Up: Comparing Three Files
+
+7.3 Detailed Description of `diff3' Normal Format
+=================================================
+
+Each hunk begins with a line marked `===='. Three-way hunks have plain
+`====' lines, and two-way hunks have `1', `2', or `3' appended to
+specify which of the three input files differ in that hunk. The hunks
+contain copies of two or three sets of input lines each preceded by one
+or two commands identifying where the lines came from.
+
+ Normally, two spaces precede each copy of an input line to
+distinguish it from the commands. But with the `--initial-tab' (`-T')
+option, `diff3' uses a tab instead of two spaces; this lines up tabs
+correctly. *Note Tabs::, for more information.
+
+ Commands take the following forms:
+
+`FILE:La'
+ This hunk appears after line L of file FILE, and contains no lines
+ in that file. To edit this file to yield the other files, one
+ must append hunk lines taken from the other files. For example,
+ `1:11a' means that the hunk follows line 11 in the first file and
+ contains no lines from that file.
+
+`FILE:Rc'
+ This hunk contains the lines in the range R of file FILE. The
+ range R is a comma-separated pair of line numbers, or just one
+ number if there is only one line. To edit this file to yield the
+ other files, one must change the specified lines to be the lines
+ taken from the other files. For example, `2:11,13c' means that
+ the hunk contains lines 11 through 13 from the second file.
+
+ If the last line in a set of input lines is incomplete (*note
+Incomplete Lines::), it is distinguished on output from a full line by
+a following line that starts with `\'.
+
+
+File: diffutils.info, Node: diff3 Hunks, Next: Detailed diff3 Normal, Prev: Example diff3 Normal, Up: Comparing Three Files
+
+7.4 `diff3' Hunks
+=================
+
+Groups of lines that differ in two or three of the input files are
+called "diff3 hunks", by analogy with `diff' hunks (*note Hunks::). If
+all three input files differ in a `diff3' hunk, the hunk is called a
+"three-way hunk"; if just two input files differ, it is a "two-way
+hunk".
+
+ As with `diff', several solutions are possible. When comparing the
+files `A', `B', and `C', `diff3' normally finds `diff3' hunks by
+merging the two-way hunks output by the two commands `diff A B' and
+`diff A C'. This does not necessarily minimize the size of the output,
+but exceptions should be rare.
+
+ For example, suppose `F' contains the three lines `a', `b', `f', `G'
+contains the lines `g', `b', `g', and `H' contains the lines `a', `b',
+`h'. `diff3 F G H' might output the following:
+
+ ====2
+ 1:1c
+ 3:1c
+ a
+ 2:1c
+ g
+ ====
+ 1:3c
+ f
+ 2:3c
+ g
+ 3:3c
+ h
+
+because it found a two-way hunk containing `a' in the first and third
+files and `g' in the second file, then the single line `b' common to
+all three files, then a three-way hunk containing the last line of each
+file.
+
+
+File: diffutils.info, Node: diff3 Merging, Next: Interactive Merging, Prev: Comparing Three Files, Up: Top
+
+8 Merging From a Common Ancestor
+********************************
+
+When two people have made changes to copies of the same file, `diff3'
+can produce a merged output that contains both sets of changes together
+with warnings about conflicts.
+
+ One might imagine programs with names like `diff4' and `diff5' to
+compare more than three files simultaneously, but in practice the need
+rarely arises. You can use `diff3' to merge three or more sets of
+changes to a file by merging two change sets at a time.
+
+ `diff3' can incorporate changes from two modified versions into a
+common preceding version. This lets you merge the sets of changes
+represented by the two newer files. Specify the common ancestor version
+as the second argument and the two newer versions as the first and third
+arguments, like this:
+
+ diff3 MINE OLDER YOURS
+
+You can remember the order of the arguments by noting that they are in
+alphabetical order.
+
+ You can think of this as subtracting OLDER from YOURS and adding the
+result to MINE, or as merging into MINE the changes that would turn
+OLDER into YOURS. This merging is well-defined as long as MINE and
+OLDER match in the neighborhood of each such change. This fails to be
+true when all three input files differ or when only OLDER differs; we
+call this a "conflict". When all three input files differ, we call the
+conflict an "overlap".
+
+ `diff3' gives you several ways to handle overlaps and conflicts.
+You can omit overlaps or conflicts, or select only overlaps, or mark
+conflicts with special `<<<<<<<' and `>>>>>>>' lines.
+
+ `diff3' can output the merge results as an `ed' script that that can
+be applied to the first file to yield the merged output. However, it
+is usually better to have `diff3' generate the merged output directly;
+this bypasses some problems with `ed'.
+
+* Menu:
+
+* Which Changes:: Selecting changes to incorporate.
+* Marking Conflicts:: Marking conflicts.
+* Bypassing ed:: Generating merged output directly.
+* Merging Incomplete Lines:: How `diff3' merges incomplete lines.
+* Saving the Changed File:: Emulating System V behavior.
+
+
+File: diffutils.info, Node: Which Changes, Next: Marking Conflicts, Up: diff3 Merging
+
+8.1 Selecting Which Changes to Incorporate
+==========================================
+
+You can select all unmerged changes from OLDER to YOURS for merging
+into MINE with the `--ed' (`-e') option. You can select only the
+nonoverlapping unmerged changes with `--easy-only' (`-3'), and you can
+select only the overlapping changes with `--overlap-only' (`-x').
+
+ The `-e', `-3' and `-x' options select only "unmerged changes", i.e.
+changes where MINE and YOURS differ; they ignore changes from OLDER to
+YOURS where MINE and YOURS are identical, because they assume that such
+changes have already been merged. If this assumption is not a safe
+one, you can use the `--show-all' (`-A') option (*note Marking
+Conflicts::).
+
+ Here is the output of the command `diff3' with each of these three
+options (*note Sample diff3 Input::, for the complete contents of the
+files). Notice that `-e' outputs the union of the disjoint sets of
+changes output by `-3' and `-x'.
+
+ Output of `diff3 -e lao tzu tao':
+ 11a
+
+ -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+ .
+ 8c
+ so we may see their result.
+ .
+
+ Output of `diff3 -3 lao tzu tao':
+ 8c
+ so we may see their result.
+ .
+
+ Output of `diff3 -x lao tzu tao':
+ 11a
+
+ -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+ .
+
+
+File: diffutils.info, Node: Marking Conflicts, Next: Bypassing ed, Prev: Which Changes, Up: diff3 Merging
+
+8.2 Marking Conflicts
+=====================
+
+`diff3' can mark conflicts in the merged output by bracketing them with
+special marker lines. A conflict that comes from two files A and B is
+marked as follows:
+
+ <<<<<<< A
+ lines from A
+ =======
+ lines from B
+ >>>>>>> B
+
+ A conflict that comes from three files A, B and C is marked as
+follows:
+
+ <<<<<<< A
+ lines from A
+ ||||||| B
+ lines from B
+ =======
+ lines from C
+ >>>>>>> C
+
+ The `--show-all' (`-A') option acts like the `-e' option, except
+that it brackets conflicts, and it outputs all changes from OLDER to
+YOURS, not just the unmerged changes. Thus, given the sample input
+files (*note Sample diff3 Input::), `diff3 -A lao tzu tao' puts
+brackets around the conflict where only `tzu' differs:
+
+ <<<<<<< tzu
+ =======
+ The Way that can be told of is not the eternal Way;
+ The name that can be named is not the eternal name.
+ >>>>>>> tao
+
+ And it outputs the three-way conflict as follows:
+
+ <<<<<<< lao
+ ||||||| tzu
+ They both may be called deep and profound.
+ Deeper and more profound,
+ The door of all subtleties!
+ =======
+
+ -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+ >>>>>>> tao
+
+ The `--show-overlap' (`-E') option outputs less information than the
+`--show-all' (`-A') option, because it outputs only unmerged changes,
+and it never outputs the contents of the second file. Thus the `-E'
+option acts like the `-e' option, except that it brackets the first and
+third files from three-way overlapping changes. Similarly, `-X' acts
+like `-x', except it brackets all its (necessarily overlapping)
+changes. For example, for the three-way overlapping change above, the
+`-E' and `-X' options output the following:
+
+ <<<<<<< lao
+ =======
+
+ -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+ >>>>>>> tao
+
+ If you are comparing files that have meaningless or uninformative
+names, you can use the `--label=LABEL' option to show alternate names
+in the `<<<<<<<', `|||||||' and `>>>>>>>' brackets. This option can be
+given up to three times, once for each input file. Thus `diff3 -A
+--label X --label Y --label Z A B C' acts like `diff3 -A A B C', except
+that the output looks like it came from files named `X', `Y' and `Z'
+rather than from files named `A', `B' and `C'.
+
+
+File: diffutils.info, Node: Bypassing ed, Next: Merging Incomplete Lines, Prev: Marking Conflicts, Up: diff3 Merging
+
+8.3 Generating the Merged Output Directly
+=========================================
+
+With the `--merge' (`-m') option, `diff3' outputs the merged file
+directly. This is more efficient than using `ed' to generate it, and
+works even with non-text files that `ed' would reject. If you specify
+`-m' without an `ed' script option, `-A' is assumed.
+
+ For example, the command `diff3 -m lao tzu tao' (*note Sample diff3
+Input:: for a copy of the input files) would output the following:
+
+ <<<<<<< tzu
+ =======
+ The Way that can be told of is not the eternal Way;
+ The name that can be named is not the eternal name.
+ >>>>>>> tao
+ The Nameless is the origin of Heaven and Earth;
+ The Named is the mother of all things.
+ Therefore let there always be non-being,
+ so we may see their subtlety,
+ And let there always be being,
+ so we may see their result.
+ The two are the same,
+ But after they are produced,
+ they have different names.
+ <<<<<<< lao
+ ||||||| tzu
+ They both may be called deep and profound.
+ Deeper and more profound,
+ The door of all subtleties!
+ =======
+
+ -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+ >>>>>>> tao
+
+
+File: diffutils.info, Node: Merging Incomplete Lines, Next: Saving the Changed File, Prev: Bypassing ed, Up: diff3 Merging
+
+8.4 How `diff3' Merges Incomplete Lines
+=======================================
+
+With `-m', incomplete lines (*note Incomplete Lines::) are simply
+copied to the output as they are found; if the merged output ends in an
+conflict and one of the input files ends in an incomplete line,
+succeeding `|||||||', `=======' or `>>>>>>>' brackets appear somewhere
+other than the start of a line because they are appended to the
+incomplete line.
+
+ Without `-m', if an `ed' script option is specified and an
+incomplete line is found, `diff3' generates a warning and acts as if a
+newline had been present.
+
+
+File: diffutils.info, Node: Saving the Changed File, Prev: Merging Incomplete Lines, Up: diff3 Merging
+
+8.5 Saving the Changed File
+===========================
+
+Traditional Unix `diff3' generates an `ed' script without the trailing
+`w' and `q' commands that save the changes. System V `diff3' generates
+these extra commands. GNU `diff3' normally behaves like traditional
+Unix `diff3', but with the `-i' option it behaves like System V `diff3'
+and appends the `w' and `q' commands.
+
+ The `-i' option requires one of the `ed' script options `-AeExX3',
+and is incompatible with the merged output option `-m'.
+
+
+File: diffutils.info, Node: Interactive Merging, Next: Merging with patch, Prev: diff3 Merging, Up: Top
+
+9 Interactive Merging with `sdiff'
+**********************************
+
+With `sdiff', you can merge two files interactively based on a
+side-by-side `-y' format comparison (*note Side by Side::). Use
+`--output=FILE' (`-o FILE') to specify where to put the merged text.
+*Note Invoking sdiff::, for more details on the options to `sdiff'.
+
+ Another way to merge files interactively is to use the Emacs Lisp
+package `emerge'. *Note emerge: (emacs)emerge, for more information.
+
+* Menu:
+
+* sdiff Option Summary:: Summary of `sdiff' options.
+* Merge Commands:: Merging two files interactively.
+
+
+File: diffutils.info, Node: sdiff Option Summary, Next: Merge Commands, Up: Interactive Merging
+
+9.1 Specifying `diff' Options to `sdiff'
+========================================
+
+The following `sdiff' options have the same meaning as for `diff'.
+*Note diff Options::, for the use of these options.
+
+ -a -b -d -i -t -v
+ -B -E -I REGEXP -Z
+
+ --expand-tabs
+ --ignore-blank-lines --ignore-case
+ --ignore-matching-lines=REGEXP --ignore-space-change
+ --ignore-tab-expansion --ignore-trailing-space
+ --left-column --minimal --speed-large-files
+ --strip-trailing-cr --suppress-common-lines
+ --tabsize=COLUMNS --text --version --width=COLUMNS
+
+ For historical reasons, `sdiff' has alternate names for some
+options. The `-l' option is equivalent to the `--left-column' option,
+and similarly `-s' is equivalent to `--suppress-common-lines'. The
+meaning of the `sdiff' `-w' and `-W' options is interchanged from that
+of `diff': with `sdiff', `-w COLUMNS' is equivalent to
+`--width=COLUMNS', and `-W' is equivalent to `--ignore-all-space'.
+`sdiff' without the `-o' option is equivalent to `diff' with the
+`--side-by-side' (`-y') option (*note Side by Side::).
+
+
+File: diffutils.info, Node: Merge Commands, Prev: sdiff Option Summary, Up: Interactive Merging
+
+9.2 Merge Commands
+==================
+
+Groups of common lines, with a blank gutter, are copied from the first
+file to the output. After each group of differing lines, `sdiff'
+prompts with `%' and pauses, waiting for one of the following commands.
+Follow each command with <RET>.
+
+`e'
+ Discard both versions. Invoke a text editor on an empty temporary
+ file, then copy the resulting file to the output.
+
+`eb'
+ Concatenate the two versions, edit the result in a temporary file,
+ then copy the edited result to the output.
+
+`ed'
+ Like `eb', except precede each version with a header that shows
+ what file and lines the version came from.
+
+`el'
+`e1'
+ Edit a copy of the left version, then copy the result to the
+ output.
+
+`er'
+`e2'
+ Edit a copy of the right version, then copy the result to the
+ output.
+
+`l'
+`1'
+ Copy the left version to the output.
+
+`q'
+ Quit.
+
+`r'
+`2'
+ Copy the right version to the output.
+
+`s'
+ Silently copy common lines.
+
+`v'
+ Verbosely copy common lines. This is the default.
+
+ The text editor invoked is specified by the `EDITOR' environment
+variable if it is set. The default is system-dependent.
+
+
+File: diffutils.info, Node: Merging with patch, Next: Making Patches, Prev: Interactive Merging, Up: Top
+
+10 Merging with `patch'
+***********************
+
+`patch' takes comparison output produced by `diff' and applies the
+differences to a copy of the original file, producing a patched
+version. With `patch', you can distribute just the changes to a set of
+files instead of distributing the entire file set; your correspondents
+can apply `patch' to update their copy of the files with your changes.
+`patch' automatically determines the diff format, skips any leading or
+trailing headers, and uses the headers to determine which file to
+patch. This lets your correspondents feed a mail message containing a
+difference listing directly to `patch'.
+
+ `patch' detects and warns about common problems like forward
+patches. It saves any patches that it could not apply. It can also
+maintain a `patchlevel.h' file to ensure that your correspondents apply
+diffs in the proper order.
+
+ `patch' accepts a series of diffs in its standard input, usually
+separated by headers that specify which file to patch. It applies
+`diff' hunks (*note Hunks::) one by one. If a hunk does not exactly
+match the original file, `patch' uses heuristics to try to patch the
+file as well as it can. If no approximate match can be found, `patch'
+rejects the hunk and skips to the next hunk. `patch' normally replaces
+each file F with its new version, putting reject hunks (if any) into
+`F.rej'.
+
+ *Note Invoking patch::, for detailed information on the options to
+`patch'.
+
+* Menu:
+
+* patch Input:: Selecting the type of `patch' input.
+* Revision Control:: Getting files from RCS, SCCS, etc.
+* Imperfect:: Dealing with imperfect patches.
+* Creating and Removing:: Creating and removing files with a patch.
+* Patching Time Stamps:: Updating time stamps on patched files.
+* Multiple Patches:: Handling multiple patches in a file.
+* patch Directories:: Changing directory and stripping directories.
+* Backups:: Whether backup files are made.
+* Backup Names:: Backup file names.
+* Reject Names:: Reject file names.
+* patch Messages:: Messages and questions `patch' can produce.
+* patch and POSIX:: Conformance to the POSIX standard.
+* patch and Tradition:: GNU versus traditional `patch'.
+
+
+File: diffutils.info, Node: patch Input, Next: Revision Control, Up: Merging with patch
+
+10.1 Selecting the `patch' Input Format
+=======================================
+
+`patch' normally determines which `diff' format the patch file uses by
+examining its contents. For patch files that contain particularly
+confusing leading text, you might need to use one of the following
+options to force `patch' to interpret the patch file as a certain
+format of diff. The output formats listed here are the only ones that
+`patch' can understand.
+
+`-c'
+`--context'
+ context diff.
+
+`-e'
+`--ed'
+ `ed' script.
+
+`-n'
+`--normal'
+ normal diff.
+
+`-u'
+`--unified'
+ unified diff.
+
+
+File: diffutils.info, Node: Revision Control, Next: Imperfect, Prev: patch Input, Up: Merging with patch
+
+10.2 Revision Control
+=====================
+
+If a nonexistent input file is under a revision control system
+supported by `patch', `patch' normally asks the user whether to get (or
+check out) the file from the revision control system. Patch currently
+supports RCS, ClearCase and SCCS. Under RCS and SCCS, `patch' also
+asks when the input file is read-only and matches the default version
+in the revision control system.
+
+ The `--get=NUM' (`-g NUM') option affects access to files under
+supported revision control systems. If NUM is positive, `patch' gets
+the file without asking the user; if zero, `patch' neither asks the
+user nor gets the file; and if negative, `patch' asks the user before
+getting the file. The default value of NUM is given by the value of the
+`PATCH_GET' environment variable if it is set; if not, the default
+value is zero if `patch' is conforming to POSIX, negative otherwise.
+*Note patch and POSIX::.
+
+ The choice of revision control system is unaffected by the
+`VERSION_CONTROL' environment variable (*note Backup Names::).
+
+
+File: diffutils.info, Node: Imperfect, Next: Creating and Removing, Prev: Revision Control, Up: Merging with patch
+
+10.3 Applying Imperfect Patches
+===============================
+
+`patch' tries to skip any leading text in the patch file, apply the
+diff, and then skip any trailing text. Thus you can feed a mail
+message directly to `patch', and it should work. If the entire diff is
+indented by a constant amount of white space, `patch' automatically
+ignores the indentation. If a context diff contains trailing carriage
+return on each line, `patch' automatically ignores the carriage return.
+If a context diff has been encapsulated by prepending `- ' to lines
+beginning with `-' as per Internet RFC 934
+(ftp://ftp.isi.edu/in-notes/rfc934.txt), `patch' automatically
+unencapsulates the input.
+
+ However, certain other types of imperfect input require user
+intervention or testing.
+
+* Menu:
+
+* Changed White Space:: When tabs and spaces don't match exactly.
+* Reversed Patches:: Applying reversed patches correctly.
+* Inexact:: Helping `patch' find close matches.
+* Dry Runs:: Predicting what `patch' will do.
+
+
+File: diffutils.info, Node: Changed White Space, Next: Reversed Patches, Up: Imperfect
+
+10.3.1 Applying Patches with Changed White Space
+------------------------------------------------
+
+Sometimes mailers, editors, or other programs change spaces into tabs,
+or vice versa. If this happens to a patch file or an input file, the
+files might look the same, but `patch' will not be able to match them
+properly. If this problem occurs, use the `-l' or
+`--ignore-white-space' option, which makes `patch' compare blank
+characters (i.e. spaces and tabs) loosely so that any nonempty sequence
+of blanks in the patch file matches any nonempty sequence of blanks in
+the input files. Non-blank characters must still match exactly. Each
+line of the context must still match a line in the input file.
+
+
+File: diffutils.info, Node: Reversed Patches, Next: Inexact, Prev: Changed White Space, Up: Imperfect
+
+10.3.2 Applying Reversed Patches
+--------------------------------
+
+Sometimes people run `diff' with the new file first instead of second.
+This creates a diff that is "reversed". To apply such patches, give
+`patch' the `--reverse' (`-R') option. `patch' then attempts to swap
+each hunk around before applying it. Rejects come out in the swapped
+format.
+
+ Often `patch' can guess that the patch is reversed. If the first
+hunk of a patch fails, `patch' reverses the hunk to see if it can apply
+it that way. If it can, `patch' asks you if you want to have the `-R'
+option set; if it can't, `patch' continues to apply the patch normally.
+This method cannot detect a reversed patch if it is a normal diff and
+the first command is an append (which should have been a delete) since
+appends always succeed, because a null context matches anywhere. But
+most patches add or change lines rather than delete them, so most
+reversed normal diffs begin with a delete, which fails, and `patch'
+notices.
+
+ If you apply a patch that you have already applied, `patch' thinks
+it is a reversed patch and offers to un-apply the patch. This could be
+construed as a feature. If you did this inadvertently and you don't
+want to un-apply the patch, just answer `n' to this offer and to the
+subsequent "apply anyway" question--or type `C-c' to kill the `patch'
+process.
+
+
+File: diffutils.info, Node: Inexact, Next: Dry Runs, Prev: Reversed Patches, Up: Imperfect
+
+10.3.3 Helping `patch' Find Inexact Matches
+-------------------------------------------
+
+For context diffs, and to a lesser extent normal diffs, `patch' can
+detect when the line numbers mentioned in the patch are incorrect, and
+it attempts to find the correct place to apply each hunk of the patch.
+As a first guess, it takes the line number mentioned in the hunk, plus
+or minus any offset used in applying the previous hunk. If that is not
+the correct place, `patch' scans both forward and backward for a set of
+lines matching the context given in the hunk.
+
+ First `patch' looks for a place where all lines of the context
+match. If it cannot find such a place, and it is reading a context or
+unified diff, and the maximum fuzz factor is set to 1 or more, then
+`patch' makes another scan, ignoring the first and last line of
+context. If that fails, and the maximum fuzz factor is set to 2 or
+more, it makes another scan, ignoring the first two and last two lines
+of context are ignored. It continues similarly if the maximum fuzz
+factor is larger.
+
+ The `--fuzz=LINES' (`-F LINES') option sets the maximum fuzz factor
+to LINES. This option only applies to context and unified diffs; it
+ignores up to LINES lines while looking for the place to install a
+hunk. Note that a larger fuzz factor increases the odds of making a
+faulty patch. The default fuzz factor is 2; there is no point to
+setting it to more than the number of lines of context in the diff,
+ordinarily 3.
+
+ If `patch' cannot find a place to install a hunk of the patch, it
+writes the hunk out to a reject file (*note Reject Names::, for
+information on how reject files are named). It writes out rejected
+hunks in context format no matter what form the input patch is in. If
+the input is a normal or `ed' diff, many of the contexts are simply
+null. The line numbers on the hunks in the reject file may be
+different from those in the patch file: they show the approximate
+location where `patch' thinks the failed hunks belong in the new file
+rather than in the old one.
+
+ If the `--verbose' option is given, then as it completes each hunk
+`patch' tells you whether the hunk succeeded or failed, and if it
+failed, on which line (in the new file) `patch' thinks the hunk should
+go. If this is different from the line number specified in the diff,
+it tells you the offset. A single large offset _may_ indicate that
+`patch' installed a hunk in the wrong place. `patch' also tells you if
+it used a fuzz factor to make the match, in which case you should also
+be slightly suspicious.
+
+ `patch' cannot tell if the line numbers are off in an `ed' script,
+and can only detect wrong line numbers in a normal diff when it finds a
+change or delete command. It may have the same problem with a context
+diff using a fuzz factor equal to or greater than the number of lines
+of context shown in the diff (typically 3). In these cases, you should
+probably look at a context diff between your original and patched input
+files to see if the changes make sense. Compiling without errors is a
+pretty good indication that the patch worked, but not a guarantee.
+
+ A patch against an empty file applies to a nonexistent file, and vice
+versa. *Note Creating and Removing::.
+
+ `patch' usually produces the correct results, even when it must make
+many guesses. However, the results are guaranteed only when the patch
+is applied to an exact copy of the file that the patch was generated
+from.
+
+
+File: diffutils.info, Node: Dry Runs, Prev: Inexact, Up: Imperfect
+
+10.3.4 Predicting what `patch' will do
+--------------------------------------
+
+It may not be obvious in advance what `patch' will do with a
+complicated or poorly formatted patch. If you are concerned that the
+input might cause `patch' to modify the wrong files, you can use the
+`--dry-run' option, which causes `patch' to print the results of
+applying patches without actually changing any files. You can then
+inspect the diagnostics generated by the dry run to see whether `patch'
+will modify the files that you expect. If the patch does not do what
+you want, you can modify the patch (or the other options to `patch')
+and try another dry run. Once you are satisfied with the proposed
+patch you can apply it by invoking `patch' as before, but this time
+without the `--dry-run' option.
+
+
+File: diffutils.info, Node: Creating and Removing, Next: Patching Time Stamps, Prev: Imperfect, Up: Merging with patch
+
+10.4 Creating and Removing Files
+================================
+
+Sometimes when comparing two directories, a file may exist in one
+directory but not the other. If you give `diff' the `--new-file'
+(`-N') option, or if you supply an old or new file that is named
+`/dev/null' or is empty and is dated the Epoch (1970-01-01 00:00:00
+UTC), `diff' outputs a patch that adds or deletes the contents of this
+file. When given such a patch, `patch' normally creates a new file or
+removes the old file. However, when conforming to POSIX (*note patch
+and POSIX::), `patch' does not remove the old file, but leaves it empty.
+The `--remove-empty-files' (`-E') option causes `patch' to remove
+output files that are empty after applying a patch, even if the patch
+does not appear to be one that removed the file.
+
+ If the patch appears to create a file that already exists, `patch'
+asks for confirmation before applying the patch.
+
+
+File: diffutils.info, Node: Patching Time Stamps, Next: Multiple Patches, Prev: Creating and Removing, Up: Merging with patch
+
+10.5 Updating Time Stamps on Patched Files
+==========================================
+
+When `patch' updates a file, it normally sets the file's last-modified
+time stamp to the current time of day. If you are using `patch' to
+track a software distribution, this can cause `make' to incorrectly
+conclude that a patched file is out of date. For example, if
+`syntax.c' depends on `syntax.y', and `patch' updates `syntax.c' and
+then `syntax.y', then `syntax.c' will normally appear to be out of date
+with respect to `syntax.y' even though its contents are actually up to
+date.
+
+ The `--set-utc' (`-Z') option causes `patch' to set a patched file's
+modification and access times to the time stamps given in context diff
+headers. If the context diff headers do not specify a time zone, they
+are assumed to use Coordinated Universal Time (UTC, often known as GMT).
+
+ The `--set-time' (`-T') option acts like `-Z' or `--set-utc', except
+that it assumes that the context diff headers' time stamps use local
+time instead of UTC. This option is not recommended, because patches
+using local time cannot easily be used by people in other time zones,
+and because local time stamps are ambiguous when local clocks move
+backwards during daylight-saving time adjustments. If the context diff
+headers specify a time zone, this option is equivalent to `--set-utc'
+(`-Z').
+
+ `patch' normally refrains from setting a file's time stamps if the
+file's original last-modified time stamp does not match the time given
+in the diff header, of if the file's contents do not exactly match the
+patch. However, if the `--force' (`-f') option is given, the file's
+time stamps are set regardless.
+
+ Due to the limitations of the current `diff' format, `patch' cannot
+update the times of files whose contents have not changed. Also, if
+you set file time stamps to values other than the current time of day,
+you should also remove (e.g., with `make clean') all files that depend
+on the patched files, so that later invocations of `make' do not get
+confused by the patched files' times.
+
+
+File: diffutils.info, Node: Multiple Patches, Next: patch Directories, Prev: Patching Time Stamps, Up: Merging with patch
+
+10.6 Multiple Patches in a File
+===============================
+
+If the patch file contains more than one patch, and if you do not
+specify an input file on the command line, `patch' tries to apply each
+patch as if they came from separate patch files. This means that it
+determines the name of the file to patch for each patch, and that it
+examines the leading text before each patch for file names and
+prerequisite revision level (*note Making Patches::, for more on that
+topic).
+
+ `patch' uses the following rules to intuit a file name from the
+leading text before a patch. First, `patch' takes an ordered list of
+candidate file names as follows:
+
+ * If the header is that of a context diff, `patch' takes the old and
+ new file names in the header. A name is ignored if it does not
+ have enough slashes to satisfy the `-pNUM' or `--strip=NUM'
+ option. The name `/dev/null' is also ignored.
+
+ * If there is an `Index:' line in the leading garbage and if either
+ the old and new names are both absent or if `patch' is conforming
+ to POSIX, `patch' takes the name in the `Index:' line.
+
+ * For the purpose of the following rules, the candidate file names
+ are considered to be in the order (old, new, index), regardless of
+ the order that they appear in the header.
+
+Then `patch' selects a file name from the candidate list as follows:
+
+ * If some of the named files exist, `patch' selects the first name
+ if conforming to POSIX, and the best name otherwise.
+
+ * If `patch' is not ignoring RCS, ClearCase, and SCCS (*note
+ Revision Control::), and no named files exist but an RCS,
+ ClearCase, or SCCS master is found, `patch' selects the first
+ named file with an RCS, ClearCase, or SCCS master.
+
+ * If no named files exist, no RCS, ClearCase, or SCCS master was
+ found, some names are given, `patch' is not conforming to POSIX,
+ and the patch appears to create a file, `patch' selects the best
+ name requiring the creation of the fewest directories.
+
+ * If no file name results from the above heuristics, you are asked
+ for the name of the file to patch, and `patch' selects that name.
+
+ To determine the "best" of a nonempty list of file names, `patch'
+first takes all the names with the fewest path name components; of
+those, it then takes all the names with the shortest basename; of
+those, it then takes all the shortest names; finally, it takes the
+first remaining name.
+
+ *Note patch and POSIX::, to see whether `patch' is conforming to
+POSIX.
+
+
+File: diffutils.info, Node: patch Directories, Next: Backups, Prev: Multiple Patches, Up: Merging with patch
+
+10.7 Applying Patches in Other Directories
+==========================================
+
+The `--directory=DIRECTORY' (`-d DIRECTORY') option to `patch' makes
+directory DIRECTORY the current directory for interpreting both file
+names in the patch file, and file names given as arguments to other
+options (such as `-B' and `-o'). For example, while in a mail reading
+program, you can patch a file in the `/usr/src/emacs' directory
+directly from a message containing the patch like this:
+
+ | patch -d /usr/src/emacs
+
+ Sometimes the file names given in a patch contain leading
+directories, but you keep your files in a directory different from the
+one given in the patch. In those cases, you can use the
+`--strip=NUMBER' (`-pNUMBER') option to set the file name strip count
+to NUMBER. The strip count tells `patch' how many slashes, along with
+the directory names between them, to strip from the front of file
+names. A sequence of one or more adjacent slashes is counted as a
+single slash. By default, `patch' strips off all leading directories,
+leaving just the base file names.
+
+ For example, suppose the file name in the patch file is
+`/gnu/src/emacs/etc/NEWS'. Using `-p0' gives the entire file name
+unmodified, `-p1' gives `gnu/src/emacs/etc/NEWS' (no leading slash),
+`-p4' gives `etc/NEWS', and not specifying `-p' at all gives `NEWS'.
+
+ `patch' looks for each file (after any slashes have been stripped)
+in the current directory, or if you used the `-d DIRECTORY' option, in
+that directory.
+
+
+File: diffutils.info, Node: Backups, Next: Backup Names, Prev: patch Directories, Up: Merging with patch
+
+10.8 Backup Files
+=================
+
+Normally, `patch' creates a backup file if the patch does not exactly
+match the original input file, because in that case the original data
+might not be recovered if you undo the patch with `patch -R' (*note
+Reversed Patches::). However, when conforming to POSIX, `patch' does
+not create backup files by default. *Note patch and POSIX::.
+
+ The `--backup' (`-b') option causes `patch' to make a backup file
+regardless of whether the patch matches the original input. The
+`--backup-if-mismatch' option causes `patch' to create backup files for
+mismatches files; this is the default when not conforming to POSIX. The
+`--no-backup-if-mismatch' option causes `patch' to not create backup
+files, even for mismatched patches; this is the default when conforming
+to POSIX.
+
+ When backing up a file that does not exist, an empty, unreadable
+backup file is created as a placeholder to represent the nonexistent
+file.
+
+
+File: diffutils.info, Node: Backup Names, Next: Reject Names, Prev: Backups, Up: Merging with patch
+
+10.9 Backup File Names
+======================
+
+Normally, `patch' renames an original input file into a backup file by
+appending to its name the extension `.orig', or `~' if using `.orig'
+would make the backup file name too long.(1) The `-z BACKUP-SUFFIX' or
+`--suffix=BACKUP-SUFFIX' option causes `patch' to use BACKUP-SUFFIX as
+the backup extension instead.
+
+ Alternately, you can specify the extension for backup files with the
+`SIMPLE_BACKUP_SUFFIX' environment variable, which the options override.
+
+ `patch' can also create numbered backup files the way GNU Emacs
+does. With this method, instead of having a single backup of each
+file, `patch' makes a new backup file name each time it patches a file.
+For example, the backups of a file named `sink' would be called,
+successively, `sink.~1~', `sink.~2~', `sink.~3~', etc.
+
+ The `-V BACKUP-STYLE' or `--version-control=BACKUP-STYLE' option
+takes as an argument a method for creating backup file names. You can
+alternately control the type of backups that `patch' makes with the
+`PATCH_VERSION_CONTROL' environment variable, which the `-V' option
+overrides. If `PATCH_VERSION_CONTROL' is not set, the
+`VERSION_CONTROL' environment variable is used instead. Please note
+that these options and variables control backup file names; they do not
+affect the choice of revision control system (*note Revision Control::).
+
+ The values of these environment variables and the argument to the
+`-V' option are like the GNU Emacs `version-control' variable (*note
+Backup Names: (emacs)Backup Names, for more information on backup
+versions in Emacs). They also recognize synonyms that are more
+descriptive. The valid values are listed below; unique abbreviations
+are acceptable.
+
+`t'
+`numbered'
+ Always make numbered backups.
+
+`nil'
+`existing'
+ Make numbered backups of files that already have them, simple
+ backups of the others. This is the default.
+
+`never'
+`simple'
+ Always make simple backups.
+
+ You can also tell `patch' to prepend a prefix, such as a directory
+name, to produce backup file names. The `--prefix=PREFIX' (`-B
+PREFIX') option makes backup files by prepending PREFIX to them. The
+`--basename-prefix=PREFIX' (`-Y PREFIX') prepends PREFIX to the last
+file name component of backup file names instead; for example, `-Y ~'
+causes the backup name for `dir/file.c' to be `dir/~file.c'. If you
+use either of these prefix options, the suffix-based options are
+ignored.
+
+ If you specify the output file with the `-o' option, that file is
+the one that is backed up, not the input file.
+
+ Options that affect the names of backup files do not affect whether
+backups are made. For example, if you specify the
+`--no-backup-if-mismatch' option, none of the options described in this
+section have any affect, because no backups are made.
+
+ ---------- Footnotes ----------
+
+ (1) A coding error in GNU `patch' version 2.5.4 causes it to always
+use `~', but this should be fixed in the next release.
+
+
+File: diffutils.info, Node: Reject Names, Next: patch Messages, Prev: Backup Names, Up: Merging with patch
+
+10.10 Reject File Names
+=======================
+
+The names for reject files (files containing patches that `patch' could
+not find a place to apply) are normally the name of the output file
+with `.rej' appended (or `#' if using `.rej' would make the backup file
+name too long).
+
+ Alternatively, you can tell `patch' to place all of the rejected
+patches in a single file. The `-r REJECT-FILE' or
+`--reject-file=REJECT-FILE' option uses REJECT-FILE as the reject file
+name.
+
+
+File: diffutils.info, Node: patch Messages, Next: patch and POSIX, Prev: Reject Names, Up: Merging with patch
+
+10.11 Messages and Questions from `patch'
+=========================================
+
+`patch' can produce a variety of messages, especially if it has trouble
+decoding its input. In a few situations where it's not sure how to
+proceed, `patch' normally prompts you for more information from the
+keyboard. There are options to produce more or fewer messages, to have
+it not ask for keyboard input, and to affect the way that file names
+are quoted in messages.
+
+* Menu:
+
+* More or Fewer Messages:: Controlling the verbosity of `patch'.
+* patch and Keyboard Input:: Inhibiting keyboard input.
+* patch Quoting Style:: Quoting file names in diagnostics.
+
+ `patch' exits with status 0 if all hunks are applied successfully, 1
+if some hunks cannot be applied, and 2 if there is more serious trouble.
+When applying a set of patches in a loop, you should check the exit
+status, so you don't apply a later patch to a partially patched file.
+
+
+File: diffutils.info, Node: More or Fewer Messages, Next: patch and Keyboard Input, Up: patch Messages
+
+10.11.1 Controlling the Verbosity of `patch'
+--------------------------------------------
+
+You can cause `patch' to produce more messages by using the `--verbose'
+option. For example, when you give this option, the message `Hmm...'
+indicates that `patch' is reading text in the patch file, attempting to
+determine whether there is a patch in that text, and if so, what kind
+of patch it is.
+
+ You can inhibit all terminal output from `patch', unless an error
+occurs, by using the `-s', `--quiet', or `--silent' option.
+
+
+File: diffutils.info, Node: patch and Keyboard Input, Next: patch Quoting Style, Prev: More or Fewer Messages, Up: patch Messages
+
+10.11.2 Inhibiting Keyboard Input
+---------------------------------
+
+There are two ways you can prevent `patch' from asking you any
+questions. The `--force' (`-f') option assumes that you know what you
+are doing. It causes `patch' to do the following:
+
+ * Skip patches that do not contain file names in their headers.
+
+ * Patch files even though they have the wrong version for the
+ `Prereq:' line in the patch;
+
+ * Assume that patches are not reversed even if they look like they
+ are.
+
+The `--batch' (`-t') option is similar to `-f', in that it suppresses
+questions, but it makes somewhat different assumptions:
+
+ * Skip patches that do not contain file names in their headers (the
+ same as `-f').
+
+ * Skip patches for which the file has the wrong version for the
+ `Prereq:' line in the patch;
+
+ * Assume that patches are reversed if they look like they are.
+
+
+File: diffutils.info, Node: patch Quoting Style, Prev: patch and Keyboard Input, Up: patch Messages
+
+10.11.3 `patch' Quoting Style
+-----------------------------
+
+When `patch' outputs a file name in a diagnostic message, it can format
+the name in any of several ways. This can be useful to output file
+names unambiguously, even if they contain punctuation or special
+characters like newlines. The `--quoting-style=WORD' option controls
+how names are output. The WORD should be one of the following:
+
+`literal'
+ Output names as-is.
+
+`shell'
+ Quote names for the shell if they contain shell metacharacters or
+ would cause ambiguous output.
+
+`shell-always'
+ Quote names for the shell, even if they would normally not require
+ quoting.
+
+`c'
+ Quote names as for a C language string.
+
+`escape'
+ Quote as with `c' except omit the surrounding double-quote
+ characters.
+
+ You can specify the default value of the `--quoting-style' option
+with the environment variable `QUOTING_STYLE'. If that environment
+variable is not set, the default value is `shell', but this default may
+change in a future version of `patch'.
+
+
+File: diffutils.info, Node: patch and POSIX, Next: patch and Tradition, Prev: patch Messages, Up: Merging with patch
+
+10.12 `patch' and the POSIX Standard
+====================================
+
+If you specify the `--posix' option, or set the `POSIXLY_CORRECT'
+environment variable, `patch' conforms more strictly to the POSIX
+standard, as follows:
+
+ * Take the first existing file from the list (old, new, index) when
+ intuiting file names from diff headers. *Note Multiple Patches::.
+
+ * Do not remove files that are removed by a diff. *Note Creating
+ and Removing::.
+
+ * Do not ask whether to get files from RCS, ClearCase, or SCCS.
+ *Note Revision Control::.
+
+ * Require that all options precede the files in the command line.
+
+ * Do not backup files, even when there is a mismatch. *Note
+ Backups::.
+
+
+
+File: diffutils.info, Node: patch and Tradition, Prev: patch and POSIX, Up: Merging with patch
+
+10.13 GNU `patch' and Traditional `patch'
+=========================================
+
+The current version of GNU `patch' normally follows the POSIX standard.
+*Note patch and POSIX::, for the few exceptions to this general rule.
+
+ Unfortunately, POSIX redefined the behavior of `patch' in several
+important ways. You should be aware of the following differences if
+you must interoperate with traditional `patch', or with GNU `patch'
+version 2.1 and earlier.
+
+ * In traditional `patch', the `-p' option's operand was optional,
+ and a bare `-p' was equivalent to `-p0'. The `-p' option now
+ requires an operand, and `-p 0' is now equivalent to `-p0'. For
+ maximum compatibility, use options like `-p0' and `-p1'.
+
+ Also, traditional `patch' simply counted slashes when stripping
+ path prefixes; `patch' now counts pathname components. That is, a
+ sequence of one or more adjacent slashes now counts as a single
+ slash. For maximum portability, avoid sending patches containing
+ `//' in file names.
+
+ * In traditional `patch', backups were enabled by default. This
+ behavior is now enabled with the `--backup' (`-b') option.
+
+ Conversely, in POSIX `patch', backups are never made, even when
+ there is a mismatch. In GNU `patch', this behavior is enabled
+ with the `--no-backup-if-mismatch' option, or by conforming to
+ POSIX.
+
+ The `-b SUFFIX' option of traditional `patch' is equivalent to the
+ `-b -z SUFFIX' options of GNU `patch'.
+
+ * Traditional `patch' used a complicated (and incompletely
+ documented) method to intuit the name of the file to be patched
+ from the patch header. This method did not conform to POSIX, and
+ had a few gotchas. Now `patch' uses a different, equally
+ complicated (but better documented) method that is optionally
+ POSIX-conforming; we hope it has fewer gotchas. The two methods
+ are compatible if the file names in the context diff header and the
+ `Index:' line are all identical after prefix-stripping. Your
+ patch is normally compatible if each header's file names all
+ contain the same number of slashes.
+
+ * When traditional `patch' asked the user a question, it sent the
+ question to standard error and looked for an answer from the first
+ file in the following list that was a terminal: standard error,
+ standard output, `/dev/tty', and standard input. Now `patch'
+ sends questions to standard output and gets answers from
+ `/dev/tty'. Defaults for some answers have been changed so that
+ `patch' never goes into an infinite loop when using default
+ answers.
+
+ * Traditional `patch' exited with a status value that counted the
+ number of bad hunks, or with status 1 if there was real trouble.
+ Now `patch' exits with status 1 if some hunks failed, or with 2 if
+ there was real trouble.
+
+ * Limit yourself to the following options when sending instructions
+ meant to be executed by anyone running GNU `patch', traditional
+ `patch', or a `patch' that conforms to POSIX. Spaces are
+ significant in the following list, and operands are required.
+
+ `-c'
+ `-d DIR'
+ `-D DEFINE'
+ `-e'
+ `-l'
+ `-n'
+ `-N'
+ `-o OUTFILE'
+ `-pNUM'
+ `-R'
+ `-r REJECTFILE'
+
+
+
+File: diffutils.info, Node: Making Patches, Next: Invoking cmp, Prev: Merging with patch, Up: Top
+
+11 Tips for Making and Using Patches
+************************************
+
+Use some common sense when making and using patches. For example, when
+sending bug fixes to a program's maintainer, send several small
+patches, one per independent subject, instead of one large,
+harder-to-digest patch that covers all the subjects.
+
+ Here are some other things you should keep in mind if you are going
+to distribute patches for updating a software package.
+
+* Menu:
+
+* Tips for Patch Producers:: Advice for making patches.
+* Tips for Patch Consumers:: Advice for using patches.
+* Avoiding Common Mistakes:: Avoiding common mistakes when using `patch'.
+* Generating Smaller Patches:: How to generate smaller patches.
+
+
+File: diffutils.info, Node: Tips for Patch Producers, Next: Tips for Patch Consumers, Up: Making Patches
+
+11.1 Tips for Patch Producers
+=============================
+
+To create a patch that changes an older version of a package into a
+newer version, first make a copy of the older and newer versions in
+adjacent subdirectories. It is common to do that by unpacking `tar'
+archives of the two versions.
+
+ To generate the patch, use the command `diff -Naur OLD NEW' where
+OLD and NEW identify the old and new directories. The names OLD and
+NEW should not contain any slashes. The `-N' option lets the patch
+create and remove files; `-a' lets the patch update non-text files; `-u'
+generates useful time stamps and enough context; and `-r' lets the
+patch update subdirectories. Here is an example command, using Bourne
+shell syntax:
+
+ diff -Naur gcc-3.0.3 gcc-3.0.4
+
+ Tell your recipients how to apply the patches. This should include
+which working directory to use, and which `patch' options to use; the
+option `-p1' is recommended. Test your procedure by pretending to be a
+recipient and applying your patches to a copy of the original files.
+
+ *Note Avoiding Common Mistakes::, for how to avoid common mistakes
+when generating a patch.
+
+
+File: diffutils.info, Node: Tips for Patch Consumers, Next: Avoiding Common Mistakes, Prev: Tips for Patch Producers, Up: Making Patches
+
+11.2 Tips for Patch Consumers
+=============================
+
+A patch producer should tell recipients how to apply the patches, so
+the first rule of thumb for a patch consumer is to follow the
+instructions supplied with the patch.
+
+ GNU `diff' can analyze files with arbitrarily long lines and files
+that end in incomplete lines. However, older versions of `patch'
+cannot patch such files. If you are having trouble applying such
+patches, try upgrading to a recent version of GNU `patch'.
+
+
+File: diffutils.info, Node: Avoiding Common Mistakes, Next: Generating Smaller Patches, Prev: Tips for Patch Consumers, Up: Making Patches
+
+11.3 Avoiding Common Mistakes
+=============================
+
+When producing a patch for multiple files, apply `diff' to directories
+whose names do not have slashes. This reduces confusion when the patch
+consumer specifies the `-pNUMBER' option, since this option can have
+surprising results when the old and new file names have different
+numbers of slashes. For example, do not send a patch with a header
+that looks like this:
+
+ diff -Naur v2.0.29/prog/README prog/README
+ --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800
+ +++ prog/README 2002-03-17 20:49:32.442260588 -0800
+
+because the two file names have different numbers of slashes, and
+different versions of `patch' interpret the file names differently. To
+avoid confusion, send output that looks like this instead:
+
+ diff -Naur v2.0.29/prog/README v2.0.30/prog/README
+ --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800
+ +++ v2.0.30/prog/README 2002-03-17 20:49:32.442260588 -0800
+
+ Make sure you have specified the file names correctly, either in a
+context diff header or with an `Index:' line. Take care to not send out
+reversed patches, since these make people wonder whether they have
+already applied the patch.
+
+ Avoid sending patches that compare backup file names like
+`README.orig' or `README~', since this might confuse `patch' into
+patching a backup file instead of the real file. Instead, send patches
+that compare the same base file names in different directories, e.g.
+`old/README' and `new/README'.
+
+ To save people from partially applying a patch before other patches
+that should have gone before it, you can make the first patch in the
+patch file update a file with a name like `patchlevel.h' or
+`version.c', which contains a patch level or version number. If the
+input file contains the wrong version number, `patch' will complain
+immediately.
+
+ An even clearer way to prevent this problem is to put a `Prereq:'
+line before the patch. If the leading text in the patch file contains a
+line that starts with `Prereq:', `patch' takes the next word from that
+line (normally a version number) and checks whether the next input file
+contains that word, preceded and followed by either white space or a
+newline. If not, `patch' prompts you for confirmation before
+proceeding. This makes it difficult to accidentally apply patches in
+the wrong order.
+
+
+File: diffutils.info, Node: Generating Smaller Patches, Prev: Avoiding Common Mistakes, Up: Making Patches
+
+11.4 Generating Smaller Patches
+===============================
+
+The simplest way to generate a patch is to use `diff -Naur' (*note Tips
+for Patch Producers::), but you might be able to reduce the size of the
+patch by renaming or removing some files before making the patch. If
+the older version of the package contains any files that the newer
+version does not, or if any files have been renamed between the two
+versions, make a list of `rm' and `mv' commands for the user to execute
+in the old version directory before applying the patch. Then run those
+commands yourself in the scratch directory.
+
+ If there are any files that you don't need to include in the patch
+because they can easily be rebuilt from other files (for example,
+`TAGS' and output from `yacc' and `makeinfo'), exclude them from the
+patch by giving `diff' the `-x PATTERN' option (*note Comparing
+Directories::). If you want your patch to modify a derived file
+because your recipients lack tools to build it, make sure that the
+patch for the derived file follows any patches for files that it
+depends on, so that the recipients' time stamps will not confuse `make'.
+
+ Now you can create the patch using `diff -Naur'. Make sure to
+specify the scratch directory first and the newer directory second.
+
+ Add to the top of the patch a note telling the user any `rm' and
+`mv' commands to run before applying the patch. Then you can remove
+the scratch directory.
+
+ You can also shrink the patch size by using fewer lines of context,
+but bear in mind that `patch' typically needs at least two lines for
+proper operation when patches do not exactly match the input files.
+
+
+File: diffutils.info, Node: Invoking cmp, Next: Invoking diff, Prev: Making Patches, Up: Top
+
+12 Invoking `cmp'
+*****************
+
+The `cmp' command compares two files, and if they differ, tells the
+first byte and line number where they differ or reports that one file
+is a prefix of the other. Bytes and lines are numbered starting with
+1. The arguments of `cmp' are as follows:
+
+ cmp OPTIONS... FROM-FILE [TO-FILE [FROM-SKIP [TO-SKIP]]]
+
+ The file name `-' is always the standard input. `cmp' also uses the
+standard input if one file name is omitted. The FROM-SKIP and TO-SKIP
+operands specify how many bytes to ignore at the start of each file;
+they are equivalent to the `--ignore-initial=FROM-SKIP:TO-SKIP' option.
+
+ By default, `cmp' outputs nothing if the two files have the same
+contents. If one file is a prefix of the other, `cmp' prints to
+standard error a message of the following form:
+
+ cmp: EOF on SHORTER-FILE
+
+ Otherwise, `cmp' prints to standard output a message of the
+following form:
+
+ FROM-FILE TO-FILE differ: char BYTE-NUMBER, line LINE-NUMBER
+
+ The message formats can differ outside the POSIX locale. Also,
+POSIX allows the EOF message to be followed by a blank and some
+additional information.
+
+ An exit status of 0 means no differences were found, 1 means some
+differences were found, and 2 means trouble.
+
+* Menu:
+
+* cmp Options:: Summary of options to `cmp'.
+
+
+File: diffutils.info, Node: cmp Options, Up: Invoking cmp
+
+12.1 Options to `cmp'
+=====================
+
+Below is a summary of all of the options that GNU `cmp' accepts. Most
+options have two equivalent names, one of which is a single letter
+preceded by `-', and the other of which is a long name preceded by
+`--'. Multiple single letter options (unless they take an argument)
+can be combined into a single command line word: `-bl' is equivalent to
+`-b -l'.
+
+`-b'
+`--print-bytes'
+ Print the differing bytes. Display control bytes as a `^'
+ followed by a letter of the alphabet and precede bytes that have
+ the high bit set with `M-' (which stands for "meta").
+
+`--help'
+ Output a summary of usage and then exit.
+
+`-i SKIP'
+`--ignore-initial=SKIP'
+ Ignore any differences in the first SKIP bytes of the input files.
+ Treat files with fewer than SKIP bytes as if they are empty. If
+ SKIP is of the form `FROM-SKIP:TO-SKIP', skip the first FROM-SKIP
+ bytes of the first input file and the first TO-SKIP bytes of the
+ second.
+
+`-l'
+`--verbose'
+ Output the (decimal) byte numbers and (octal) values of all
+ differing bytes, instead of the default standard output. Also,
+ output the EOF message if one file is shorter than the other.
+
+`-n COUNT'
+`--bytes=COUNT'
+ Compare at most COUNT input bytes.
+
+`-s'
+`--quiet'
+`--silent'
+ Do not print anything; only return an exit status indicating
+ whether the files differ.
+
+`-v'
+`--version'
+ Output version information and then exit.
+
+ In the above table, operands that are byte counts are normally
+decimal, but may be preceded by `0' for octal and `0x' for hexadecimal.
+
+ A byte count can be followed by a suffix to specify a multiple of
+that count; in this case an omitted integer is understood to be 1. A
+bare size letter, or one followed by `iB', specifies a multiple using
+powers of 1024. A size letter followed by `B' specifies powers of 1000
+instead. For example, `-n 4M' and `-n 4MiB' are equivalent to `-n
+4194304', whereas `-n 4MB' is equivalent to `-n 4000000'. This
+notation is upward compatible with the SI prefixes
+(http://www.bipm.fr/enus/3_SI/si-prefixes.html) for decimal multiples
+and with the IEC 60027-2 prefixes for binary multiples
+(http://physics.nist.gov/cuu/Units/binary.html).
+
+ The following suffixes are defined. Large sizes like `1Y' may be
+rejected by your computer due to limitations of its arithmetic.
+
+`kB'
+ kilobyte: 10^3 = 1000.
+
+`k'
+`K'
+`KiB'
+ kibibyte: 2^10 = 1024. `K' is special: the SI prefix is `k' and
+ the IEC 60027-2 prefix is `Ki', but tradition and POSIX use `k' to
+ mean `KiB'.
+
+`MB'
+ megabyte: 10^6 = 1,000,000.
+
+`M'
+`MiB'
+ mebibyte: 2^20 = 1,048,576.
+
+`GB'
+ gigabyte: 10^9 = 1,000,000,000.
+
+`G'
+`GiB'
+ gibibyte: 2^30 = 1,073,741,824.
+
+`TB'
+ terabyte: 10^12 = 1,000,000,000,000.
+
+`T'
+`TiB'
+ tebibyte: 2^40 = 1,099,511,627,776.
+
+`PB'
+ petabyte: 10^15 = 1,000,000,000,000,000.
+
+`P'
+`PiB'
+ pebibyte: 2^50 = 1,125,899,906,842,624.
+
+`EB'
+ exabyte: 10^18 = 1,000,000,000,000,000,000.
+
+`E'
+`EiB'
+ exbibyte: 2^60 = 1,152,921,504,606,846,976.
+
+`ZB'
+ zettabyte: 10^21 = 1,000,000,000,000,000,000,000
+
+`Z'
+`ZiB'
+ 2^70 = 1,180,591,620,717,411,303,424. (`Zi' is a GNU extension to
+ IEC 60027-2.)
+
+`YB'
+ yottabyte: 10^24 = 1,000,000,000,000,000,000,000,000.
+
+`Y'
+`YiB'
+ 2^80 = 1,208,925,819,614,629,174,706,176. (`Yi' is a GNU
+ extension to IEC 60027-2.)
+
+
+File: diffutils.info, Node: Invoking diff, Next: Invoking diff3, Prev: Invoking cmp, Up: Top
+
+13 Invoking `diff'
+******************
+
+The format for running the `diff' command is:
+
+ diff OPTIONS... FILES...
+
+ In the simplest case, two file names FROM-FILE and TO-FILE are
+given, and `diff' compares the contents of FROM-FILE and TO-FILE. A
+file name of `-' stands for text read from the standard input. As a
+special case, `diff - -' compares a copy of standard input to itself.
+
+ If one file is a directory and the other is not, `diff' compares the
+file in the directory whose name is that of the non-directory. The
+non-directory file must not be `-'.
+
+ If two file names are given and both are directories, `diff'
+compares corresponding files in both directories, in alphabetical
+order; this comparison is not recursive unless the `--recursive' (`-r')
+option is given. `diff' never compares the actual contents of a
+directory as if it were a file. The file that is fully specified may
+not be standard input, because standard input is nameless and the
+notion of "file with the same name" does not apply.
+
+ If the `--from-file=FILE' option is given, the number of file names
+is arbitrary, and FILE is compared to each named file. Similarly, if
+the `--to-file=FILE' option is given, each named file is compared to
+FILE.
+
+ `diff' options begin with `-', so normally file names may not begin
+with `-'. However, `--' as an argument by itself treats the remaining
+arguments as file names even if they begin with `-'.
+
+ An exit status of 0 means no differences were found, 1 means some
+differences were found, and 2 means trouble. Normally, differing
+binary files count as trouble, but this can be altered by using the
+`--text' (`-a') option, or the `-q' or `--brief' option.
+
+* Menu:
+
+* diff Options:: Summary of options to `diff'.
+
+
+File: diffutils.info, Node: diff Options, Up: Invoking diff
+
+13.1 Options to `diff'
+======================
+
+Below is a summary of all of the options that GNU `diff' accepts. Most
+options have two equivalent names, one of which is a single letter
+preceded by `-', and the other of which is a long name preceded by
+`--'. Multiple single letter options (unless they take an argument)
+can be combined into a single command line word: `-ac' is equivalent to
+`-a -c'. Long named options can be abbreviated to any unique prefix of
+their name. Brackets ([ and ]) indicate that an option takes an
+optional argument.
+
+`-a'
+`--text'
+ Treat all files as text and compare them line-by-line, even if they
+ do not seem to be text. *Note Binary::.
+
+`-b'
+`--ignore-space-change'
+ Ignore changes in amount of white space. *Note White Space::.
+
+`-B'
+`--ignore-blank-lines'
+ Ignore changes that just insert or delete blank lines. *Note
+ Blank Lines::.
+
+`--binary'
+ Read and write data in binary mode. *Note Binary::.
+
+`-c'
+ Use the context output format, showing three lines of context.
+ *Note Context Format::.
+
+`-C LINES'
+`--context[=LINES]'
+ Use the context output format, showing LINES (an integer) lines of
+ context, or three if LINES is not given. *Note Context Format::.
+ For proper operation, `patch' typically needs at least two lines of
+ context.
+
+ For compatibility `diff' also supports an obsolete option syntax
+ `-LINES' that has effect when combined with `-c', `-p', or `-u'.
+ New scripts should use `-U LINES' (`-C LINES') instead.
+
+`--changed-group-format=FORMAT'
+ Use FORMAT to output a line group containing differing lines from
+ both files in if-then-else format. *Note Line Group Formats::.
+
+`-d'
+`--minimal'
+ Change the algorithm perhaps find a smaller set of changes. This
+ makes `diff' slower (sometimes much slower). *Note diff
+ Performance::.
+
+`-D NAME'
+`--ifdef=NAME'
+ Make merged `#ifdef' format output, conditional on the preprocessor
+ macro NAME. *Note If-then-else::.
+
+`-e'
+`--ed'
+ Make output that is a valid `ed' script. *Note ed Scripts::.
+
+`-E'
+`--ignore-tab-expansion'
+ Ignore changes due to tab expansion. *Note White Space::.
+
+`-f'
+`--forward-ed'
+ Make output that looks vaguely like an `ed' script but has changes
+ in the order they appear in the file. *Note Forward ed::.
+
+`-F REGEXP'
+`--show-function-line=REGEXP'
+ In context and unified format, for each hunk of differences, show
+ some of the last preceding line that matches REGEXP. *Note
+ Specified Headings::.
+
+`--from-file=FILE'
+ Compare FILE to each operand; FILE may be a directory.
+
+`--help'
+ Output a summary of usage and then exit.
+
+`--horizon-lines=LINES'
+ Do not discard the last LINES lines of the common prefix and the
+ first LINES lines of the common suffix. *Note diff Performance::.
+
+`-i'
+`--ignore-case'
+ Ignore changes in case; consider upper- and lower-case letters
+ equivalent. *Note Case Folding::.
+
+`-I REGEXP'
+`--ignore-matching-lines=REGEXP'
+ Ignore changes that just insert or delete lines that match REGEXP.
+ *Note Specified Lines::.
+
+`--ignore-file-name-case'
+ Ignore case when comparing file names. For example, recursive
+ comparison of `d' to `e' might compare the contents of `d/Init'
+ and `e/inIt'. At the top level, `diff d inIt' might compare the
+ contents of `d/Init' and `inIt'. *Note Comparing Directories::.
+
+`-l'
+`--paginate'
+ Pass the output through `pr' to paginate it. *Note Pagination::.
+
+`-L LABEL'
+`--label=LABEL'
+ Use LABEL instead of the file name in the context format (*note
+ Context Format::) and unified format (*note Unified Format::)
+ headers. *Note RCS::.
+
+`--left-column'
+ Print only the left column of two common lines in side by side
+ format. *Note Side by Side Format::.
+
+`--line-format=FORMAT'
+ Use FORMAT to output all input lines in if-then-else format.
+ *Note Line Formats::.
+
+`-n'
+`--rcs'
+ Output RCS-format diffs; like `-f' except that each command
+ specifies the number of lines affected. *Note RCS::.
+
+`-N'
+`--new-file'
+ In directory comparison, if a file is found in only one directory,
+ treat it as present but empty in the other directory. *Note
+ Comparing Directories::.
+
+`--new-group-format=FORMAT'
+ Use FORMAT to output a group of lines taken from just the second
+ file in if-then-else format. *Note Line Group Formats::.
+
+`--new-line-format=FORMAT'
+ Use FORMAT to output a line taken from just the second file in
+ if-then-else format. *Note Line Formats::.
+
+`--old-group-format=FORMAT'
+ Use FORMAT to output a group of lines taken from just the first
+ file in if-then-else format. *Note Line Group Formats::.
+
+`--old-line-format=FORMAT'
+ Use FORMAT to output a line taken from just the first file in
+ if-then-else format. *Note Line Formats::.
+
+`-p'
+`--show-c-function'
+ Show which C function each change is in. *Note C Function
+ Headings::.
+
+`-q'
+`--brief'
+ Report only whether the files differ, not the details of the
+ differences. *Note Brief::.
+
+`-r'
+`--recursive'
+ When comparing directories, recursively compare any subdirectories
+ found. *Note Comparing Directories::.
+
+`-s'
+`--report-identical-files'
+ Report when two files are the same. *Note Comparing Directories::.
+
+`-S FILE'
+`--starting-file=FILE'
+ When comparing directories, start with the file FILE. This is
+ used for resuming an aborted comparison. *Note Comparing
+ Directories::.
+
+`--speed-large-files'
+ Use heuristics to speed handling of large files that have numerous
+ scattered small changes. *Note diff Performance::.
+
+`--strip-trailing-cr'
+ Strip any trailing carriage return at the end of an input line.
+ *Note Binary::.
+
+`--suppress-common-lines'
+ Do not print common lines in side by side format. *Note Side by
+ Side Format::.
+
+`-t'
+`--expand-tabs'
+ Expand tabs to spaces in the output, to preserve the alignment of
+ tabs in the input files. *Note Tabs::.
+
+`-T'
+`--initial-tab'
+ Output 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. *Note Tabs::.
+
+`--tabsize=COLUMNS'
+ Assume that tab stops are set every COLUMNS (default 8) print
+ columns. *Note Tabs::.
+
+`--suppress-blank-empty'
+ Suppress any blanks before newlines when printing the
+ representation of an empty line, when outputting normal, context,
+ or unified format. *Note Trailing Blanks::.
+
+`--to-file=FILE'
+ Compare each operand to FILE; FILE may be a directory.
+
+`-u'
+ Use the unified output format, showing three lines of context.
+ *Note Unified Format::.
+
+`--unchanged-group-format=FORMAT'
+ Use FORMAT to output a group of common lines taken from both files
+ in if-then-else format. *Note Line Group Formats::.
+
+`--unchanged-line-format=FORMAT'
+ Use FORMAT to output a line common to both files in if-then-else
+ format. *Note Line Formats::.
+
+`--unidirectional-new-file'
+ When comparing directories, if a file appears only in the second
+ directory of the two, treat it as present but empty in the other.
+ *Note Comparing Directories::.
+
+`-U LINES'
+`--unified[=LINES]'
+ Use the unified output format, showing LINES (an integer) lines of
+ context, or three if LINES is not given. *Note Unified Format::.
+ For proper operation, `patch' typically needs at least two lines of
+ context.
+
+ On older systems, `diff' supports an obsolete option `-LINES' that
+ has effect when combined with `-u'. POSIX 1003.1-2001 (*note
+ Standards conformance::) does not allow this; use `-U LINES'
+ instead.
+
+`-v'
+`--version'
+ Output version information and then exit.
+
+`-w'
+`--ignore-all-space'
+ Ignore white space when comparing lines. *Note White Space::.
+
+`-W COLUMNS'
+`--width=COLUMNS'
+ Output at most COLUMNS (default 130) print columns per line in
+ side by side format. *Note Side by Side Format::.
+
+`-x PATTERN'
+`--exclude=PATTERN'
+ When comparing directories, ignore files and subdirectories whose
+ basenames match PATTERN. *Note Comparing Directories::.
+
+`-X FILE'
+`--exclude-from=FILE'
+ When comparing directories, ignore files and subdirectories whose
+ basenames match any pattern contained in FILE. *Note Comparing
+ Directories::.
+
+`-y'
+`--side-by-side'
+ Use the side by side output format. *Note Side by Side Format::.
+
+`-Z'
+`--ignore-trailing-space'
+ Ignore white space at line end. *Note White Space::.
+
+
+File: diffutils.info, Node: Invoking diff3, Next: Invoking patch, Prev: Invoking diff, Up: Top
+
+14 Invoking `diff3'
+*******************
+
+The `diff3' command compares three files and outputs descriptions of
+their differences. Its arguments are as follows:
+
+ diff3 OPTIONS... MINE OLDER YOURS
+
+ The files to compare are MINE, OLDER, and YOURS. At most one of
+these three file names may be `-', which tells `diff3' to read the
+standard input for that file.
+
+ An exit status of 0 means `diff3' was successful, 1 means some
+conflicts were found, and 2 means trouble.
+
+* Menu:
+
+* diff3 Options:: Summary of options to `diff3'.
+
+
+File: diffutils.info, Node: diff3 Options, Up: Invoking diff3
+
+14.1 Options to `diff3'
+=======================
+
+Below is a summary of all of the options that GNU `diff3' accepts.
+Multiple single letter options (unless they take an argument) can be
+combined into a single command line argument.
+
+`-a'
+`--text'
+ Treat all files as text and compare them line-by-line, even if they
+ do not appear to be text. *Note Binary::.
+
+`-A'
+`--show-all'
+ Incorporate all unmerged changes from OLDER to YOURS into MINE,
+ surrounding conflicts with bracket lines. *Note Marking
+ Conflicts::.
+
+`--diff-program=PROGRAM'
+ Use the compatible comparison program PROGRAM to compare files
+ instead of `diff'.
+
+`-e'
+`--ed'
+ Generate an `ed' script that incorporates all the changes from
+ OLDER to YOURS into MINE. *Note Which Changes::.
+
+`-E'
+`--show-overlap'
+ Like `-e', except bracket lines from overlapping changes' first
+ and third files. *Note Marking Conflicts::. With `-E', an
+ overlapping change looks like this:
+
+ <<<<<<< MINE
+ lines from MINE
+ =======
+ lines from YOURS
+ >>>>>>> YOURS
+
+`--help'
+ Output a summary of usage and then exit.
+
+`-i'
+ Generate `w' and `q' commands at the end of the `ed' script for
+ System V compatibility. This option must be combined with one of
+ the `-AeExX3' options, and may not be combined with `-m'. *Note
+ Saving the Changed File::.
+
+`--label=LABEL'
+ Use the label LABEL for the brackets output by the `-A', `-E' and
+ `-X' options. This option may be given up to three times, one for
+ each input file. The default labels are the names of the input
+ files. Thus `diff3 --label X --label Y --label Z -m A B C' acts
+ like `diff3 -m A B C', except that the output looks like it came
+ from files named `X', `Y' and `Z' rather than from files named
+ `A', `B' and `C'. *Note Marking Conflicts::.
+
+`-m'
+`--merge'
+ Apply the edit script to the first file and send the result to
+ standard output. Unlike piping the output from `diff3' to `ed',
+ this works even for binary files and incomplete lines. `-A' is
+ assumed if no edit script option is specified. *Note Bypassing
+ ed::.
+
+`--strip-trailing-cr'
+ Strip any trailing carriage return at the end of an input line.
+ *Note Binary::.
+
+`-T'
+`--initial-tab'
+ Output a tab rather than two spaces before the text of a line in
+ normal format. This causes the alignment of tabs in the line to
+ look normal. *Note Tabs::.
+
+`-v'
+`--version'
+ Output version information and then exit.
+
+`-x'
+`--overlap-only'
+ Like `-e', except output only the overlapping changes. *Note
+ Which Changes::.
+
+`-X'
+ Like `-E', except output only the overlapping changes. In other
+ words, like `-x', except bracket changes as in `-E'. *Note
+ Marking Conflicts::.
+
+`-3'
+`--easy-only'
+ Like `-e', except output only the nonoverlapping changes. *Note
+ Which Changes::.
+
+
+File: diffutils.info, Node: Invoking patch, Next: Invoking sdiff, Prev: Invoking diff3, Up: Top
+
+15 Invoking `patch'
+*******************
+
+Normally `patch' is invoked like this:
+
+ patch <PATCHFILE
+
+ The full format for invoking `patch' is:
+
+ patch OPTIONS... [ORIGFILE [PATCHFILE]]
+
+ You can also specify where to read the patch from with the `-i
+PATCHFILE' or `--input=PATCHFILE' option. If you do not specify
+PATCHFILE, or if PATCHFILE is `-', `patch' reads the patch (that is,
+the `diff' output) from the standard input.
+
+ If you do not specify an input file on the command line, `patch'
+tries to intuit from the "leading text" (any text in the patch that
+comes before the `diff' output) which file to edit. *Note Multiple
+Patches::.
+
+ By default, `patch' replaces the original input file with the
+patched version, possibly after renaming the original file into a
+backup file (*note Backup Names::, for a description of how `patch'
+names backup files). You can also specify where to put the output with
+the `-o FILE' or `--output=FILE' option; however, do not use this option
+if FILE is one of the input files.
+
+* Menu:
+
+* patch Options:: Summary table of options to `patch'.
+
+
+File: diffutils.info, Node: patch Options, Up: Invoking patch
+
+15.1 Options to `patch'
+=======================
+
+Here is a summary of all of the options that GNU `patch' accepts.
+*Note patch and Tradition::, for which of these options are safe to use
+in older versions of `patch'.
+
+ Multiple single-letter options that do not take an argument can be
+combined into a single command line argument with only one dash.
+
+`-b'
+`--backup'
+ Back up the original contents of each file, even if backups would
+ normally not be made. *Note Backups::.
+
+`-B PREFIX'
+`--prefix=PREFIX'
+ Prepend PREFIX to backup file names. *Note Backup Names::.
+
+`--backup-if-mismatch'
+ Back up the original contents of each file if the patch does not
+ exactly match the file. This is the default behavior when not
+ conforming to POSIX. *Note Backups::.
+
+`--binary'
+ Read and write all files in binary mode, except for standard output
+ and `/dev/tty'. This option has no effect on POSIX-conforming
+ systems like GNU/Linux. On systems where this option makes a
+ difference, the patch should be generated by `diff -a --binary'.
+ *Note Binary::.
+
+`-c'
+`--context'
+ Interpret the patch file as a context diff. *Note patch Input::.
+
+`-d DIRECTORY'
+`--directory=DIRECTORY'
+ Make directory DIRECTORY the current directory for interpreting
+ both file names in the patch file, and file names given as
+ arguments to other options. *Note patch Directories::.
+
+`-D NAME'
+`--ifdef=NAME'
+ Make merged if-then-else output using NAME. *Note If-then-else::.
+
+`--dry-run'
+ Print the results of applying the patches without actually changing
+ any files. *Note Dry Runs::.
+
+`-e'
+`--ed'
+ Interpret the patch file as an `ed' script. *Note patch Input::.
+
+`-E'
+`--remove-empty-files'
+ Remove output files that are empty after the patches have been
+ applied. *Note Creating and Removing::.
+
+`-f'
+`--force'
+ Assume that the user knows exactly what he or she is doing, and do
+ not ask any questions. *Note patch Messages::.
+
+`-F LINES'
+`--fuzz=LINES'
+ Set the maximum fuzz factor to LINES. *Note Inexact::.
+
+`-g NUM'
+`--get=NUM'
+ If NUM is positive, get input files from a revision control system
+ as necessary; if zero, do not get the files; if negative, ask the
+ user whether to get the files. *Note Revision Control::.
+
+`--help'
+ Output a summary of usage and then exit.
+
+`-i PATCHFILE'
+`--input=PATCHFILE'
+ Read the patch from PATCHFILE rather than from standard input.
+ *Note patch Options::.
+
+`-l'
+`--ignore-white-space'
+ Let any sequence of blanks (spaces or tabs) in the patch file match
+ any sequence of blanks in the input file. *Note Changed White
+ Space::.
+
+`-n'
+`--normal'
+ Interpret the patch file as a normal diff. *Note patch Input::.
+
+`-N'
+`--forward'
+ Ignore patches that `patch' thinks are reversed or already applied.
+ See also `-R'. *Note Reversed Patches::.
+
+`--no-backup-if-mismatch'
+ Do not back up the original contents of files. This is the default
+ behavior when conforming to POSIX. *Note Backups::.
+
+`-o FILE'
+`--output=FILE'
+ Use FILE as the output file name. *Note patch Options::.
+
+`-pNUMBER'
+`--strip=NUMBER'
+ Set the file name strip count to NUMBER. *Note patch
+ Directories::.
+
+`--posix'
+ Conform to POSIX, as if the `POSIXLY_CORRECT' environment variable
+ had been set. *Note patch and POSIX::.
+
+`--quoting-style=WORD'
+ Use style WORD to quote names in diagnostics, as if the
+ `QUOTING_STYLE' environment variable had been set to WORD. *Note
+ patch Quoting Style::.
+
+`-r REJECT-FILE'
+`--reject-file=REJECT-FILE'
+ Use REJECT-FILE as the reject file name. *Note Reject Names::.
+
+`-R'
+`--reverse'
+ Assume that this patch was created with the old and new files
+ swapped. *Note Reversed Patches::.
+
+`-s'
+`--quiet'
+`--silent'
+ Work silently unless an error occurs. *Note patch Messages::.
+
+`-t'
+`--batch'
+ Do not ask any questions. *Note patch Messages::.
+
+`-T'
+`--set-time'
+ Set the modification and access times of patched files from time
+ stamps given in context diff headers, assuming that the context
+ diff headers use local time. *Note Patching Time Stamps::.
+
+`-u'
+`--unified'
+ Interpret the patch file as a unified diff. *Note patch Input::.
+
+`-v'
+`--version'
+ Output version information and then exit.
+
+`-V BACKUP-STYLE'
+`--version=control=BACKUP-STYLE'
+ Select the naming convention for backup file names. *Note Backup
+ Names::.
+
+`--verbose'
+ Print more diagnostics than usual. *Note patch Messages::.
+
+`-x NUMBER'
+`--debug=NUMBER'
+ Set internal debugging flags. Of interest only to `patch'
+ patchers.
+
+`-Y PREFIX'
+`--basename-prefix=PREFIX'
+ Prepend PREFIX to base names of backup files. *Note Backup
+ Names::.
+
+`-z SUFFIX'
+`--suffix=SUFFIX'
+ Use SUFFIX as the backup extension instead of `.orig' or `~'.
+ *Note Backup Names::.
+
+`-Z'
+`--set-utc'
+ Set the modification and access times of patched files from time
+ stamps given in context diff headers, assuming that the context
+ diff headers use UTC. *Note Patching Time Stamps::.
+
+
+
+File: diffutils.info, Node: Invoking sdiff, Next: Standards conformance, Prev: Invoking patch, Up: Top
+
+16 Invoking `sdiff'
+*******************
+
+The `sdiff' command merges two files and interactively outputs the
+results. Its arguments are as follows:
+
+ sdiff -o OUTFILE OPTIONS... FROM-FILE TO-FILE
+
+ This merges FROM-FILE with TO-FILE, with output to OUTFILE. If
+FROM-FILE is a directory and TO-FILE is not, `sdiff' compares the file
+in FROM-FILE whose file name is that of TO-FILE, and vice versa.
+FROM-FILE and TO-FILE may not both be directories.
+
+ `sdiff' options begin with `-', so normally FROM-FILE and TO-FILE
+may not begin with `-'. However, `--' as an argument by itself treats
+the remaining arguments as file names even if they begin with `-'. You
+may not use `-' as an input file.
+
+ `sdiff' without `--output' (`-o') produces a side-by-side
+difference. This usage is obsolete; use the `--side-by-side' (`-y')
+option of `diff' instead.
+
+ An exit status of 0 means no differences were found, 1 means some
+differences were found, and 2 means trouble.
+
+* Menu:
+
+* sdiff Options:: Summary of options to `diff'.
+
+
+File: diffutils.info, Node: sdiff Options, Up: Invoking sdiff
+
+16.1 Options to `sdiff'
+=======================
+
+Below is a summary of all of the options that GNU `sdiff' accepts.
+Each option has two equivalent names, one of which is a single letter
+preceded by `-', and the other of which is a long name preceded by
+`--'. Multiple single letter options (unless they take an argument)
+can be combined into a single command line argument. Long named
+options can be abbreviated to any unique prefix of their name.
+
+`-a'
+`--text'
+ Treat all files as text and compare them line-by-line, even if they
+ do not appear to be text. *Note Binary::.
+
+`-b'
+`--ignore-space-change'
+ Ignore changes in amount of white space. *Note White Space::.
+
+`-B'
+`--ignore-blank-lines'
+ Ignore changes that just insert or delete blank lines. *Note
+ Blank Lines::.
+
+`-d'
+`--minimal'
+ Change the algorithm to perhaps find a smaller set of changes.
+ This makes `sdiff' slower (sometimes much slower). *Note diff
+ Performance::.
+
+`--diff-program=PROGRAM'
+ Use the compatible comparison program PROGRAM to compare files
+ instead of `diff'.
+
+`-E'
+`--ignore-tab-expansion'
+ Ignore changes due to tab expansion. *Note White Space::.
+
+`--help'
+ Output a summary of usage and then exit.
+
+`-i'
+`--ignore-case'
+ Ignore changes in case; consider upper- and lower-case to be the
+ same. *Note Case Folding::.
+
+`-I REGEXP'
+`--ignore-matching-lines=REGEXP'
+ Ignore changes that just insert or delete lines that match REGEXP.
+ *Note Specified Lines::.
+
+`-l'
+`--left-column'
+ Print only the left column of two common lines. *Note Side by
+ Side Format::.
+
+`-o FILE'
+`--output=FILE'
+ Put merged output into FILE. This option is required for merging.
+
+`-s'
+`--suppress-common-lines'
+ Do not print common lines. *Note Side by Side Format::.
+
+`--speed-large-files'
+ Use heuristics to speed handling of large files that have numerous
+ scattered small changes. *Note diff Performance::.
+
+`--strip-trailing-cr'
+ Strip any trailing carriage return at the end of an input line.
+ *Note Binary::.
+
+`-t'
+`--expand-tabs'
+ Expand tabs to spaces in the output, to preserve the alignment of
+ tabs in the input files. *Note Tabs::.
+
+`--tabsize=COLUMNS'
+ Assume that tab stops are set every COLUMNS (default 8) print
+ columns. *Note Tabs::.
+
+`-v'
+`--version'
+ Output version information and then exit.
+
+`-w COLUMNS'
+`--width=COLUMNS'
+ Output at most COLUMNS (default 130) print columns per line.
+ *Note Side by Side Format::. Note that for historical reasons,
+ this option is `-W' in `diff', `-w' in `sdiff'.
+
+`-W'
+`--ignore-all-space'
+ Ignore white space when comparing lines. *Note White Space::.
+ Note that for historical reasons, this option is `-w' in `diff',
+ `-W' in `sdiff'.
+
+`-Z'
+`--ignore-trailing-space'
+ Ignore white space at line end. *Note White Space::.
+
+
+File: diffutils.info, Node: Standards conformance, Next: Projects, Prev: Invoking sdiff, Up: Top
+
+17 Standards conformance
+************************
+
+In a few cases, the GNU utilities' default behavior is incompatible
+with the POSIX standard. To suppress these incompatibilities, define
+the `POSIXLY_CORRECT' environment variable. Unless you are checking
+for POSIX conformance, you probably do not need to define
+`POSIXLY_CORRECT'.
+
+ Normally options and operands can appear in any order, and programs
+act as if all the options appear before any operands. For example,
+`diff lao tzu -C 2' acts like `diff -C 2 lao tzu', since `2' is an
+option-argument of `-C'. However, if the `POSIXLY_CORRECT' environment
+variable is set, options must appear before operands, unless otherwise
+specified for a particular command.
+
+ Newer versions of POSIX are occasionally incompatible with older
+versions. For example, older versions of POSIX allowed the command
+`diff -c -10' to have the same meaning as `diff -C 10', but POSIX
+1003.1-2001 `diff' no longer allows digit-string options like `-10'.
+
+ The GNU utilities normally conform to the version of POSIX that is
+standard for your system. To cause them to conform to a different
+version of POSIX, define the `_POSIX2_VERSION' environment variable to
+a value of the form YYYYMM specifying the year and month the standard
+was adopted. Two values are currently supported for `_POSIX2_VERSION':
+`199209' stands for POSIX 1003.2-1992, and `200112' stands for POSIX
+1003.1-2001. For example, if you are running older software that
+assumes an older version of POSIX and uses `diff -c -10', you can work
+around the compatibility problems by setting `_POSIX2_VERSION=199209'
+in your environment.
+
+
+File: diffutils.info, Node: Projects, Next: Copying This Manual, Prev: Standards conformance, Up: Top
+
+18 Future Projects
+******************
+
+Here are some ideas for improving GNU `diff' and `patch'. The GNU
+project has identified some improvements as potential programming
+projects for volunteers. You can also help by reporting any bugs that
+you find.
+
+ If you are a programmer and would like to contribute something to the
+GNU project, please consider volunteering for one of these projects.
+If you are seriously contemplating work, please write to <gvc@gnu.org>
+to coordinate with other volunteers.
+
+* Menu:
+
+* Shortcomings:: Suggested projects for improvements.
+* Bugs:: Reporting bugs.
+
+
+File: diffutils.info, Node: Shortcomings, Next: Bugs, Up: Projects
+
+18.1 Suggested Projects for Improving GNU `diff' and `patch'
+============================================================
+
+One should be able to use GNU `diff' to generate a patch from any pair
+of directory trees, and given the patch and a copy of one such tree,
+use `patch' to generate a faithful copy of the other. Unfortunately,
+some changes to directory trees cannot be expressed using current patch
+formats; also, `patch' does not handle some of the existing formats.
+These shortcomings motivate the following suggested projects.
+
+* Menu:
+
+* Internationalization:: Handling multibyte and varying-width characters.
+* Changing Structure:: Handling changes to the directory structure.
+* Special Files:: Handling symbolic links, device special files, etc.
+* Unusual File Names:: Handling file names that contain unusual characters.
+* Time Stamp Order:: Outputting diffs in time stamp order.
+* Ignoring Changes:: Ignoring certain changes while showing others.
+* Speedups:: Improving performance.
+
+
+File: diffutils.info, Node: Internationalization, Next: Changing Structure, Up: Shortcomings
+
+18.1.1 Handling Multibyte and Varying-Width Characters
+------------------------------------------------------
+
+`diff', `diff3' and `sdiff' treat each line of input as a string of
+unibyte characters. This can mishandle multibyte characters in some
+cases. For example, when asked to ignore spaces, `diff' does not
+properly ignore a multibyte space character.
+
+ Also, `diff' currently assumes that each byte is one column wide,
+and this assumption is incorrect in some locales, e.g., locales that
+use UTF-8 encoding. This causes problems with the `-y' or
+`--side-by-side' option of `diff'.
+
+ These problems need to be fixed without unduly affecting the
+performance of the utilities in unibyte environments.
+
+ The IBM GNU/Linux Technology Center Internationalization Team has
+proposed patches to support internationalized `diff'
+(http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz).
+Unfortunately, these patches are incomplete and are to an older version
+of `diff', so more work needs to be done in this area.
+
+
+File: diffutils.info, Node: Changing Structure, Next: Special Files, Prev: Internationalization, Up: Shortcomings
+
+18.1.2 Handling Changes to the Directory Structure
+--------------------------------------------------
+
+`diff' and `patch' do not handle some changes to directory structure.
+For example, suppose one directory tree contains a directory named `D'
+with some subsidiary files, and another contains a file with the same
+name `D'. `diff -r' does not output enough information for `patch' to
+transform the directory subtree into the file.
+
+ There should be a way to specify that a file has been removed without
+having to include its entire contents in the patch file. There should
+also be a way to tell `patch' that a file was renamed, even if there is
+no way for `diff' to generate such information. There should be a way
+to tell `patch' that a file's time stamp has changed, even if its
+contents have not changed.
+
+ These problems can be fixed by extending the `diff' output format to
+represent changes in directory structure, and extending `patch' to
+understand these extensions.
+
+
+File: diffutils.info, Node: Special Files, Next: Unusual File Names, Prev: Changing Structure, Up: Shortcomings
+
+18.1.3 Files that are Neither Directories Nor Regular Files
+-----------------------------------------------------------
+
+Some files are neither directories nor regular files: they are unusual
+files like symbolic links, device special files, named pipes, and
+sockets. Currently, `diff' treats symbolic links as if they were the
+pointed-to files, except that a recursive `diff' reports an error if it
+detects infinite loops of symbolic links (e.g., symbolic links to
+`..'). `diff' treats other special files like regular files if they
+are specified at the top level, but simply reports their presence when
+comparing directories. This means that `patch' cannot represent
+changes to such files. For example, if you change which file a
+symbolic link points to, `diff' outputs the difference between the two
+files, instead of the change to the symbolic link.
+
+ `diff' should optionally report changes to special files specially,
+and `patch' should be extended to understand these extensions.
+
+
+File: diffutils.info, Node: Unusual File Names, Next: Time Stamp Order, Prev: Special Files, Up: Shortcomings
+
+18.1.4 File Names that Contain Unusual Characters
+-------------------------------------------------
+
+When a file name contains an unusual character like a newline or white
+space, `diff -r' generates a patch that `patch' cannot parse. The
+problem is with format of `diff' output, not just with `patch', because
+with odd enough file names one can cause `diff' to generate a patch
+that is syntactically correct but patches the wrong files. The format
+of `diff' output should be extended to handle all possible file names.
+
+
+File: diffutils.info, Node: Time Stamp Order, Next: Ignoring Changes, Prev: Unusual File Names, Up: Shortcomings
+
+18.1.5 Outputting Diffs in Time Stamp Order
+-------------------------------------------
+
+Applying `patch' to a multiple-file diff can result in files whose time
+stamps are out of order. GNU `patch' has options to restore the time
+stamps of the updated files (*note Patching Time Stamps::), but
+sometimes it is useful to generate a patch that works even if the
+recipient does not have GNU patch, or does not use these options. One
+way to do this would be to implement a `diff' option to output diffs in
+time stamp order.
+
+
+File: diffutils.info, Node: Ignoring Changes, Next: Speedups, Prev: Time Stamp Order, Up: Shortcomings
+
+18.1.6 Ignoring Certain Changes
+-------------------------------
+
+It would be nice to have a feature for specifying two strings, one in
+FROM-FILE and one in TO-FILE, which should be considered to match.
+Thus, if the two strings are `foo' and `bar', then if two lines differ
+only in that `foo' in file 1 corresponds to `bar' in file 2, the lines
+are treated as identical.
+
+ It is not clear how general this feature can or should be, or what
+syntax should be used for it.
+
+ A partial substitute is to filter one or both files before comparing,
+e.g.:
+
+ sed 's/foo/bar/g' file1 | diff - file2
+
+ However, this outputs the filtered text, not the original.
+
+
+File: diffutils.info, Node: Speedups, Prev: Ignoring Changes, Up: Shortcomings
+
+18.1.7 Improving Performance
+----------------------------
+
+When comparing two large directory structures, one of which was
+originally copied from the other with time stamps preserved (e.g., with
+`cp -pR'), it would greatly improve performance if an option told
+`diff' to assume that two files with the same size and time stamps have
+the same content. *Note diff Performance::.
+
+
+File: diffutils.info, Node: Bugs, Prev: Shortcomings, Up: Projects
+
+18.2 Reporting Bugs
+===================
+
+If you think you have found a bug in GNU `cmp', `diff', `diff3', or
+`sdiff', please report it by electronic mail to the GNU utilities bug
+report mailing list
+(http://mail.gnu.org/mailman/listinfo/bug-gnu-utils)
+<bug-gnu-utils@gnu.org>. Please send bug reports for GNU `patch' to
+<bug-patch@gnu.org>. Send as precise a description of the problem as
+you can, including the output of the `--version' option and sample
+input files that produce the bug, if applicable. If you have a
+nontrivial fix for the bug, please send it as well. If you have a
+patch, please send it too. It may simplify the maintainer's job if the
+patch is relative to a recent test release, which you can find in the
+directory `ftp://alpha.gnu.org/gnu/diffutils/'.
+
+
+File: diffutils.info, Node: Copying This Manual, Next: Translations, Prev: Projects, Up: Top
+
+Appendix A Copying This Manual
+******************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ `http://fsf.org/'
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A
+ copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include proprietary formats that
+ can be read and edited only by proprietary word processors, SGML or
+ XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF
+ produced by some word processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of
+ previous versions (which should, if there were any, be listed
+ in the History section of the Document). You may use the
+ same title as a previous version if the original publisher of
+ that version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on
+ the Title Page. If there is no section Entitled "History" in
+ the Document, create one stating the title, year, authors,
+ and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in
+ the previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in
+ the "History" section. You may omit a network location for a
+ work that was published at least four years before the
+ Document itself, or if the original publisher of the version
+ it refers to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the
+ section all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section
+ titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, receipt of a copy of some or all of
+ the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ `http://www.gnu.org/copyleft/'.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: diffutils.info, Node: Translations, Next: Index, Prev: Copying This Manual, Up: Top
+
+Appendix B Translations of This Manual
+**************************************
+
+Nishio Futoshi of the GNUjdoc project has prepared a Japanese
+translation of this manual. Its most recent version can be found at
+`http://openlab.ring.gr.jp/gnujdoc/cvsweb/cvsweb.cgi/gnujdoc/'.
+
+
+File: diffutils.info, Node: Index, Prev: Translations, Up: Top
+
+Appendix C Index
+****************
+
+
+* Menu:
+
+* ! output format: Context. (line 6)
+* +- output format: Unified Format. (line 6)
+* < output format: Normal. (line 6)
+* <<<<<<< for marking conflicts: Marking Conflicts. (line 6)
+* _POSIX2_VERSION: Standards conformance.
+ (line 24)
+* aligning tab stops: Tabs. (line 6)
+* alternate file names: Alternate Names. (line 6)
+* backup file names: Backup Names. (line 6)
+* backup file strategy: Backups. (line 6)
+* binary file diff: Binary. (line 6)
+* blank and tab difference suppression: White Space. (line 6)
+* blank line difference suppression: Blank Lines. (line 6)
+* brief difference reports: Brief. (line 6)
+* bug reports: Bugs. (line 6)
+* C function headings: C Function Headings. (line 6)
+* C if-then-else output format: If-then-else. (line 6)
+* case difference suppression: Case Folding. (line 6)
+* ClearCase: Revision Control. (line 6)
+* cmp invocation: Invoking cmp. (line 6)
+* cmp options: cmp Options. (line 6)
+* columnar output: Side by Side. (line 6)
+* common mistakes with patches: Avoiding Common Mistakes.
+ (line 6)
+* comparing three files: Comparing Three Files.
+ (line 6)
+* conflict: diff3 Merging. (line 26)
+* conflict marking: Marking Conflicts. (line 6)
+* context output format: Context. (line 6)
+* creating files: Creating and Removing.
+ (line 6)
+* diagnostics from patch: patch Messages. (line 6)
+* diff invocation: Invoking diff. (line 6)
+* diff merging: Interactive Merging. (line 6)
+* diff options: diff Options. (line 6)
+* diff sample input: Sample diff Input. (line 6)
+* diff3 hunks: diff3 Hunks. (line 6)
+* diff3 invocation: Invoking diff3. (line 6)
+* diff3 options: diff3 Options. (line 6)
+* diff3 sample input: Sample diff3 Input. (line 6)
+* directories and patch: patch Directories. (line 6)
+* directory structure changes: Changing Structure. (line 6)
+* dry runs for patch: Dry Runs. (line 6)
+* ed script output format: ed Scripts. (line 6)
+* EDITOR: Merge Commands. (line 50)
+* empty files, removing: Creating and Removing.
+ (line 6)
+* exabyte, definition of: cmp Options. (line 106)
+* exbibyte, definition of: cmp Options. (line 110)
+* file name alternates: Alternate Names. (line 6)
+* file names with unusual characters: Unusual File Names. (line 6)
+* format of diff output: Output Formats. (line 6)
+* format of diff3 output: Comparing Three Files.
+ (line 6)
+* formats for if-then-else line groups: Line Group Formats. (line 6)
+* forward ed script output format: Forward ed. (line 6)
+* full lines: Incomplete Lines. (line 6)
+* function headings, C: C Function Headings. (line 6)
+* fuzz factor when patching: Inexact. (line 6)
+* gibibyte, definition of: cmp Options. (line 89)
+* gigabyte, definition of: cmp Options. (line 85)
+* headings: Sections. (line 6)
+* hunks: Hunks. (line 6)
+* hunks for diff3: diff3 Hunks. (line 6)
+* if-then-else output format: If-then-else. (line 6)
+* ifdef output format: If-then-else. (line 6)
+* imperfect patch application: Imperfect. (line 6)
+* incomplete line merging: Merging Incomplete Lines.
+ (line 6)
+* incomplete lines: Incomplete Lines. (line 6)
+* inexact patches: Inexact. (line 6)
+* inhibit messages from patch: More or Fewer Messages.
+ (line 6)
+* interactive merging: Interactive Merging. (line 6)
+* introduction: Comparison. (line 6)
+* intuiting file names from patches: Multiple Patches. (line 6)
+* invoking cmp: Invoking cmp. (line 6)
+* invoking diff: Invoking diff. (line 6)
+* invoking diff3: Invoking diff3. (line 6)
+* invoking patch: Invoking patch. (line 6)
+* invoking sdiff: Invoking sdiff. (line 6)
+* keyboard input to patch: patch and Keyboard Input.
+ (line 6)
+* kibibyte, definition of: cmp Options. (line 73)
+* kilobyte, definition of: cmp Options. (line 68)
+* LC_COLLATE: Comparing Directories.
+ (line 6)
+* LC_NUMERIC: Line Group Formats. (line 144)
+* LC_TIME: Detailed Context. (line 12)
+* line formats: Line Formats. (line 6)
+* line group formats: Line Group Formats. (line 6)
+* mebibyte, definition of: cmp Options. (line 82)
+* megabyte, definition of: cmp Options. (line 78)
+* merge commands: Merge Commands. (line 6)
+* merged diff3 format: Bypassing ed. (line 6)
+* merged output format: If-then-else. (line 6)
+* merging from a common ancestor: diff3 Merging. (line 6)
+* merging interactively: Merge Commands. (line 6)
+* messages from patch: patch Messages. (line 6)
+* multibyte characters: Internationalization.
+ (line 6)
+* multiple patches: Multiple Patches. (line 6)
+* newline treatment by diff: Incomplete Lines. (line 6)
+* normal output format: Normal. (line 6)
+* options for cmp: cmp Options. (line 6)
+* options for diff: diff Options. (line 6)
+* options for diff3: diff3 Options. (line 6)
+* options for patch: patch Options. (line 6)
+* options for sdiff: sdiff Options. (line 6)
+* output formats: Output Formats. (line 6)
+* overlap: diff3 Merging. (line 26)
+* overlapping change, selection of: Which Changes. (line 6)
+* overview of diff and patch: Overview. (line 6)
+* paginating diff output: Pagination. (line 6)
+* patch consumer tips: Tips for Patch Consumers.
+ (line 6)
+* patch input format: patch Input. (line 6)
+* patch invocation: Invoking patch. (line 6)
+* patch messages and questions: patch Messages. (line 6)
+* patch options: patch Options. (line 6)
+* patch producer tips: Tips for Patch Producers.
+ (line 6)
+* patch, common mistakes: Avoiding Common Mistakes.
+ (line 6)
+* PATCH_GET: Revision Control. (line 13)
+* PATCH_VERSION_CONTROL: Backup Names. (line 21)
+* patches, shrinking: Generating Smaller Patches.
+ (line 6)
+* patching directories: patch Directories. (line 6)
+* pebibyte, definition of: cmp Options. (line 103)
+* performance of diff: diff Performance. (line 6)
+* petabyte, definition of: cmp Options. (line 99)
+* POSIX <1>: Standards conformance.
+ (line 6)
+* POSIX: patch and POSIX. (line 6)
+* POSIXLY_CORRECT <1>: Standards conformance.
+ (line 6)
+* POSIXLY_CORRECT: patch and POSIX. (line 6)
+* projects for directories: Shortcomings. (line 6)
+* quoting style: patch Quoting Style. (line 6)
+* QUOTING_STYLE: patch Quoting Style. (line 30)
+* RCS: Revision Control. (line 6)
+* RCS script output format: RCS. (line 6)
+* regular expression matching headings: Specified Headings. (line 6)
+* regular expression suppression: Specified Lines. (line 6)
+* reject file names: Reject Names. (line 6)
+* removing empty files: Creating and Removing.
+ (line 6)
+* reporting bugs: Bugs. (line 6)
+* reversed patches: Reversed Patches. (line 6)
+* revision control: Revision Control. (line 6)
+* sample input for diff: Sample diff Input. (line 6)
+* sample input for diff3: Sample diff3 Input. (line 6)
+* SCCS: Revision Control. (line 6)
+* script output formats: Scripts. (line 6)
+* sdiff invocation: Invoking sdiff. (line 6)
+* sdiff options: sdiff Options. (line 6)
+* sdiff output format: sdiff Option Summary.
+ (line 6)
+* section headings: Sections. (line 6)
+* side by side: Side by Side. (line 6)
+* side by side format: Side by Side Format. (line 6)
+* SIMPLE_BACKUP_SUFFIX: Backup Names. (line 12)
+* special files: Special Files. (line 6)
+* specified headings: Specified Headings. (line 6)
+* summarizing which files differ: Brief. (line 6)
+* System V diff3 compatibility: Saving the Changed File.
+ (line 6)
+* tab and blank difference suppression: White Space. (line 6)
+* tab stop alignment: Tabs. (line 6)
+* tebibyte, definition of: cmp Options. (line 96)
+* terabyte, definition of: cmp Options. (line 92)
+* testing patch: Dry Runs. (line 6)
+* text versus binary diff: Binary. (line 6)
+* time stamp format, context diffs: Detailed Context. (line 12)
+* time stamp format, unified diffs: Detailed Unified. (line 12)
+* time stamps on patched files: Patching Time Stamps.
+ (line 6)
+* traditional patch: patch and Tradition. (line 6)
+* trailing blanks: Trailing Blanks. (line 6)
+* two-column output: Side by Side. (line 6)
+* unified output format: Unified Format. (line 6)
+* unmerged change: Which Changes. (line 6)
+* varying-width characters: Internationalization.
+ (line 6)
+* verbose messages from patch: More or Fewer Messages.
+ (line 6)
+* version control: Revision Control. (line 6)
+* VERSION_CONTROL <1>: Backup Names. (line 21)
+* VERSION_CONTROL: Revision Control. (line 22)
+* white space in patches: Changed White Space. (line 6)
+* yottabyte, definition of: cmp Options. (line 121)
+* zettabyte, definition of: cmp Options. (line 113)
+
+
+
+Tag Table:
+Node: Top1433
+Node: Overview3646
+Node: Comparison7275
+Node: Hunks9978
+Node: White Space11420
+Node: Blank Lines13259
+Node: Specified Lines14251
+Node: Case Folding15377
+Node: Brief15794
+Node: Binary17117
+Node: Output Formats21202
+Node: Sample diff Input21927
+Node: Context23426
+Node: Context Format25003
+Node: Example Context25795
+Node: Less Context27302
+Node: Detailed Context28491
+Node: Unified Format30689
+Node: Example Unified31486
+Node: Detailed Unified32524
+Node: Sections34171
+Node: Specified Headings34930
+Node: C Function Headings36481
+Node: Alternate Names37326
+Node: Side by Side38240
+Node: Side by Side Format40389
+Node: Example Side by Side41290
+Node: Normal42630
+Node: Example Normal43630
+Node: Detailed Normal44366
+Node: Scripts46105
+Node: ed Scripts46510
+Node: Example ed47716
+Node: Detailed ed48166
+Node: Forward ed49925
+Node: RCS50701
+Node: If-then-else51916
+Node: Line Group Formats53594
+Node: Line Formats59470
+Node: Example If-then-else62740
+Node: Detailed If-then-else63819
+Node: Incomplete Lines65702
+Node: Comparing Directories67339
+Node: Adjusting Output71383
+Node: Tabs71890
+Node: Trailing Blanks73504
+Node: Pagination74730
+Node: diff Performance75198
+Node: Comparing Three Files78285
+Node: Sample diff3 Input79163
+Node: Example diff3 Normal80111
+Node: Detailed diff3 Normal81161
+Node: diff3 Hunks82920
+Node: diff3 Merging84216
+Node: Which Changes86460
+Node: Marking Conflicts87860
+Node: Bypassing ed90316
+Node: Merging Incomplete Lines91659
+Node: Saving the Changed File92385
+Node: Interactive Merging93001
+Node: sdiff Option Summary93710
+Node: Merge Commands94913
+Node: Merging with patch96202
+Node: patch Input98574
+Node: Revision Control99256
+Node: Imperfect100426
+Node: Changed White Space101574
+Node: Reversed Patches102371
+Node: Inexact103835
+Node: Dry Runs107393
+Node: Creating and Removing108257
+Node: Patching Time Stamps109306
+Node: Multiple Patches111505
+Node: patch Directories114168
+Node: Backups115793
+Node: Backup Names116858
+Ref: Backup Names-Footnote-1119825
+Node: Reject Names119952
+Node: patch Messages120541
+Node: More or Fewer Messages121601
+Node: patch and Keyboard Input122232
+Node: patch Quoting Style123261
+Node: patch and POSIX124411
+Node: patch and Tradition125251
+Node: Making Patches128707
+Node: Tips for Patch Producers129533
+Node: Tips for Patch Consumers130789
+Node: Avoiding Common Mistakes131426
+Node: Generating Smaller Patches133951
+Node: Invoking cmp135712
+Node: cmp Options137135
+Node: Invoking diff140627
+Node: diff Options142483
+Node: Invoking diff3151185
+Node: diff3 Options151823
+Node: Invoking patch154856
+Node: patch Options156064
+Node: Invoking sdiff161291
+Node: sdiff Options162434
+Node: Standards conformance165405
+Node: Projects167151
+Node: Shortcomings167862
+Node: Internationalization168964
+Node: Changing Structure170130
+Node: Special Files171234
+Node: Unusual File Names172346
+Node: Time Stamp Order172985
+Node: Ignoring Changes173628
+Node: Speedups174398
+Node: Bugs174862
+Node: Copying This Manual175715
+Node: Translations200854
+Node: Index201226
+
+End Tag Table