diff options
| author | christos <christos@NetBSD.org> | 2016-01-13 03:41:44 +0000 |
|---|---|---|
| committer | christos <christos@NetBSD.org> | 2016-01-13 03:41:44 +0000 |
| commit | beeb86fbf335bbe73b0ecee826d3435e55f61cf9 (patch) | |
| tree | 1fd7af3dffec9798776995b398b381a8a4fc71a8 /gnu/dist/diffutils/doc/diff.info | |
| parent | e24eccea776de5d0b3032898b8329fd07f09d4ce (diff) | |
diffutils has moved
Diffstat (limited to 'gnu/dist/diffutils/doc/diff.info')
| -rw-r--r-- | gnu/dist/diffutils/doc/diff.info | 5084 |
1 files changed, 0 insertions, 5084 deletions
diff --git a/gnu/dist/diffutils/doc/diff.info b/gnu/dist/diffutils/doc/diff.info deleted file mode 100644 index d58accf7ea9..00000000000 --- a/gnu/dist/diffutils/doc/diff.info +++ /dev/null @@ -1,5084 +0,0 @@ -This is diff.info, produced by makeinfo version 4.2 from diff.texi. - -This manual is for GNU Diffutils (version 2.8.1, 5 April 2002), 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, 1993, 1994, 1998, 2001, 2002 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.1 or any later version published by the Free Software - Foundation; with no Invariant Sections, with the Front-Cover texts - being "A GNU Manual," and with the Back-Cover Texts as in (a) - below. A copy of the license is included in the section entitled - "GNU Free Documentation License." - - (a) The FSF's Back-Cover Text is: "You have freedom to copy and - modify this GNU Manual, like GNU software. Copies published by - the Free Software Foundation raise funds for GNU development." - -INFO-DIR-SECTION Individual utilities -START-INFO-DIR-ENTRY -* cmp: (diff)Invoking cmp. Compare 2 files byte by byte. -* diff: (diff)Invoking diff. Compare 2 files line by line. -* diff3: (diff)Invoking diff3. Compare 3 files line by line. -* patch: (diff)Invoking patch. Apply a patch to a file. -* sdiff: (diff)Invoking sdiff. Merge 2 files side-by-side. -END-INFO-DIR-ENTRY - -INFO-DIR-SECTION GNU packages -START-INFO-DIR-ENTRY -* Diff: (diff). Comparing and merging files. -END-INFO-DIR-ENTRY - - -File: diff.info, Node: Top, Next: Overview, Up: (dir) - -Comparing and Merging Files -*************************** - -This manual is for GNU Diffutils (version 2.8.1, 5 April 2002), 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, 1993, 1994, 1998, 2001, 2002 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.1 or any later version published by the Free Software - Foundation; with no Invariant Sections, with the Front-Cover texts - being "A GNU Manual," and with the Back-Cover Texts as in (a) - below. A copy of the license is included in the section entitled - "GNU Free Documentation License." - - (a) The FSF's Back-Cover Text is: "You have freedom to copy and - modify this GNU Manual, like GNU software. Copies published by - the Free Software Foundation raise funds for GNU development." - -* 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. -* Index:: Index. - - -File: diff.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 -in "An O(ND) Difference Algorithm and its Variations", Eugene W. Myers, -`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 in "Algorithms -for Approximate String Matching", E. Ukkonen, `Information and Control' -Vol. 64, 1985, pp. 100-118. - - GNU `diff3' was written by Randy Smith. GNU `sdiff' was written by -Thomas Lord. GNU `cmp' was written by Torbjorn Granlund and David -MacKenzie. - - `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: diff.info, Node: Comparison, Next: Output Formats, Prev: Overview, Up: Top - -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 in blank lines. -* Case Folding:: Suppressing differences in alphabetic case. -* Specified Folding:: Suppressing differences that match regular expressions. -* Brief:: Summarizing which files are different. -* Binary:: Comparing binary files or forcing text comparisons. - - -File: diff.info, Node: Hunks, Next: White Space, Up: Comparison - -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' option -(*note diff Performance::). - - -File: diff.info, Node: White Space, Next: Blank Lines, Prev: Hunks, Up: Comparison - -Suppressing Differences in Blank and Tab Spacing -================================================ - - The `-E' and `--ignore-tab-expansion' options ignore 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. `diff' assumes that tab -stops are set every 8 print columns. - - The `-b' and `--ignore-space-change' options are stronger. They -ignore white space at line end, and consider all other sequences of one -or more white space characters to be equivalent. With these options, -`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 `-w' and `--ignore-all-space' options are stronger still. They -ignore difference even if one line has white space where the other line -has none. "White space" characters include tab, newline, vertical tab, -form feed, carriage return, and space; some locales may define -additional characters to be white space. With these options, `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$ - - -File: diff.info, Node: Blank Lines, Next: Case Folding, Prev: White Space, Up: Comparison - -Suppressing Differences in Blank Lines -====================================== - - The `-B' and `--ignore-blank-lines' options ignore insertions or -deletions of blank lines. These options affect only lines that are -completely empty; they do not affect lines that look empty but contain -space or tab characters. With these options, 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 - - -File: diff.info, Node: Case Folding, Next: Specified Folding, Prev: Blank Lines, Up: Comparison - -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: diff.info, Node: Specified Folding, Next: Brief, Prev: Case Folding, Up: Comparison - -Suppressing Lines Matching a Regular Expression -=============================================== - - To ignore insertions and deletions of lines that match a -`grep'-style regular expression, use the `-I REGEXP' or -`--ignore-matching-lines=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: diff.info, Node: Brief, Next: Binary, Prev: Specified Folding, Up: Comparison - -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 `-q' and -`--brief' options select 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. You can use the `-s' 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: diff.info, Node: Binary, Prev: Brief, Up: Comparison - -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 `-a' or -`--text' 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 consider all files to be binary files, -and report only whether they differ (but not how). Use the `-q' or -`--brief' option for this. - - Differing binary files are considered to cause 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 `--a' or `--text' option, or with the `-q' or -`--brief' option, as these options both cause `diff' to treat binary -files like text files. - - 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 `-l' option to show the values of each differing byte -in the two files. With GNU `cmp', you can also use the `-b' 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' options. - - -File: diff.info, Node: Output Formats, Next: Incomplete Lines, Prev: Comparison, Up: Top - -`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. -* Normal:: Showing differences without surrounding text. -* Context:: Showing differences with the surrounding text. -* Side by Side:: Showing differences in two columns. -* Scripts:: Generating scripts for other programs. -* If-then-else:: Merging files with if-then-else. - - -File: diff.info, Node: Sample diff Input, Next: Normal, Up: Output Formats - -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: diff.info, Node: Normal, Next: Context, Prev: Sample diff Input, Up: Output Formats - -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: - -* Detailed Normal:: A detailed description of normal output format. -* Example Normal:: Sample output in the normal format. - - -File: diff.info, Node: Detailed Normal, Next: Example Normal, Up: Normal - -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: diff.info, Node: Example Normal, Prev: Detailed Normal, Up: Normal - -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: diff.info, Node: Context, Next: Side by Side, Prev: Normal, Up: Output Formats - -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: diff.info, Node: Context Format, Next: Unified Format, Up: Context - -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 `-C LINES', -`--context[=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: - -* Detailed Context:: A detailed description of the context output format. -* Example Context:: Sample output in context format. -* Less Context:: Another sample with less context. - - -File: diff.info, Node: Detailed Context, Next: Example Context, Up: Context Format - -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). 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-RANGE **** - FROM-FILE-LINE - FROM-FILE-LINE... - --- TO-FILE-LINE-RANGE ---- - TO-FILE-LINE - TO-FILE-LINE... - - 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: diff.info, Node: Example Context, Next: Less Context, Prev: Detailed Context, Up: Context Format - -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: diff.info, Node: Less Context, Prev: Example Context, Up: Context Format - -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: diff.info, Node: Unified Format, Next: Sections, Prev: Context Format, Up: Context - -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 `-U LINES', `--unified[=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: - -* Detailed Unified:: A detailed description of unified format. -* Example Unified:: Sample output in unified format. - - -File: diff.info, Node: Detailed Unified, Next: Example Unified, Up: Unified Format - -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. - - 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-RANGE TO-FILE-RANGE @@ - LINE-FROM-EITHER-FILE - LINE-FROM-EITHER-FILE... - - 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: diff.info, Node: Example Unified, Prev: Detailed Unified, Up: Unified Format - -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: diff.info, Node: Sections, Next: Alternate Names, Prev: Unified Format, Up: Context - -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: diff.info, Node: Specified Headings, Next: C Function Headings, Up: Sections - -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 `-F REGEXP' or -`--show-function-line=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 `-F' and `--show-function-line' options find the nearest -unchanged line that precedes each hunk of differences and matches the -given regular expression. Then they add 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, they leave the output for that -hunk unchanged. If that line is more than 40 characters long, they -output 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: diff.info, Node: C Function Headings, Prev: Specified Headings, Up: Sections - -Showing C Function Headings -........................... - - To show in which functions differences occur for C and similar -languages, you can use the `-p' or `--show-c-function' 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 `-p' and `--show-c-function' options are equivalent to `-F -'^[[:alpha:]$_]'' if the unified format is specified, otherwise `-c -F -'^[[:alpha:]$_]'' (*note Specified Headings::). GNU `diff' provides -them for the sake of convenience. - - -File: diff.info, Node: Alternate Names, Prev: Sections, Up: Context - -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: diff.info, Node: Side by Side, Next: Scripts, Prev: Context, Up: Output Formats - -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: diff.info, Node: Side by Side Format, Next: Example Side by Side, Up: Side by Side - -Controlling Side by Side Format -------------------------------- - - The `-y' or `--side-by-side' 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 -`-W COLUMNS' or `--width=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: diff.info, Node: Example Side by Side, Prev: Side by Side Format, Up: Side by Side - -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: diff.info, Node: Scripts, Next: If-then-else, Prev: Side by Side, Up: Output Formats - -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: diff.info, Node: ed Scripts, Next: Forward ed, Up: Scripts - -`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 -`-e' or `--ed' 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: - -* Detailed ed:: A detailed description of `ed' format. -* Example ed:: A sample `ed' script. - - -File: diff.info, Node: Detailed ed, Next: Example ed, Up: ed Scripts - -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: diff.info, Node: Example ed, Prev: Detailed ed, Up: ed Scripts - -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: diff.info, Node: Forward ed, Next: RCS, Prev: ed Scripts, Up: Scripts - -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: diff.info, Node: RCS, Prev: Forward ed, Up: Scripts - -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 `-n' or -`--rcs' 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: diff.info, Node: If-then-else, Prev: Scripts, Up: Output Formats - -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. -* Detailed If-then-else:: A detailed description of if-then-else format. -* Example If-then-else:: Sample if-then-else format output. - - -File: diff.info, Node: Line Group Formats, Next: Line Formats, Up: If-then-else - -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 the new file) - is 0, to `1 line' if N is 1, and to `%dN lines' otherwise. - - -File: diff.info, Node: Line Formats, Next: Detailed If-then-else, Prev: Line Group Formats, Up: If-then-else - -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: diff.info, Node: Detailed If-then-else, Next: Example If-then-else, Prev: Line Formats, Up: If-then-else - -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: diff.info, Node: Example If-then-else, Prev: Detailed If-then-else, Up: If-then-else - -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: diff.info, Node: Incomplete Lines, Next: Comparing Directories, Prev: Output Formats, Up: Top - -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: diff.info, Node: Comparing Directories, Next: Adjusting Output, Prev: Incomplete Lines, Up: Top - -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 `-s' or -`--report-identical-files' 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 `-N' or `--new-file' 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 `-x -PATTERN' or `--exclude=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 `-X FILE' or -`--exclude-from=FILE' option. - - 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 `-S FILE' or `--starting-file=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 `-x PATTERN', `--exclude=PATTERN', `-X FILE', or -`--exclude-from=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: diff.info, Node: Adjusting Output, Next: diff Performance, Prev: Comparing Directories, Up: Top - -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. -* Pagination:: Page numbering and time-stamping `diff' output. - - -File: diff.info, Node: Tabs, Next: Pagination, Up: Adjusting Output - -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 -`-t' or `--expand-tabs' option. `diff' assumes that tab stops are set -every 8 print columns. 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). - - 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: diff.info, Node: Pagination, Prev: Tabs, Up: Adjusting Output - -Paginating `diff' Output -======================== - - It can be convenient to have long output page-numbered and -time-stamped. The `-l' and `--paginate' options do 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: diff.info, Node: diff Performance, Next: Comparing Three Files, Prev: Adjusting Output, Up: Top - -`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 `-d' or `--minimal' 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: diff.info, Node: Comparing Three Files, Next: diff3 Merging, Prev: diff Performance, Up: Top - -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. -* Detailed diff3 Normal:: A detailed description of normal output format. -* diff3 Hunks:: The format of normal output format. -* Example diff3 Normal:: Sample output in the normal format. - - -File: diff.info, Node: Sample diff3 Input, Next: Detailed diff3 Normal, Up: Comparing Three Files - -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: diff.info, Node: Detailed diff3 Normal, Next: diff3 Hunks, Prev: Sample diff3 Input, Up: Comparing Three Files - -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 `-T' or `--initial-tab' -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 the range is a singleton. 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: diff.info, Node: diff3 Hunks, Next: Example diff3 Normal, Prev: Detailed diff3 Normal, Up: Comparing Three Files - -`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: diff.info, Node: Example diff3 Normal, Prev: diff3 Hunks, Up: Comparing Three Files - -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: diff.info, Node: diff3 Merging, Next: Interactive Merging, Prev: Comparing Three Files, Up: Top - -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: diff.info, Node: Which Changes, Next: Marking Conflicts, Up: diff3 Merging - -Selecting Which Changes to Incorporate -====================================== - - You can select all unmerged changes from OLDER to YOURS for merging -into MINE with the `-e' or `--ed' option. You can select only the -nonoverlapping unmerged changes with `-3' or `--easy-only', and you can -select only the overlapping changes with `-x' or `--overlap-only'. - - 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 `-A' or `--show-all' 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: diff.info, Node: Marking Conflicts, Next: Bypassing ed, Prev: Which Changes, Up: diff3 Merging - -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 `-A' or `--show-all' 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 `-E' or `--show-overlap' option outputs less information than -the `-A' or `--show-all' 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 `-L LABEL' or `--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 -L X -L Y -L 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: diff.info, Node: Bypassing ed, Next: Merging Incomplete Lines, Prev: Marking Conflicts, Up: diff3 Merging - -Generating the Merged Output Directly -===================================== - - With the `-m' or `--merge' 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' (`--show-all') 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: diff.info, Node: Merging Incomplete Lines, Next: Saving the Changed File, Prev: Bypassing ed, Up: diff3 Merging - -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: diff.info, Node: Saving the Changed File, Prev: Merging Incomplete Lines, Up: diff3 Merging - -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: diff.info, Node: Interactive Merging, Next: Merging with patch, Prev: diff3 Merging, Up: Top - -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 `-o -FILE' or `--output=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: diff.info, Node: sdiff Option Summary, Next: Merge Commands, Up: Interactive Merging - -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 - - --ignore-blank-lines --ignore-case - --ignore-matching-lines=REGEXP --ignore-space-change - --ignore-tab-expansion - --left-column --minimal --speed-large-files - --strip-trailing-cr --suppress-common-lines --expand-tabs - --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 `-y' -or `--side-by-side' option (*note Side by Side::). - - -File: diff.info, Node: Merge Commands, Prev: sdiff Option Summary, Up: Interactive Merging - -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' - Edit a copy of the left version, then copy the result to the - output. - -`er' - Edit a copy of the right version, then copy the result to the - output. - -`l' - Copy the left version to the output. - -`q' - Quit. - -`r' - 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: diff.info, Node: Merging with patch, Next: Making Patches, Prev: Interactive Merging, Up: Top - -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: diff.info, Node: patch Input, Next: Revision Control, Up: Merging with patch - -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: diff.info, Node: Revision Control, Next: Imperfect, Prev: patch Input, Up: Merging with patch - -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 `-g NUM' or `--get=NUM' 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: diff.info, Node: Imperfect, Next: Creating and Removing, Prev: Revision Control, Up: Merging with patch - -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: diff.info, Node: Changed White Space, Next: Reversed Patches, Up: Imperfect - -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: diff.info, Node: Reversed Patches, Next: Inexact, Prev: Changed White Space, Up: Imperfect - -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 `-R' or `--reverse' 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: diff.info, Node: Inexact, Next: Dry Runs, Prev: Reversed Patches, Up: Imperfect - -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 `-F LINES' or `--fuzz=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: diff.info, Node: Dry Runs, Prev: Inexact, Up: Imperfect - -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: diff.info, Node: Creating and Removing, Next: Patching Time Stamps, Prev: Imperfect, Up: Merging with patch - -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 `-N' or -`--new-file' 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 `-E' or `--remove-empty-files' 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: diff.info, Node: Patching Time Stamps, Next: Multiple Patches, Prev: Creating and Removing, Up: Merging with patch - -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 `-Z' or `--set-utc' 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 `-T' or `--set-time' 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 `-Z' or -`--set-utc'. - - `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 `-f' or `--force' 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: diff.info, Node: Multiple Patches, Next: patch Directories, Prev: Patching Time Stamps, Up: Merging with patch - -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: diff.info, Node: patch Directories, Next: Backups, Prev: Multiple Patches, Up: Merging with patch - -Applying Patches in Other Directories -===================================== - - The `-d DIRECTORY' or `--directory=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 `-pNUMBER' or -`--strip=NUMBER' 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: diff.info, Node: Backups, Next: Backup Names, Prev: patch Directories, Up: Merging with patch - -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 `-b' or `--backup' 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: diff.info, Node: Backup Names, Next: Reject Names, Prev: Backups, Up: Merging with patch - -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 `-B PREFIX' or -`--prefix=PREFIX' option makes backup files by prepending PREFIX to -them. The `-Y PREFIX' or `--basename-prefix=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: diff.info, Node: Reject Names, Next: patch Messages, Prev: Backup Names, Up: Merging with patch - -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 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: diff.info, Node: patch Messages, Next: patch and POSIX, Prev: Reject Names, Up: Merging with patch - -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: diff.info, Node: More or Fewer Messages, Next: patch and Keyboard Input, Up: patch Messages - -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: diff.info, Node: patch and Keyboard Input, Next: patch Quoting Style, Prev: More or Fewer Messages, Up: patch Messages - -Inhibiting Keyboard Input -------------------------- - - There are two ways you can prevent `patch' from asking you any -questions. The `-f' or `--force' 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 `-t' or `--batch' 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: diff.info, Node: patch Quoting Style, Prev: patch and Keyboard Input, Up: patch Messages - -`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: diff.info, Node: patch and POSIX, Next: patch and Tradition, Prev: patch Messages, Up: Merging with patch - -`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: diff.info, Node: patch and Tradition, Prev: patch and POSIX, Up: Merging with patch - -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 `-b' or `--backup' 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: diff.info, Node: Making Patches, Next: Invoking cmp, Prev: Merging with patch, Up: Top - -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: diff.info, Node: Tips for Patch Producers, Next: Tips for Patch Consumers, Up: Making Patches - -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: diff.info, Node: Tips for Patch Consumers, Next: Avoiding Common Mistakes, Prev: Tips for Patch Producers, Up: Making Patches - -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: diff.info, Node: Avoiding Common Mistakes, Next: Generating Smaller Patches, Prev: Tips for Patch Consumers, Up: Making Patches - -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: diff.info, Node: Generating Smaller Patches, Prev: Avoiding Common Mistakes, Up: Making Patches - -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: diff.info, Node: Invoking cmp, Next: Invoking diff, Prev: Making Patches, Up: Top - -Invoking `cmp' -************** - - The `cmp' command compares two files, and if they differ, tells the -first byte and line number where they differ. 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. - - 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: diff.info, Node: cmp Options, Up: Invoking cmp - -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' - Print the (decimal) byte numbers and (octal) values of all - differing bytes. - -`-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: diff.info, Node: Invoking diff, Next: Invoking diff3, Prev: Invoking cmp, Up: Top - -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 `-r' or -`--recursive' 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. - -* Menu: - -* diff Options:: Summary of options to `diff'. - - -File: diff.info, Node: diff Options, Up: Invoking diff - -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. - - On older systems, `diff' supports an obsolete option `-LINES' that - has effect when combined with `-c' or `-p'. POSIX 1003.1-2001 - (*note Standards conformance::) does not allow this; use `-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 Folding::. - -`--ignore-file-name-case' - Ignore case when comparing file names during recursive comparison. - *Note Comparing Directories::. - -`-l' -`--paginate' - Pass the output through `pr' to paginate it. *Note Pagination::. - -`--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::. - -`--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::. - - -File: diff.info, Node: Invoking diff3, Next: Invoking patch, Prev: Invoking diff, Up: Top - -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: diff.info, Node: diff3 Options, Up: Invoking diff3 - -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::. - -`-L LABEL' -`--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 -L X -L Y -L 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::. - -`-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: diff.info, Node: Invoking patch, Next: Invoking sdiff, Prev: Invoking diff3, Up: Top - -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: diff.info, Node: patch Options, Up: Invoking patch - -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: diff.info, Node: Invoking sdiff, Next: Standards conformance, Prev: Invoking patch, Up: Top - -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 `-o' (or `--output') produces a side-by-side -difference. This usage is obsolete; use the `-y' or `--side-by-side' -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: diff.info, Node: sdiff Options, Up: Invoking sdiff - -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 Folding::. - -`-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::. - -`-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'. - - -File: diff.info, Node: Standards conformance, Next: Projects, Prev: Invoking sdiff, Up: Top - -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: diff.info, Node: Projects, Next: Copying This Manual, Prev: Standards conformance, Up: Top - -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 <gnu@gnu.org> -to coordinate with other volunteers. - -* Menu: - -* Shortcomings:: Suggested projects for improvements. -* Bugs:: Reporting bugs. - - -File: diff.info, Node: Shortcomings, Next: Bugs, Up: Projects - -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: diff.info, Node: Internationalization, Next: Changing Structure, Up: Shortcomings - -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 some 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: diff.info, Node: Changing Structure, Next: Special Files, Prev: Internationalization, Up: Shortcomings - -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: diff.info, Node: Special Files, Next: Unusual File Names, Prev: Changing Structure, Up: Shortcomings - -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 like regular -files; it 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: diff.info, Node: Unusual File Names, Next: Time Stamp Order, Prev: Special Files, Up: Shortcomings - -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: diff.info, Node: Time Stamp Order, Next: Ignoring Changes, Prev: Unusual File Names, Up: Shortcomings - -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: diff.info, Node: Ignoring Changes, Next: Speedups, Prev: Time Stamp Order, Up: Shortcomings - -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: diff.info, Node: Speedups, Prev: Ignoring Changes, Up: Shortcomings - -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: diff.info, Node: Bugs, Prev: Shortcomings, Up: Projects - -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: diff.info, Node: Copying This Manual, Next: Index, Prev: Projects, Up: Top - -Copying This Manual -******************* - -* Menu: - -* GNU Free Documentation License:: License for copying this manual. - - -File: diff.info, Node: GNU Free Documentation License, Up: Copying This Manual - -GNU Free Documentation License -============================== - - Version 1.1, March 2000 - Copyright (C) 2000 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - - 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 - written 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 that contains a - notice placed by the copyright holder saying it can be distributed - under the terms of this License. The "Document", below, refers to - any such manual or work. Any member of the public is a licensee, - and is addressed as "you". - - 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. - (For example, 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. - - 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 "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, whose contents can be viewed and edited directly - and 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 has been designed - to thwart or discourage subsequent modification by readers is not - Transparent. 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 designed for human modification. - Opaque formats include PostScript, PDF, 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 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. - - 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 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 publicly-accessible - computer-network location containing a complete Transparent copy - of the Document, free of added material, which the general - network-using public has access to download anonymously at no - charge using public-standard network protocols. 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 less than five). - - 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", and 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. In any section entitled "Acknowledgments" or "Dedications", - preserve the section's title, and preserve in the section all - the substance and tone of each of the contributor - acknowledgments 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 as "Endorsements" or to - conflict in title with any Invariant Section. - - 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. - - 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 - "Acknowledgments", 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, does not as a whole count as a - Modified Version of the Document, provided no compilation - copyright is claimed for the compilation. Such a compilation is - called an "aggregate", and this License does not apply to the - other self-contained works thus compiled with the Document, on - account of their being thus compiled, if they 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 - quarter of the entire aggregate, the Document's Cover Texts may be - placed on covers that surround only the Document within the - aggregate. Otherwise they must appear on covers around 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 provided that you also include the - original English version of this License. In case of a - disagreement between the translation and the original English - version of this License, the original English version will prevail. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided for under this License. Any other - attempt to copy, modify, sublicense or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 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. - -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.1 - or any later version published by the Free Software Foundation; - with the Invariant Sections being LIST THEIR TITLES, with the - Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have no Invariant Sections, write "with no Invariant Sections" -instead of saying which ones are invariant. If you have no Front-Cover -Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being -LIST"; likewise for Back-Cover Texts. - - 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: diff.info, Node: Index, Prev: Copying This Manual, Up: Top - -Index -***** - -* Menu: - -* ! output format: Context. -* +- output format: Unified Format. -* < output format: Normal. -* <<<<<<< for marking conflicts: Marking Conflicts. -* _POSIX2_VERSION: Standards conformance. -* aligning tab stops: Tabs. -* alternate file names: Alternate Names. -* backup file names: Backup Names. -* backup file strategy: Backups. -* binary file diff: Binary. -* blank and tab difference suppression: White Space. -* blank line difference suppression: Blank Lines. -* brief difference reports: Brief. -* bug reports: Bugs. -* C function headings: C Function Headings. -* C if-then-else output format: If-then-else. -* case difference suppression: Case Folding. -* ClearCase: Revision Control. -* cmp invocation: Invoking cmp. -* cmp options: cmp Options. -* columnar output: Side by Side. -* common mistakes with patches: Avoiding Common Mistakes. -* comparing three files: Comparing Three Files. -* conflict: diff3 Merging. -* conflict marking: Marking Conflicts. -* context output format: Context. -* creating files: Creating and Removing. -* diagnostics from patch: patch Messages. -* diff invocation: Invoking diff. -* diff merging: Interactive Merging. -* diff options: diff Options. -* diff sample input: Sample diff Input. -* diff3 hunks: diff3 Hunks. -* diff3 invocation: Invoking diff3. -* diff3 options: diff3 Options. -* diff3 sample input: Sample diff3 Input. -* directories and patch: patch Directories. -* directory structure changes: Changing Structure. -* dry runs for patch: Dry Runs. -* ed script output format: ed Scripts. -* EDITOR: Merge Commands. -* empty files, removing: Creating and Removing. -* exabyte, definition of: cmp Options. -* exbibyte, definition of: cmp Options. -* FDL, GNU Free Documentation License: GNU Free Documentation License. -* file name alternates: Alternate Names. -* file names with unusual characters: Unusual File Names. -* format of diff output: Output Formats. -* format of diff3 output: Comparing Three Files. -* formats for if-then-else line groups: Line Group Formats. -* forward ed script output format: Forward ed. -* full lines: Incomplete Lines. -* function headings, C: C Function Headings. -* fuzz factor when patching: Inexact. -* gibibyte, definition of: cmp Options. -* gigabyte, definition of: cmp Options. -* headings: Sections. -* hunks: Hunks. -* hunks for diff3: diff3 Hunks. -* if-then-else output format: If-then-else. -* ifdef output format: If-then-else. -* imperfect patch application: Imperfect. -* incomplete line merging: Merging Incomplete Lines. -* incomplete lines: Incomplete Lines. -* inexact patches: Inexact. -* inhibit messages from patch: More or Fewer Messages. -* interactive merging: Interactive Merging. -* introduction: Comparison. -* intuiting file names from patches: Multiple Patches. -* invoking cmp: Invoking cmp. -* invoking diff: Invoking diff. -* invoking diff3: Invoking diff3. -* invoking patch: Invoking patch. -* invoking sdiff: Invoking sdiff. -* keyboard input to patch: patch and Keyboard Input. -* kibibyte, definition of: cmp Options. -* kilobyte, definition of: cmp Options. -* LC_COLLATE: Comparing Directories. -* LC_NUMERIC: Line Group Formats. -* LC_TIME: Detailed Context. -* line formats: Line Formats. -* line group formats: Line Group Formats. -* mebibyte, definition of: cmp Options. -* megabyte, definition of: cmp Options. -* merge commands: Merge Commands. -* merged diff3 format: Bypassing ed. -* merged output format: If-then-else. -* merging from a common ancestor: diff3 Merging. -* merging interactively: Merge Commands. -* messages from patch: patch Messages. -* multibyte characters: Internationalization. -* multiple patches: Multiple Patches. -* newline treatment by diff: Incomplete Lines. -* normal output format: Normal. -* options for cmp: cmp Options. -* options for diff: diff Options. -* options for diff3: diff3 Options. -* options for patch: patch Options. -* options for sdiff: sdiff Options. -* output formats: Output Formats. -* overlap: diff3 Merging. -* overlapping change, selection of: Which Changes. -* overview of diff and patch: Overview. -* paginating diff output: Pagination. -* patch consumer tips: Tips for Patch Consumers. -* patch input format: patch Input. -* patch invocation: Invoking patch. -* patch messages and questions: patch Messages. -* patch options: patch Options. -* patch producer tips: Tips for Patch Producers. -* patch, common mistakes: Avoiding Common Mistakes. -* PATCH_GET: Revision Control. -* PATCH_VERSION_CONTROL: Backup Names. -* patches, shrinking: Generating Smaller Patches. -* patching directories: patch Directories. -* pebibyte, definition of: cmp Options. -* performance of diff: diff Performance. -* petabyte, definition of: cmp Options. -* POSIX <1>: Standards conformance. -* POSIX: patch and POSIX. -* POSIXLY_CORRECT <1>: patch and POSIX. -* POSIXLY_CORRECT: Standards conformance. -* projects for directories: Shortcomings. -* quoting style: patch Quoting Style. -* QUOTING_STYLE: patch Quoting Style. -* RCS: Revision Control. -* RCS script output format: RCS. -* regular expression matching headings: Specified Headings. -* regular expression suppression: Specified Folding. -* reject file names: Reject Names. -* removing empty files: Creating and Removing. -* reporting bugs: Bugs. -* reversed patches: Reversed Patches. -* revision control: Revision Control. -* sample input for diff: Sample diff Input. -* sample input for diff3: Sample diff3 Input. -* SCCS: Revision Control. -* script output formats: Scripts. -* sdiff invocation: Invoking sdiff. -* sdiff options: sdiff Options. -* sdiff output format: sdiff Option Summary. -* section headings: Sections. -* side by side: Side by Side. -* side by side format: Side by Side Format. -* SIMPLE_BACKUP_SUFFIX: Backup Names. -* special files: Special Files. -* specified headings: Specified Headings. -* summarizing which files differ: Brief. -* System V diff3 compatibility: Saving the Changed File. -* tab and blank difference suppression: White Space. -* tab stop alignment: Tabs. -* tebibyte, definition of: cmp Options. -* terabyte, definition of: cmp Options. -* testing patch: Dry Runs. -* text versus binary diff: Binary. -* time stamp format, context diffs: Detailed Context. -* time stamp format, unified diffs: Detailed Unified. -* time stamps on patched files: Patching Time Stamps. -* traditional patch: patch and Tradition. -* two-column output: Side by Side. -* unified output format: Unified Format. -* unmerged change: Which Changes. -* varying-width characters: Internationalization. -* verbose messages from patch: More or Fewer Messages. -* version control: Revision Control. -* VERSION_CONTROL <1>: Backup Names. -* VERSION_CONTROL: Revision Control. -* white space in patches: Changed White Space. -* yottabyte, definition of: cmp Options. -* zettabyte, definition of: cmp Options. - - - -Tag Table: -Node: Top1653 -Node: Overview4045 -Node: Comparison7202 -Node: Hunks9888 -Node: White Space11313 -Node: Blank Lines12807 -Node: Case Folding13562 -Node: Specified Folding13977 -Node: Brief15052 -Node: Binary16295 -Node: Output Formats20358 -Node: Sample diff Input21076 -Node: Normal22569 -Node: Detailed Normal23564 -Node: Example Normal25289 -Node: Context26011 -Node: Context Format27567 -Node: Detailed Context28345 -Node: Example Context30234 -Node: Less Context31748 -Node: Unified Format32894 -Node: Detailed Unified33676 -Node: Example Unified34787 -Node: Sections35807 -Node: Specified Headings36552 -Node: C Function Headings38083 -Node: Alternate Names38908 -Node: Side by Side39808 -Node: Side by Side Format41947 -Node: Example Side by Side42836 -Node: Scripts44162 -Node: ed Scripts44563 -Node: Detailed ed45756 -Node: Example ed47497 -Node: Forward ed47934 -Node: RCS48696 -Node: If-then-else49904 -Node: Line Group Formats51572 -Node: Line Formats57437 -Node: Detailed If-then-else60693 -Node: Example If-then-else62583 -Node: Incomplete Lines63632 -Node: Comparing Directories65263 -Node: Adjusting Output69220 -Node: Tabs69645 -Node: Pagination71177 -Node: diff Performance71626 -Node: Comparing Three Files74708 -Node: Sample diff3 Input75580 -Node: Detailed diff3 Normal76528 -Node: diff3 Hunks78307 -Node: Example diff3 Normal79593 -Node: diff3 Merging80616 -Node: Which Changes82854 -Node: Marking Conflicts84258 -Node: Bypassing ed86714 -Node: Merging Incomplete Lines88068 -Node: Saving the Changed File88784 -Node: Interactive Merging89390 -Node: sdiff Option Summary90094 -Node: Merge Commands91242 -Node: Merging with patch92503 -Node: patch Input94867 -Node: Revision Control95537 -Node: Imperfect96689 -Node: Changed White Space97825 -Node: Reversed Patches98606 -Node: Inexact100056 -Node: Dry Runs103599 -Node: Creating and Removing104447 -Node: Patching Time Stamps105486 -Node: Multiple Patches107677 -Node: patch Directories110328 -Node: Backups111942 -Node: Backup Names112996 -Ref: Backup Names-Footnote-1115955 -Node: Reject Names116082 -Node: patch Messages116660 -Node: More or Fewer Messages117706 -Node: patch and Keyboard Input118319 -Node: patch Quoting Style119332 -Node: patch and POSIX120464 -Node: patch and Tradition121290 -Node: Making Patches124734 -Node: Tips for Patch Producers125552 -Node: Tips for Patch Consumers126796 -Node: Avoiding Common Mistakes127421 -Node: Generating Smaller Patches129934 -Node: Invoking cmp131683 -Node: cmp Options132532 -Node: Invoking diff135896 -Node: diff Options137599 -Node: Invoking diff3145722 -Node: diff3 Options146352 -Node: Invoking patch149255 -Node: patch Options150455 -Node: Invoking sdiff155669 -Node: sdiff Options156808 -Node: Standards conformance159561 -Node: Projects161299 -Node: Shortcomings162002 -Node: Internationalization163092 -Node: Changing Structure164247 -Node: Special Files165336 -Node: Unusual File Names166282 -Node: Time Stamp Order166904 -Node: Ignoring Changes167531 -Node: Speedups168285 -Node: Bugs168733 -Node: Copying This Manual169574 -Node: GNU Free Documentation License169782 -Node: Index189646 - -End Tag Table |
