| 1 | This is diff.info, produced by makeinfo version 4.2 from diff.texi. | 
|---|
| 2 |  | 
|---|
| 3 | This manual is for GNU Diffutils (version 2.8.1, 5 April 2002), and | 
|---|
| 4 | documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for | 
|---|
| 5 | showing the differences between files and the GNU `patch' command for | 
|---|
| 6 | using their output to update files. | 
|---|
| 7 |  | 
|---|
| 8 | Copyright (C) 1992, 1993, 1994, 1998, 2001, 2002 Free Software | 
|---|
| 9 | Foundation, Inc. | 
|---|
| 10 |  | 
|---|
| 11 | Permission is granted to copy, distribute and/or modify this | 
|---|
| 12 | document under the terms of the GNU Free Documentation License, | 
|---|
| 13 | Version 1.1 or any later version published by the Free Software | 
|---|
| 14 | Foundation; with no Invariant Sections, with the Front-Cover texts | 
|---|
| 15 | being "A GNU Manual," and with the Back-Cover Texts as in (a) | 
|---|
| 16 | below.  A copy of the license is included in the section entitled | 
|---|
| 17 | "GNU Free Documentation License." | 
|---|
| 18 |  | 
|---|
| 19 | (a) The FSF's Back-Cover Text is: "You have freedom to copy and | 
|---|
| 20 | modify this GNU Manual, like GNU software.  Copies published by | 
|---|
| 21 | the Free Software Foundation raise funds for GNU development." | 
|---|
| 22 |  | 
|---|
| 23 | INFO-DIR-SECTION Individual utilities | 
|---|
| 24 | START-INFO-DIR-ENTRY | 
|---|
| 25 | * cmp: (diff)Invoking cmp.                      Compare 2 files byte by byte. | 
|---|
| 26 | * diff: (diff)Invoking diff.                    Compare 2 files line by line. | 
|---|
| 27 | * diff3: (diff)Invoking diff3.                  Compare 3 files line by line. | 
|---|
| 28 | * patch: (diff)Invoking patch.                  Apply a patch to a file. | 
|---|
| 29 | * sdiff: (diff)Invoking sdiff.                  Merge 2 files side-by-side. | 
|---|
| 30 | END-INFO-DIR-ENTRY | 
|---|
| 31 |  | 
|---|
| 32 | INFO-DIR-SECTION GNU packages | 
|---|
| 33 | START-INFO-DIR-ENTRY | 
|---|
| 34 | * Diff: (diff).                 Comparing and merging files. | 
|---|
| 35 | END-INFO-DIR-ENTRY | 
|---|
| 36 |  | 
|---|
| 37 |  | 
|---|
| 38 | File: diff.info,  Node: Top,  Next: Overview,  Up: (dir) | 
|---|
| 39 |  | 
|---|
| 40 | Comparing and Merging Files | 
|---|
| 41 | *************************** | 
|---|
| 42 |  | 
|---|
| 43 | This manual is for GNU Diffutils (version 2.8.1, 5 April 2002), and | 
|---|
| 44 | documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for | 
|---|
| 45 | showing the differences between files and the GNU `patch' command for | 
|---|
| 46 | using their output to update files. | 
|---|
| 47 |  | 
|---|
| 48 | Copyright (C) 1992, 1993, 1994, 1998, 2001, 2002 Free Software | 
|---|
| 49 | Foundation, Inc. | 
|---|
| 50 |  | 
|---|
| 51 | Permission is granted to copy, distribute and/or modify this | 
|---|
| 52 | document under the terms of the GNU Free Documentation License, | 
|---|
| 53 | Version 1.1 or any later version published by the Free Software | 
|---|
| 54 | Foundation; with no Invariant Sections, with the Front-Cover texts | 
|---|
| 55 | being "A GNU Manual," and with the Back-Cover Texts as in (a) | 
|---|
| 56 | below.  A copy of the license is included in the section entitled | 
|---|
| 57 | "GNU Free Documentation License." | 
|---|
| 58 |  | 
|---|
| 59 | (a) The FSF's Back-Cover Text is: "You have freedom to copy and | 
|---|
| 60 | modify this GNU Manual, like GNU software.  Copies published by | 
|---|
| 61 | the Free Software Foundation raise funds for GNU development." | 
|---|
| 62 |  | 
|---|
| 63 | * Menu: | 
|---|
| 64 |  | 
|---|
| 65 | * Overview::              Preliminary information. | 
|---|
| 66 | * Comparison::            What file comparison means. | 
|---|
| 67 |  | 
|---|
| 68 | * Output Formats::        Formats for two-way difference reports. | 
|---|
| 69 | * Incomplete Lines::      Lines that lack trailing newlines. | 
|---|
| 70 | * Comparing Directories:: Comparing files and directories. | 
|---|
| 71 | * Adjusting Output::      Making `diff' output prettier. | 
|---|
| 72 | * diff Performance::      Making `diff' smarter or faster. | 
|---|
| 73 |  | 
|---|
| 74 | * Comparing Three Files:: Formats for three-way difference reports. | 
|---|
| 75 | * diff3 Merging::         Merging from a common ancestor. | 
|---|
| 76 |  | 
|---|
| 77 | * Interactive Merging::   Interactive merging with `sdiff'. | 
|---|
| 78 |  | 
|---|
| 79 | * Merging with patch::    Using `patch' to change old files into new ones. | 
|---|
| 80 | * Making Patches::        Tips for making and using patch distributions. | 
|---|
| 81 |  | 
|---|
| 82 | * Invoking cmp::          Compare two files byte by byte. | 
|---|
| 83 | * Invoking diff::         Compare two files line by line. | 
|---|
| 84 | * Invoking diff3::        Compare three files line by line. | 
|---|
| 85 | * Invoking patch::        Apply a diff file to an original. | 
|---|
| 86 | * Invoking sdiff::        Side-by-side merge of file differences. | 
|---|
| 87 |  | 
|---|
| 88 | * Standards conformance:: Conformance to the POSIX standard. | 
|---|
| 89 | * Projects::              If you've found a bug or other shortcoming. | 
|---|
| 90 |  | 
|---|
| 91 | * Copying This Manual::   How to make copies of this manual. | 
|---|
| 92 | * Index::                 Index. | 
|---|
| 93 |  | 
|---|
| 94 |  | 
|---|
| 95 | File: diff.info,  Node: Overview,  Next: Comparison,  Prev: Top,  Up: Top | 
|---|
| 96 |  | 
|---|
| 97 | Overview | 
|---|
| 98 | ******** | 
|---|
| 99 |  | 
|---|
| 100 | Computer users often find occasion to ask how two files differ. | 
|---|
| 101 | Perhaps one file is a newer version of the other file.  Or maybe the | 
|---|
| 102 | two files started out as identical copies but were changed by different | 
|---|
| 103 | people. | 
|---|
| 104 |  | 
|---|
| 105 | You can use the `diff' command to show differences between two | 
|---|
| 106 | files, or each corresponding file in two directories.  `diff' outputs | 
|---|
| 107 | differences between files line by line in any of several formats, | 
|---|
| 108 | selectable by command line options.  This set of differences is often | 
|---|
| 109 | called a "diff" or "patch".  For files that are identical, `diff' | 
|---|
| 110 | normally produces no output; for binary (non-text) files, `diff' | 
|---|
| 111 | normally reports only that they are different. | 
|---|
| 112 |  | 
|---|
| 113 | You can use the `cmp' command to show the byte and line numbers | 
|---|
| 114 | where two files differ.  `cmp' can also show all the bytes that differ | 
|---|
| 115 | between the two files, side by side.  A way to compare two files | 
|---|
| 116 | character by character is the Emacs command `M-x compare-windows'. | 
|---|
| 117 | *Note Other Window: (emacs)Other Window, for more information on that | 
|---|
| 118 | command. | 
|---|
| 119 |  | 
|---|
| 120 | You can use the `diff3' command to show differences among three | 
|---|
| 121 | files.  When two people have made independent changes to a common | 
|---|
| 122 | original, `diff3' can report the differences between the original and | 
|---|
| 123 | the two changed versions, and can produce a merged file that contains | 
|---|
| 124 | both persons' changes together with warnings about conflicts. | 
|---|
| 125 |  | 
|---|
| 126 | You can use the `sdiff' command to merge two files interactively. | 
|---|
| 127 |  | 
|---|
| 128 | You can use the set of differences produced by `diff' to distribute | 
|---|
| 129 | updates to text files (such as program source code) to other people. | 
|---|
| 130 | This method is especially useful when the differences are small compared | 
|---|
| 131 | to the complete files.  Given `diff' output, you can use the `patch' | 
|---|
| 132 | program to update, or "patch", a copy of the file.  If you think of | 
|---|
| 133 | `diff' as subtracting one file from another to produce their | 
|---|
| 134 | difference, you can think of `patch' as adding the difference to one | 
|---|
| 135 | file to reproduce the other. | 
|---|
| 136 |  | 
|---|
| 137 | This manual first concentrates on making diffs, and later shows how | 
|---|
| 138 | to use diffs to update files. | 
|---|
| 139 |  | 
|---|
| 140 | GNU `diff' was written by Paul Eggert, Mike Haertel, David Hayes, | 
|---|
| 141 | Richard Stallman, and Len Tower.  Wayne Davison designed and | 
|---|
| 142 | implemented the unified output format.  The basic algorithm is described | 
|---|
| 143 | in "An O(ND) Difference Algorithm and its Variations", Eugene W. Myers, | 
|---|
| 144 | `Algorithmica' Vol. 1 No. 2, 1986, pp. 251-266; and in "A File | 
|---|
| 145 | Comparison Program", Webb Miller and Eugene W. Myers, | 
|---|
| 146 | `Software--Practice and Experience' Vol. 15 No. 11, 1985, pp. 1025-1040. | 
|---|
| 147 | The algorithm was independently discovered as described in "Algorithms | 
|---|
| 148 | for Approximate String Matching", E. Ukkonen, `Information and Control' | 
|---|
| 149 | Vol. 64, 1985, pp. 100-118. | 
|---|
| 150 |  | 
|---|
| 151 | GNU `diff3' was written by Randy Smith.  GNU `sdiff' was written by | 
|---|
| 152 | Thomas Lord.  GNU `cmp' was written by Torbjorn Granlund and David | 
|---|
| 153 | MacKenzie. | 
|---|
| 154 |  | 
|---|
| 155 | `patch' was written mainly by Larry Wall and Paul Eggert; several | 
|---|
| 156 | GNU enhancements were contributed by Wayne Davison and David MacKenzie. | 
|---|
| 157 | Parts of this manual are adapted from a manual page written by Larry | 
|---|
| 158 | Wall, with his permission. | 
|---|
| 159 |  | 
|---|
| 160 |  | 
|---|
| 161 | File: diff.info,  Node: Comparison,  Next: Output Formats,  Prev: Overview,  Up: Top | 
|---|
| 162 |  | 
|---|
| 163 | What Comparison Means | 
|---|
| 164 | ********************* | 
|---|
| 165 |  | 
|---|
| 166 | There are several ways to think about the differences between two | 
|---|
| 167 | files.  One way to think of the differences is as a series of lines | 
|---|
| 168 | that were deleted from, inserted in, or changed in one file to produce | 
|---|
| 169 | the other file.  `diff' compares two files line by line, finds groups of | 
|---|
| 170 | lines that differ, and reports each group of differing lines.  It can | 
|---|
| 171 | report the differing lines in several formats, which have different | 
|---|
| 172 | purposes. | 
|---|
| 173 |  | 
|---|
| 174 | GNU `diff' can show whether files are different without detailing | 
|---|
| 175 | the differences.  It also provides ways to suppress certain kinds of | 
|---|
| 176 | differences that are not important to you.  Most commonly, such | 
|---|
| 177 | differences are changes in the amount of white space between words or | 
|---|
| 178 | lines.  `diff' also provides ways to suppress differences in alphabetic | 
|---|
| 179 | case or in lines that match a regular expression that you provide. | 
|---|
| 180 | These options can accumulate; for example, you can ignore changes in | 
|---|
| 181 | both white space and alphabetic case. | 
|---|
| 182 |  | 
|---|
| 183 | Another way to think of the differences between two files is as a | 
|---|
| 184 | sequence of pairs of bytes that can be either identical or different. | 
|---|
| 185 | `cmp' reports the differences between two files byte by byte, instead | 
|---|
| 186 | of line by line.  As a result, it is often more useful than `diff' for | 
|---|
| 187 | comparing binary files.  For text files, `cmp' is useful mainly when | 
|---|
| 188 | you want to know only whether two files are identical, or whether one | 
|---|
| 189 | file is a prefix of the other. | 
|---|
| 190 |  | 
|---|
| 191 | To illustrate the effect that considering changes byte by byte can | 
|---|
| 192 | have compared with considering them line by line, think of what happens | 
|---|
| 193 | if a single newline character is added to the beginning of a file.  If | 
|---|
| 194 | that file is then compared with an otherwise identical file that lacks | 
|---|
| 195 | the newline at the beginning, `diff' will report that a blank line has | 
|---|
| 196 | been added to the file, while `cmp' will report that almost every byte | 
|---|
| 197 | of the two files differs. | 
|---|
| 198 |  | 
|---|
| 199 | `diff3' normally compares three input files line by line, finds | 
|---|
| 200 | groups of lines that differ, and reports each group of differing lines. | 
|---|
| 201 | Its output is designed to make it easy to inspect two different sets of | 
|---|
| 202 | changes to the same file. | 
|---|
| 203 |  | 
|---|
| 204 | * Menu: | 
|---|
| 205 |  | 
|---|
| 206 | * Hunks::             Groups of differing lines. | 
|---|
| 207 | * White Space::       Suppressing differences in white space. | 
|---|
| 208 | * Blank Lines::       Suppressing differences in blank lines. | 
|---|
| 209 | * Case Folding::      Suppressing differences in alphabetic case. | 
|---|
| 210 | * Specified Folding:: Suppressing differences that match regular expressions. | 
|---|
| 211 | * Brief::             Summarizing which files are different. | 
|---|
| 212 | * Binary::            Comparing binary files or forcing text comparisons. | 
|---|
| 213 |  | 
|---|
| 214 |  | 
|---|
| 215 | File: diff.info,  Node: Hunks,  Next: White Space,  Up: Comparison | 
|---|
| 216 |  | 
|---|
| 217 | Hunks | 
|---|
| 218 | ===== | 
|---|
| 219 |  | 
|---|
| 220 | When comparing two files, `diff' finds sequences of lines common to | 
|---|
| 221 | both files, interspersed with groups of differing lines called "hunks". | 
|---|
| 222 | Comparing two identical files yields one sequence of common lines and | 
|---|
| 223 | no hunks, because no lines differ.  Comparing two entirely different | 
|---|
| 224 | files yields no common lines and one large hunk that contains all lines | 
|---|
| 225 | of both files.  In general, there are many ways to match up lines | 
|---|
| 226 | between two given files.  `diff' tries to minimize the total hunk size | 
|---|
| 227 | by finding large sequences of common lines interspersed with small | 
|---|
| 228 | hunks of differing lines. | 
|---|
| 229 |  | 
|---|
| 230 | For example, suppose the file `F' contains the three lines `a', `b', | 
|---|
| 231 | `c', and the file `G' contains the same three lines in reverse order | 
|---|
| 232 | `c', `b', `a'.  If `diff' finds the line `c' as common, then the command | 
|---|
| 233 | `diff F G' produces this output: | 
|---|
| 234 |  | 
|---|
| 235 | 1,2d0 | 
|---|
| 236 | < a | 
|---|
| 237 | < b | 
|---|
| 238 | 3a2,3 | 
|---|
| 239 | > b | 
|---|
| 240 | > a | 
|---|
| 241 |  | 
|---|
| 242 | But if `diff' notices the common line `b' instead, it produces this | 
|---|
| 243 | output: | 
|---|
| 244 |  | 
|---|
| 245 | 1c1 | 
|---|
| 246 | < a | 
|---|
| 247 | --- | 
|---|
| 248 | > c | 
|---|
| 249 | 3c3 | 
|---|
| 250 | < c | 
|---|
| 251 | --- | 
|---|
| 252 | > a | 
|---|
| 253 |  | 
|---|
| 254 | It is also possible to find `a' as the common line.  `diff' does not | 
|---|
| 255 | always find an optimal matching between the files; it takes shortcuts | 
|---|
| 256 | to run faster.  But its output is usually close to the shortest | 
|---|
| 257 | possible.  You can adjust this tradeoff with the `--minimal' option | 
|---|
| 258 | (*note diff Performance::). | 
|---|
| 259 |  | 
|---|
| 260 |  | 
|---|
| 261 | File: diff.info,  Node: White Space,  Next: Blank Lines,  Prev: Hunks,  Up: Comparison | 
|---|
| 262 |  | 
|---|
| 263 | Suppressing Differences in Blank and Tab Spacing | 
|---|
| 264 | ================================================ | 
|---|
| 265 |  | 
|---|
| 266 | The `-E' and `--ignore-tab-expansion' options ignore the distinction | 
|---|
| 267 | between tabs and spaces on input.  A tab is considered to be equivalent | 
|---|
| 268 | to the number of spaces to the next tab stop.  `diff' assumes that tab | 
|---|
| 269 | stops are set every 8 print columns. | 
|---|
| 270 |  | 
|---|
| 271 | The `-b' and `--ignore-space-change' options are stronger.  They | 
|---|
| 272 | ignore white space at line end, and consider all other sequences of one | 
|---|
| 273 | or more white space characters to be equivalent.  With these options, | 
|---|
| 274 | `diff' considers the following two lines to be equivalent, where `$' | 
|---|
| 275 | denotes the line end: | 
|---|
| 276 |  | 
|---|
| 277 | Here lyeth  muche rychnesse  in lytell space.   -- John Heywood$ | 
|---|
| 278 | Here lyeth muche rychnesse in lytell space. -- John Heywood   $ | 
|---|
| 279 |  | 
|---|
| 280 | The `-w' and `--ignore-all-space' options are stronger still.  They | 
|---|
| 281 | ignore difference even if one line has white space where the other line | 
|---|
| 282 | has none.  "White space" characters include tab, newline, vertical tab, | 
|---|
| 283 | form feed, carriage return, and space; some locales may define | 
|---|
| 284 | additional characters to be white space.  With these options, `diff' | 
|---|
| 285 | considers the following two lines to be equivalent, where `$' denotes | 
|---|
| 286 | the line end and `^M' denotes a carriage return: | 
|---|
| 287 |  | 
|---|
| 288 | Here lyeth  muche  rychnesse in lytell space.--  John Heywood$ | 
|---|
| 289 | He relyeth much erychnes  seinly tells pace.  --John Heywood   ^M$ | 
|---|
| 290 |  | 
|---|
| 291 |  | 
|---|
| 292 | File: diff.info,  Node: Blank Lines,  Next: Case Folding,  Prev: White Space,  Up: Comparison | 
|---|
| 293 |  | 
|---|
| 294 | Suppressing Differences in Blank Lines | 
|---|
| 295 | ====================================== | 
|---|
| 296 |  | 
|---|
| 297 | The `-B' and `--ignore-blank-lines' options ignore insertions or | 
|---|
| 298 | deletions of blank lines.  These options affect only lines that are | 
|---|
| 299 | completely empty; they do not affect lines that look empty but contain | 
|---|
| 300 | space or tab characters.  With these options, for example, a file | 
|---|
| 301 | containing | 
|---|
| 302 | 1.  A point is that which has no part. | 
|---|
| 303 |  | 
|---|
| 304 | 2.  A line is breadthless length. | 
|---|
| 305 | -- Euclid, The Elements, I | 
|---|
| 306 |  | 
|---|
| 307 | is considered identical to a file containing | 
|---|
| 308 | 1.  A point is that which has no part. | 
|---|
| 309 | 2.  A line is breadthless length. | 
|---|
| 310 |  | 
|---|
| 311 |  | 
|---|
| 312 | -- Euclid, The Elements, I | 
|---|
| 313 |  | 
|---|
| 314 |  | 
|---|
| 315 | File: diff.info,  Node: Case Folding,  Next: Specified Folding,  Prev: Blank Lines,  Up: Comparison | 
|---|
| 316 |  | 
|---|
| 317 | Suppressing Case Differences | 
|---|
| 318 | ============================ | 
|---|
| 319 |  | 
|---|
| 320 | GNU `diff' can treat lower case letters as equivalent to their upper | 
|---|
| 321 | case counterparts, so that, for example, it considers `Funky Stuff', | 
|---|
| 322 | `funky STUFF', and `fUNKy stuFf' to all be the same.  To request this, | 
|---|
| 323 | use the `-i' or `--ignore-case' option. | 
|---|
| 324 |  | 
|---|
| 325 |  | 
|---|
| 326 | File: diff.info,  Node: Specified Folding,  Next: Brief,  Prev: Case Folding,  Up: Comparison | 
|---|
| 327 |  | 
|---|
| 328 | Suppressing Lines Matching a Regular Expression | 
|---|
| 329 | =============================================== | 
|---|
| 330 |  | 
|---|
| 331 | To ignore insertions and deletions of lines that match a | 
|---|
| 332 | `grep'-style regular expression, use the `-I REGEXP' or | 
|---|
| 333 | `--ignore-matching-lines=REGEXP' option.  You should escape regular | 
|---|
| 334 | expressions that contain shell metacharacters to prevent the shell from | 
|---|
| 335 | expanding them.  For example, `diff -I '^[[:digit:]]'' ignores all | 
|---|
| 336 | changes to lines beginning with a digit. | 
|---|
| 337 |  | 
|---|
| 338 | However, `-I' only ignores the insertion or deletion of lines that | 
|---|
| 339 | contain the regular expression if every changed line in the hunk--every | 
|---|
| 340 | insertion and every deletion--matches the regular expression.  In other | 
|---|
| 341 | words, for each nonignorable change, `diff' prints the complete set of | 
|---|
| 342 | changes in its vicinity, including the ignorable ones. | 
|---|
| 343 |  | 
|---|
| 344 | You can specify more than one regular expression for lines to ignore | 
|---|
| 345 | by using more than one `-I' option.  `diff' tries to match each line | 
|---|
| 346 | against each regular expression. | 
|---|
| 347 |  | 
|---|
| 348 |  | 
|---|
| 349 | File: diff.info,  Node: Brief,  Next: Binary,  Prev: Specified Folding,  Up: Comparison | 
|---|
| 350 |  | 
|---|
| 351 | Summarizing Which Files Differ | 
|---|
| 352 | ============================== | 
|---|
| 353 |  | 
|---|
| 354 | When you only want to find out whether files are different, and you | 
|---|
| 355 | don't care what the differences are, you can use the summary output | 
|---|
| 356 | format.  In this format, instead of showing the differences between the | 
|---|
| 357 | files, `diff' simply reports whether files differ.  The `-q' and | 
|---|
| 358 | `--brief' options select this output format. | 
|---|
| 359 |  | 
|---|
| 360 | This format is especially useful when comparing the contents of two | 
|---|
| 361 | directories.  It is also much faster than doing the normal line by line | 
|---|
| 362 | comparisons, because `diff' can stop analyzing the files as soon as it | 
|---|
| 363 | knows that there are any differences. | 
|---|
| 364 |  | 
|---|
| 365 | You can also get a brief indication of whether two files differ by | 
|---|
| 366 | using `cmp'.  For files that are identical, `cmp' produces no output. | 
|---|
| 367 | When the files differ, by default, `cmp' outputs the byte and line | 
|---|
| 368 | number where the first difference occurs.  You can use the `-s' option | 
|---|
| 369 | to suppress that information, so that `cmp' produces no output and | 
|---|
| 370 | reports whether the files differ using only its exit status (*note | 
|---|
| 371 | Invoking cmp::). | 
|---|
| 372 |  | 
|---|
| 373 | Unlike `diff', `cmp' cannot compare directories; it can only compare | 
|---|
| 374 | two files. | 
|---|
| 375 |  | 
|---|
| 376 |  | 
|---|
| 377 | File: diff.info,  Node: Binary,  Prev: Brief,  Up: Comparison | 
|---|
| 378 |  | 
|---|
| 379 | Binary Files and Forcing Text Comparisons | 
|---|
| 380 | ========================================= | 
|---|
| 381 |  | 
|---|
| 382 | If `diff' thinks that either of the two files it is comparing is | 
|---|
| 383 | binary (a non-text file), it normally treats that pair of files much as | 
|---|
| 384 | if the summary output format had been selected (*note Brief::), and | 
|---|
| 385 | reports only that the binary files are different.  This is because line | 
|---|
| 386 | by line comparisons are usually not meaningful for binary files. | 
|---|
| 387 |  | 
|---|
| 388 | `diff' determines whether a file is text or binary by checking the | 
|---|
| 389 | first few bytes in the file; the exact number of bytes is system | 
|---|
| 390 | dependent, but it is typically several thousand.  If every byte in that | 
|---|
| 391 | part of the file is non-null, `diff' considers the file to be text; | 
|---|
| 392 | otherwise it considers the file to be binary. | 
|---|
| 393 |  | 
|---|
| 394 | Sometimes you might want to force `diff' to consider files to be | 
|---|
| 395 | text.  For example, you might be comparing text files that contain null | 
|---|
| 396 | characters; `diff' would erroneously decide that those are non-text | 
|---|
| 397 | files.  Or you might be comparing documents that are in a format used | 
|---|
| 398 | by a word processing system that uses null characters to indicate | 
|---|
| 399 | special formatting.  You can force `diff' to consider all files to be | 
|---|
| 400 | text files, and compare them line by line, by using the `-a' or | 
|---|
| 401 | `--text' option.  If the files you compare using this option do not in | 
|---|
| 402 | fact contain text, they will probably contain few newline characters, | 
|---|
| 403 | and the `diff' output will consist of hunks showing differences between | 
|---|
| 404 | long lines of whatever characters the files contain. | 
|---|
| 405 |  | 
|---|
| 406 | You can also force `diff' to consider all files to be binary files, | 
|---|
| 407 | and report only whether they differ (but not how).  Use the `-q' or | 
|---|
| 408 | `--brief' option for this. | 
|---|
| 409 |  | 
|---|
| 410 | Differing binary files are considered to cause trouble because the | 
|---|
| 411 | resulting `diff' output does not capture all the differences.  This | 
|---|
| 412 | trouble causes `diff' to exit with status 2.  However, this trouble | 
|---|
| 413 | cannot occur with the `--a' or `--text' option, or with the `-q' or | 
|---|
| 414 | `--brief' option, as these options both cause `diff' to treat binary | 
|---|
| 415 | files like text files. | 
|---|
| 416 |  | 
|---|
| 417 | In operating systems that distinguish between text and binary files, | 
|---|
| 418 | `diff' normally reads and writes all data as text.  Use the `--binary' | 
|---|
| 419 | option to force `diff' to read and write binary data instead.  This | 
|---|
| 420 | option has no effect on a POSIX-compliant system like GNU or | 
|---|
| 421 | traditional Unix.  However, many personal computer operating systems | 
|---|
| 422 | represent the end of a line with a carriage return followed by a | 
|---|
| 423 | newline.  On such systems, `diff' normally ignores these carriage | 
|---|
| 424 | returns on input and generates them at the end of each output line, but | 
|---|
| 425 | with the `--binary' option `diff' treats each carriage return as just | 
|---|
| 426 | another input character, and does not generate a carriage return at the | 
|---|
| 427 | end of each output line.  This can be useful when dealing with non-text | 
|---|
| 428 | files that are meant to be interchanged with POSIX-compliant systems. | 
|---|
| 429 |  | 
|---|
| 430 | The `--strip-trailing-cr' causes `diff' to treat input lines that | 
|---|
| 431 | end in carriage return followed by newline as if they end in plain | 
|---|
| 432 | newline.  This can be useful when comparing text that is imperfectly | 
|---|
| 433 | imported from many personal computer operating systems.  This option | 
|---|
| 434 | affects how lines are read, which in turn affects how they are compared | 
|---|
| 435 | and output. | 
|---|
| 436 |  | 
|---|
| 437 | If you want to compare two files byte by byte, you can use the `cmp' | 
|---|
| 438 | program with the `-l' option to show the values of each differing byte | 
|---|
| 439 | in the two files.  With GNU `cmp', you can also use the `-b' option to | 
|---|
| 440 | show the ASCII representation of those bytes.  *Note Invoking cmp::, | 
|---|
| 441 | for more information. | 
|---|
| 442 |  | 
|---|
| 443 | If `diff3' thinks that any of the files it is comparing is binary (a | 
|---|
| 444 | non-text file), it normally reports an error, because such comparisons | 
|---|
| 445 | are usually not useful.  `diff3' uses the same test as `diff' to decide | 
|---|
| 446 | whether a file is binary.  As with `diff', if the input files contain a | 
|---|
| 447 | few non-text bytes but otherwise are like text files, you can force | 
|---|
| 448 | `diff3' to consider all files to be text files and compare them line by | 
|---|
| 449 | line by using the `-a' or `--text' options. | 
|---|
| 450 |  | 
|---|
| 451 |  | 
|---|
| 452 | File: diff.info,  Node: Output Formats,  Next: Incomplete Lines,  Prev: Comparison,  Up: Top | 
|---|
| 453 |  | 
|---|
| 454 | `diff' Output Formats | 
|---|
| 455 | ********************* | 
|---|
| 456 |  | 
|---|
| 457 | `diff' has several mutually exclusive options for output format. | 
|---|
| 458 | The following sections describe each format, illustrating how `diff' | 
|---|
| 459 | reports the differences between two sample input files. | 
|---|
| 460 |  | 
|---|
| 461 | * Menu: | 
|---|
| 462 |  | 
|---|
| 463 | * Sample diff Input:: Sample `diff' input files for examples. | 
|---|
| 464 | * Normal::            Showing differences without surrounding text. | 
|---|
| 465 | * Context::           Showing differences with the surrounding text. | 
|---|
| 466 | * Side by Side::      Showing differences in two columns. | 
|---|
| 467 | * Scripts::           Generating scripts for other programs. | 
|---|
| 468 | * If-then-else::      Merging files with if-then-else. | 
|---|
| 469 |  | 
|---|
| 470 |  | 
|---|
| 471 | File: diff.info,  Node: Sample diff Input,  Next: Normal,  Up: Output Formats | 
|---|
| 472 |  | 
|---|
| 473 | Two Sample Input Files | 
|---|
| 474 | ====================== | 
|---|
| 475 |  | 
|---|
| 476 | Here are two sample files that we will use in numerous examples to | 
|---|
| 477 | illustrate the output of `diff' and how various options can change it. | 
|---|
| 478 |  | 
|---|
| 479 | This is the file `lao': | 
|---|
| 480 |  | 
|---|
| 481 | The Way that can be told of is not the eternal Way; | 
|---|
| 482 | The name that can be named is not the eternal name. | 
|---|
| 483 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 484 | The Named is the mother of all things. | 
|---|
| 485 | Therefore let there always be non-being, | 
|---|
| 486 | so we may see their subtlety, | 
|---|
| 487 | And let there always be being, | 
|---|
| 488 | so we may see their outcome. | 
|---|
| 489 | The two are the same, | 
|---|
| 490 | But after they are produced, | 
|---|
| 491 | they have different names. | 
|---|
| 492 |  | 
|---|
| 493 | This is the file `tzu': | 
|---|
| 494 |  | 
|---|
| 495 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 496 | The named is the mother of all things. | 
|---|
| 497 |  | 
|---|
| 498 | Therefore let there always be non-being, | 
|---|
| 499 | so we may see their subtlety, | 
|---|
| 500 | And let there always be being, | 
|---|
| 501 | so we may see their outcome. | 
|---|
| 502 | The two are the same, | 
|---|
| 503 | But after they are produced, | 
|---|
| 504 | they have different names. | 
|---|
| 505 | They both may be called deep and profound. | 
|---|
| 506 | Deeper and more profound, | 
|---|
| 507 | The door of all subtleties! | 
|---|
| 508 |  | 
|---|
| 509 | In this example, the first hunk contains just the first two lines of | 
|---|
| 510 | `lao', the second hunk contains the fourth line of `lao' opposing the | 
|---|
| 511 | second and third lines of `tzu', and the last hunk contains just the | 
|---|
| 512 | last three lines of `tzu'. | 
|---|
| 513 |  | 
|---|
| 514 |  | 
|---|
| 515 | File: diff.info,  Node: Normal,  Next: Context,  Prev: Sample diff Input,  Up: Output Formats | 
|---|
| 516 |  | 
|---|
| 517 | Showing Differences Without Context | 
|---|
| 518 | =================================== | 
|---|
| 519 |  | 
|---|
| 520 | The "normal" `diff' output format shows each hunk of differences | 
|---|
| 521 | without any surrounding context.  Sometimes such output is the clearest | 
|---|
| 522 | way to see how lines have changed, without the clutter of nearby | 
|---|
| 523 | unchanged lines (although you can get similar results with the context | 
|---|
| 524 | or unified formats by using 0 lines of context).  However, this format | 
|---|
| 525 | is no longer widely used for sending out patches; for that purpose, the | 
|---|
| 526 | context format (*note Context Format::) and the unified format (*note | 
|---|
| 527 | Unified Format::) are superior.  Normal format is the default for | 
|---|
| 528 | compatibility with older versions of `diff' and the POSIX standard. | 
|---|
| 529 | Use the `--normal' option to select this output format explicitly. | 
|---|
| 530 |  | 
|---|
| 531 | * Menu: | 
|---|
| 532 |  | 
|---|
| 533 | * Detailed Normal:: A detailed description of normal output format. | 
|---|
| 534 | * Example Normal::  Sample output in the normal format. | 
|---|
| 535 |  | 
|---|
| 536 |  | 
|---|
| 537 | File: diff.info,  Node: Detailed Normal,  Next: Example Normal,  Up: Normal | 
|---|
| 538 |  | 
|---|
| 539 | Detailed Description of Normal Format | 
|---|
| 540 | ------------------------------------- | 
|---|
| 541 |  | 
|---|
| 542 | The normal output format consists of one or more hunks of | 
|---|
| 543 | differences; each hunk shows one area where the files differ.  Normal | 
|---|
| 544 | format hunks look like this: | 
|---|
| 545 |  | 
|---|
| 546 | CHANGE-COMMAND | 
|---|
| 547 | < FROM-FILE-LINE | 
|---|
| 548 | < FROM-FILE-LINE... | 
|---|
| 549 | --- | 
|---|
| 550 | > TO-FILE-LINE | 
|---|
| 551 | > TO-FILE-LINE... | 
|---|
| 552 |  | 
|---|
| 553 | There are three types of change commands.  Each consists of a line | 
|---|
| 554 | number or comma-separated range of lines in the first file, a single | 
|---|
| 555 | character indicating the kind of change to make, and a line number or | 
|---|
| 556 | comma-separated range of lines in the second file.  All line numbers are | 
|---|
| 557 | the original line numbers in each file.  The types of change commands | 
|---|
| 558 | are: | 
|---|
| 559 |  | 
|---|
| 560 | `LaR' | 
|---|
| 561 | Add the lines in range R of the second file after line L of the | 
|---|
| 562 | first file.  For example, `8a12,15' means append lines 12-15 of | 
|---|
| 563 | file 2 after line 8 of file 1; or, if changing file 2 into file 1, | 
|---|
| 564 | delete lines 12-15 of file 2. | 
|---|
| 565 |  | 
|---|
| 566 | `FcT' | 
|---|
| 567 | Replace the lines in range F of the first file with lines in range | 
|---|
| 568 | T of the second file.  This is like a combined add and delete, but | 
|---|
| 569 | more compact.  For example, `5,7c8,10' means change lines 5-7 of | 
|---|
| 570 | file 1 to read as lines 8-10 of file 2; or, if changing file 2 into | 
|---|
| 571 | file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1. | 
|---|
| 572 |  | 
|---|
| 573 | `RdL' | 
|---|
| 574 | Delete the lines in range R from the first file; line L is where | 
|---|
| 575 | they would have appeared in the second file had they not been | 
|---|
| 576 | deleted.  For example, `5,7d3' means delete lines 5-7 of file 1; | 
|---|
| 577 | or, if changing file 2 into file 1, append lines 5-7 of file 1 | 
|---|
| 578 | after line 3 of file 2. | 
|---|
| 579 |  | 
|---|
| 580 |  | 
|---|
| 581 | File: diff.info,  Node: Example Normal,  Prev: Detailed Normal,  Up: Normal | 
|---|
| 582 |  | 
|---|
| 583 | An Example of Normal Format | 
|---|
| 584 | --------------------------- | 
|---|
| 585 |  | 
|---|
| 586 | Here is the output of the command `diff lao tzu' (*note Sample diff | 
|---|
| 587 | Input::, for the complete contents of the two files).  Notice that it | 
|---|
| 588 | shows only the lines that are different between the two files. | 
|---|
| 589 |  | 
|---|
| 590 | 1,2d0 | 
|---|
| 591 | < The Way that can be told of is not the eternal Way; | 
|---|
| 592 | < The name that can be named is not the eternal name. | 
|---|
| 593 | 4c2,3 | 
|---|
| 594 | < The Named is the mother of all things. | 
|---|
| 595 | --- | 
|---|
| 596 | > The named is the mother of all things. | 
|---|
| 597 | > | 
|---|
| 598 | 11a11,13 | 
|---|
| 599 | > They both may be called deep and profound. | 
|---|
| 600 | > Deeper and more profound, | 
|---|
| 601 | > The door of all subtleties! | 
|---|
| 602 |  | 
|---|
| 603 |  | 
|---|
| 604 | File: diff.info,  Node: Context,  Next: Side by Side,  Prev: Normal,  Up: Output Formats | 
|---|
| 605 |  | 
|---|
| 606 | Showing Differences in Their Context | 
|---|
| 607 | ==================================== | 
|---|
| 608 |  | 
|---|
| 609 | Usually, when you are looking at the differences between files, you | 
|---|
| 610 | will also want to see the parts of the files near the lines that | 
|---|
| 611 | differ, to help you understand exactly what has changed.  These nearby | 
|---|
| 612 | parts of the files are called the "context". | 
|---|
| 613 |  | 
|---|
| 614 | GNU `diff' provides two output formats that show context around the | 
|---|
| 615 | differing lines: "context format" and "unified format".  It can | 
|---|
| 616 | optionally show in which function or section of the file the differing | 
|---|
| 617 | lines are found. | 
|---|
| 618 |  | 
|---|
| 619 | If you are distributing new versions of files to other people in the | 
|---|
| 620 | form of `diff' output, you should use one of the output formats that | 
|---|
| 621 | show context so that they can apply the diffs even if they have made | 
|---|
| 622 | small changes of their own to the files.  `patch' can apply the diffs | 
|---|
| 623 | in this case by searching in the files for the lines of context around | 
|---|
| 624 | the differing lines; if those lines are actually a few lines away from | 
|---|
| 625 | where the diff says they are, `patch' can adjust the line numbers | 
|---|
| 626 | accordingly and still apply the diff correctly.  *Note Imperfect::, for | 
|---|
| 627 | more information on using `patch' to apply imperfect diffs. | 
|---|
| 628 |  | 
|---|
| 629 | * Menu: | 
|---|
| 630 |  | 
|---|
| 631 | * Context Format::  An output format that shows surrounding lines. | 
|---|
| 632 | * Unified Format::  A more compact output format that shows context. | 
|---|
| 633 | * Sections::        Showing which sections of the files differences are in. | 
|---|
| 634 | * Alternate Names:: Showing alternate file names in context headers. | 
|---|
| 635 |  | 
|---|
| 636 |  | 
|---|
| 637 | File: diff.info,  Node: Context Format,  Next: Unified Format,  Up: Context | 
|---|
| 638 |  | 
|---|
| 639 | Context Format | 
|---|
| 640 | -------------- | 
|---|
| 641 |  | 
|---|
| 642 | The context output format shows several lines of context around the | 
|---|
| 643 | lines that differ.  It is the standard format for distributing updates | 
|---|
| 644 | to source code. | 
|---|
| 645 |  | 
|---|
| 646 | To select this output format, use the `-C LINES', | 
|---|
| 647 | `--context[=LINES]', or `-c' option.  The argument LINES that some of | 
|---|
| 648 | these options take is the number of lines of context to show.  If you | 
|---|
| 649 | do not specify LINES, it defaults to three.  For proper operation, | 
|---|
| 650 | `patch' typically needs at least two lines of context. | 
|---|
| 651 |  | 
|---|
| 652 | * Menu: | 
|---|
| 653 |  | 
|---|
| 654 | * Detailed Context:: A detailed description of the context output format. | 
|---|
| 655 | * Example Context::  Sample output in context format. | 
|---|
| 656 | * Less Context::     Another sample with less context. | 
|---|
| 657 |  | 
|---|
| 658 |  | 
|---|
| 659 | File: diff.info,  Node: Detailed Context,  Next: Example Context,  Up: Context Format | 
|---|
| 660 |  | 
|---|
| 661 | Detailed Description of Context Format | 
|---|
| 662 | ...................................... | 
|---|
| 663 |  | 
|---|
| 664 | The context output format starts with a two-line header, which looks | 
|---|
| 665 | like this: | 
|---|
| 666 |  | 
|---|
| 667 | *** FROM-FILE FROM-FILE-MODIFICATION-TIME | 
|---|
| 668 | --- TO-FILE TO-FILE-MODIFICATION TIME | 
|---|
| 669 |  | 
|---|
| 670 | The time stamp normally looks like `2002-02-21 23:30:39.942229878 | 
|---|
| 671 | -0800' to indicate the date, time with fractional seconds, and time | 
|---|
| 672 | zone in Internet RFC 2822 format | 
|---|
| 673 | (ftp://ftp.isi.edu/in-notes/rfc2822.txt).  However, a traditional time | 
|---|
| 674 | stamp like `Thu Feb 21 23:30:39 2002' is used if the `LC_TIME' locale | 
|---|
| 675 | category is either `C' or `POSIX'. | 
|---|
| 676 |  | 
|---|
| 677 | You can change the header's content with the `--label=LABEL' option; | 
|---|
| 678 | see *Note Alternate Names::. | 
|---|
| 679 |  | 
|---|
| 680 | Next come one or more hunks of differences; each hunk shows one area | 
|---|
| 681 | where the files differ.  Context format hunks look like this: | 
|---|
| 682 |  | 
|---|
| 683 | *************** | 
|---|
| 684 | *** FROM-FILE-LINE-RANGE **** | 
|---|
| 685 | FROM-FILE-LINE | 
|---|
| 686 | FROM-FILE-LINE... | 
|---|
| 687 | --- TO-FILE-LINE-RANGE ---- | 
|---|
| 688 | TO-FILE-LINE | 
|---|
| 689 | TO-FILE-LINE... | 
|---|
| 690 |  | 
|---|
| 691 | The lines of context around the lines that differ start with two | 
|---|
| 692 | space characters.  The lines that differ between the two files start | 
|---|
| 693 | with one of the following indicator characters, followed by a space | 
|---|
| 694 | character: | 
|---|
| 695 |  | 
|---|
| 696 | `!' | 
|---|
| 697 | A line that is part of a group of one or more lines that changed | 
|---|
| 698 | between the two files.  There is a corresponding group of lines | 
|---|
| 699 | marked with `!' in the part of this hunk for the other file. | 
|---|
| 700 |  | 
|---|
| 701 | `+' | 
|---|
| 702 | An "inserted" line in the second file that corresponds to nothing | 
|---|
| 703 | in the first file. | 
|---|
| 704 |  | 
|---|
| 705 | `-' | 
|---|
| 706 | A "deleted" line in the first file that corresponds to nothing in | 
|---|
| 707 | the second file. | 
|---|
| 708 |  | 
|---|
| 709 | If all of the changes in a hunk are insertions, the lines of | 
|---|
| 710 | FROM-FILE are omitted.  If all of the changes are deletions, the lines | 
|---|
| 711 | of TO-FILE are omitted. | 
|---|
| 712 |  | 
|---|
| 713 |  | 
|---|
| 714 | File: diff.info,  Node: Example Context,  Next: Less Context,  Prev: Detailed Context,  Up: Context Format | 
|---|
| 715 |  | 
|---|
| 716 | An Example of Context Format | 
|---|
| 717 | ............................ | 
|---|
| 718 |  | 
|---|
| 719 | Here is the output of `diff -c lao tzu' (*note Sample diff Input::, | 
|---|
| 720 | for the complete contents of the two files).  Notice that up to three | 
|---|
| 721 | lines that are not different are shown around each line that is | 
|---|
| 722 | different; they are the context lines.  Also notice that the first two | 
|---|
| 723 | hunks have run together, because their contents overlap. | 
|---|
| 724 |  | 
|---|
| 725 | *** lao    2002-02-21 23:30:39.942229878 -0800 | 
|---|
| 726 | --- tzu    2002-02-21 23:30:50.442260588 -0800 | 
|---|
| 727 | *************** | 
|---|
| 728 | *** 1,7 **** | 
|---|
| 729 | - The Way that can be told of is not the eternal Way; | 
|---|
| 730 | - The name that can be named is not the eternal name. | 
|---|
| 731 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 732 | ! The Named is the mother of all things. | 
|---|
| 733 | Therefore let there always be non-being, | 
|---|
| 734 | so we may see their subtlety, | 
|---|
| 735 | And let there always be being, | 
|---|
| 736 | --- 1,6 ---- | 
|---|
| 737 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 738 | ! The named is the mother of all things. | 
|---|
| 739 | ! | 
|---|
| 740 | Therefore let there always be non-being, | 
|---|
| 741 | so we may see their subtlety, | 
|---|
| 742 | And let there always be being, | 
|---|
| 743 | *************** | 
|---|
| 744 | *** 9,11 **** | 
|---|
| 745 | --- 8,13 ---- | 
|---|
| 746 | The two are the same, | 
|---|
| 747 | But after they are produced, | 
|---|
| 748 | they have different names. | 
|---|
| 749 | + They both may be called deep and profound. | 
|---|
| 750 | + Deeper and more profound, | 
|---|
| 751 | + The door of all subtleties! | 
|---|
| 752 |  | 
|---|
| 753 |  | 
|---|
| 754 | File: diff.info,  Node: Less Context,  Prev: Example Context,  Up: Context Format | 
|---|
| 755 |  | 
|---|
| 756 | An Example of Context Format with Less Context | 
|---|
| 757 | .............................................. | 
|---|
| 758 |  | 
|---|
| 759 | Here is the output of `diff -C 1 lao tzu' (*note Sample diff | 
|---|
| 760 | Input::, for the complete contents of the two files).  Notice that at | 
|---|
| 761 | most one context line is reported here. | 
|---|
| 762 |  | 
|---|
| 763 | *** lao    2002-02-21 23:30:39.942229878 -0800 | 
|---|
| 764 | --- tzu    2002-02-21 23:30:50.442260588 -0800 | 
|---|
| 765 | *************** | 
|---|
| 766 | *** 1,5 **** | 
|---|
| 767 | - The Way that can be told of is not the eternal Way; | 
|---|
| 768 | - The name that can be named is not the eternal name. | 
|---|
| 769 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 770 | ! The Named is the mother of all things. | 
|---|
| 771 | Therefore let there always be non-being, | 
|---|
| 772 | --- 1,4 ---- | 
|---|
| 773 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 774 | ! The named is the mother of all things. | 
|---|
| 775 | ! | 
|---|
| 776 | Therefore let there always be non-being, | 
|---|
| 777 | *************** | 
|---|
| 778 | *** 11 **** | 
|---|
| 779 | --- 10,13 ---- | 
|---|
| 780 | they have different names. | 
|---|
| 781 | + They both may be called deep and profound. | 
|---|
| 782 | + Deeper and more profound, | 
|---|
| 783 | + The door of all subtleties! | 
|---|
| 784 |  | 
|---|
| 785 |  | 
|---|
| 786 | File: diff.info,  Node: Unified Format,  Next: Sections,  Prev: Context Format,  Up: Context | 
|---|
| 787 |  | 
|---|
| 788 | Unified Format | 
|---|
| 789 | -------------- | 
|---|
| 790 |  | 
|---|
| 791 | The unified output format is a variation on the context format that | 
|---|
| 792 | is more compact because it omits redundant context lines.  To select | 
|---|
| 793 | this output format, use the `-U LINES', `--unified[=LINES]', or `-u' | 
|---|
| 794 | option.  The argument LINES is the number of lines of context to show. | 
|---|
| 795 | When it is not given, it defaults to three. | 
|---|
| 796 |  | 
|---|
| 797 | At present, only GNU `diff' can produce this format and only GNU | 
|---|
| 798 | `patch' can automatically apply diffs in this format.  For proper | 
|---|
| 799 | operation, `patch' typically needs at least three lines of context. | 
|---|
| 800 |  | 
|---|
| 801 | * Menu: | 
|---|
| 802 |  | 
|---|
| 803 | * Detailed Unified:: A detailed description of unified format. | 
|---|
| 804 | * Example Unified::  Sample output in unified format. | 
|---|
| 805 |  | 
|---|
| 806 |  | 
|---|
| 807 | File: diff.info,  Node: Detailed Unified,  Next: Example Unified,  Up: Unified Format | 
|---|
| 808 |  | 
|---|
| 809 | Detailed Description of Unified Format | 
|---|
| 810 | ...................................... | 
|---|
| 811 |  | 
|---|
| 812 | The unified output format starts with a two-line header, which looks | 
|---|
| 813 | like this: | 
|---|
| 814 |  | 
|---|
| 815 | --- FROM-FILE FROM-FILE-MODIFICATION-TIME | 
|---|
| 816 | +++ TO-FILE TO-FILE-MODIFICATION-TIME | 
|---|
| 817 |  | 
|---|
| 818 | The time stamp looks like `2002-02-21 23:30:39.942229878 -0800' to | 
|---|
| 819 | indicate the date, time with fractional seconds, and time zone. | 
|---|
| 820 |  | 
|---|
| 821 | You can change the header's content with the `--label=LABEL' option; | 
|---|
| 822 | see *Note Alternate Names::. | 
|---|
| 823 |  | 
|---|
| 824 | Next come one or more hunks of differences; each hunk shows one area | 
|---|
| 825 | where the files differ.  Unified format hunks look like this: | 
|---|
| 826 |  | 
|---|
| 827 | @@ FROM-FILE-RANGE TO-FILE-RANGE @@ | 
|---|
| 828 | LINE-FROM-EITHER-FILE | 
|---|
| 829 | LINE-FROM-EITHER-FILE... | 
|---|
| 830 |  | 
|---|
| 831 | The lines common to both files begin with a space character.  The | 
|---|
| 832 | lines that actually differ between the two files have one of the | 
|---|
| 833 | following indicator characters in the left print column: | 
|---|
| 834 |  | 
|---|
| 835 | `+' | 
|---|
| 836 | A line was added here to the first file. | 
|---|
| 837 |  | 
|---|
| 838 | `-' | 
|---|
| 839 | A line was removed here from the first file. | 
|---|
| 840 |  | 
|---|
| 841 |  | 
|---|
| 842 | File: diff.info,  Node: Example Unified,  Prev: Detailed Unified,  Up: Unified Format | 
|---|
| 843 |  | 
|---|
| 844 | An Example of Unified Format | 
|---|
| 845 | ............................ | 
|---|
| 846 |  | 
|---|
| 847 | Here is the output of the command `diff -u lao tzu' (*note Sample | 
|---|
| 848 | diff Input::, for the complete contents of the two files): | 
|---|
| 849 |  | 
|---|
| 850 | --- lao    2002-02-21 23:30:39.942229878 -0800 | 
|---|
| 851 | +++ tzu    2002-02-21 23:30:50.442260588 -0800 | 
|---|
| 852 | @@ -1,7 +1,6 @@ | 
|---|
| 853 | -The Way that can be told of is not the eternal Way; | 
|---|
| 854 | -The name that can be named is not the eternal name. | 
|---|
| 855 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 856 | -The Named is the mother of all things. | 
|---|
| 857 | +The named is the mother of all things. | 
|---|
| 858 | + | 
|---|
| 859 | Therefore let there always be non-being, | 
|---|
| 860 | so we may see their subtlety, | 
|---|
| 861 | And let there always be being, | 
|---|
| 862 | @@ -9,3 +8,6 @@ | 
|---|
| 863 | The two are the same, | 
|---|
| 864 | But after they are produced, | 
|---|
| 865 | they have different names. | 
|---|
| 866 | +They both may be called deep and profound. | 
|---|
| 867 | +Deeper and more profound, | 
|---|
| 868 | +The door of all subtleties! | 
|---|
| 869 |  | 
|---|
| 870 |  | 
|---|
| 871 | File: diff.info,  Node: Sections,  Next: Alternate Names,  Prev: Unified Format,  Up: Context | 
|---|
| 872 |  | 
|---|
| 873 | Showing Which Sections Differences Are in | 
|---|
| 874 | ----------------------------------------- | 
|---|
| 875 |  | 
|---|
| 876 | Sometimes you might want to know which part of the files each change | 
|---|
| 877 | falls in.  If the files are source code, this could mean which function | 
|---|
| 878 | was changed.  If the files are documents, it could mean which chapter or | 
|---|
| 879 | appendix was changed.  GNU `diff' can show this by displaying the | 
|---|
| 880 | nearest section heading line that precedes the differing lines.  Which | 
|---|
| 881 | lines are "section headings" is determined by a regular expression. | 
|---|
| 882 |  | 
|---|
| 883 | * Menu: | 
|---|
| 884 |  | 
|---|
| 885 | * Specified Headings::  Showing headings that match regular expressions. | 
|---|
| 886 | * C Function Headings:: Showing headings of C functions. | 
|---|
| 887 |  | 
|---|
| 888 |  | 
|---|
| 889 | File: diff.info,  Node: Specified Headings,  Next: C Function Headings,  Up: Sections | 
|---|
| 890 |  | 
|---|
| 891 | Showing Lines That Match Regular Expressions | 
|---|
| 892 | ............................................ | 
|---|
| 893 |  | 
|---|
| 894 | To show in which sections differences occur for files that are not | 
|---|
| 895 | source code for C or similar languages, use the `-F REGEXP' or | 
|---|
| 896 | `--show-function-line=REGEXP' option.  `diff' considers lines that | 
|---|
| 897 | match the `grep'-style regular expression REGEXP to be the beginning of | 
|---|
| 898 | a section of the file.  Here are suggested regular expressions for some | 
|---|
| 899 | common languages: | 
|---|
| 900 |  | 
|---|
| 901 | `^[[:alpha:]$_]' | 
|---|
| 902 | C, C++, Prolog | 
|---|
| 903 |  | 
|---|
| 904 | `^(' | 
|---|
| 905 | Lisp | 
|---|
| 906 |  | 
|---|
| 907 | `^@node' | 
|---|
| 908 | Texinfo | 
|---|
| 909 |  | 
|---|
| 910 | This option does not automatically select an output format; in order | 
|---|
| 911 | to use it, you must select the context format (*note Context Format::) | 
|---|
| 912 | or unified format (*note Unified Format::).  In other output formats it | 
|---|
| 913 | has no effect. | 
|---|
| 914 |  | 
|---|
| 915 | The `-F' and `--show-function-line' options find the nearest | 
|---|
| 916 | unchanged line that precedes each hunk of differences and matches the | 
|---|
| 917 | given regular expression.  Then they add that line to the end of the | 
|---|
| 918 | line of asterisks in the context format, or to the `@@' line in unified | 
|---|
| 919 | format.  If no matching line exists, they leave the output for that | 
|---|
| 920 | hunk unchanged.  If that line is more than 40 characters long, they | 
|---|
| 921 | output only the first 40 characters.  You can specify more than one | 
|---|
| 922 | regular expression for such lines; `diff' tries to match each line | 
|---|
| 923 | against each regular expression, starting with the last one given.  This | 
|---|
| 924 | means that you can use `-p' and `-F' together, if you wish. | 
|---|
| 925 |  | 
|---|
| 926 |  | 
|---|
| 927 | File: diff.info,  Node: C Function Headings,  Prev: Specified Headings,  Up: Sections | 
|---|
| 928 |  | 
|---|
| 929 | Showing C Function Headings | 
|---|
| 930 | ........................... | 
|---|
| 931 |  | 
|---|
| 932 | To show in which functions differences occur for C and similar | 
|---|
| 933 | languages, you can use the `-p' or `--show-c-function' option.  This | 
|---|
| 934 | option automatically defaults to the context output format (*note | 
|---|
| 935 | Context Format::), with the default number of lines of context.  You | 
|---|
| 936 | can override that number with `-C LINES' elsewhere in the command line. | 
|---|
| 937 | You can override both the format and the number with `-U LINES' | 
|---|
| 938 | elsewhere in the command line. | 
|---|
| 939 |  | 
|---|
| 940 | The `-p' and `--show-c-function' options are equivalent to `-F | 
|---|
| 941 | '^[[:alpha:]$_]'' if the unified format is specified, otherwise `-c -F | 
|---|
| 942 | '^[[:alpha:]$_]'' (*note Specified Headings::).  GNU `diff' provides | 
|---|
| 943 | them for the sake of convenience. | 
|---|
| 944 |  | 
|---|
| 945 |  | 
|---|
| 946 | File: diff.info,  Node: Alternate Names,  Prev: Sections,  Up: Context | 
|---|
| 947 |  | 
|---|
| 948 | Showing Alternate File Names | 
|---|
| 949 | ---------------------------- | 
|---|
| 950 |  | 
|---|
| 951 | If you are comparing two files that have meaningless or uninformative | 
|---|
| 952 | names, you might want `diff' to show alternate names in the header of | 
|---|
| 953 | the context and unified output formats.  To do this, use the | 
|---|
| 954 | `--label=LABEL' option.  The first time you give this option, its | 
|---|
| 955 | argument replaces the name and date of the first file in the header; | 
|---|
| 956 | the second time, its argument replaces the name and date of the second | 
|---|
| 957 | file.  If you give this option more than twice, `diff' reports an | 
|---|
| 958 | error.  The `--label' option does not affect the file names in the `pr' | 
|---|
| 959 | header when the `-l' or `--paginate' option is used (*note | 
|---|
| 960 | Pagination::). | 
|---|
| 961 |  | 
|---|
| 962 | Here are the first two lines of the output from `diff -C 2 | 
|---|
| 963 | --label=original --label=modified lao tzu': | 
|---|
| 964 |  | 
|---|
| 965 | *** original | 
|---|
| 966 | --- modified | 
|---|
| 967 |  | 
|---|
| 968 |  | 
|---|
| 969 | File: diff.info,  Node: Side by Side,  Next: Scripts,  Prev: Context,  Up: Output Formats | 
|---|
| 970 |  | 
|---|
| 971 | Showing Differences Side by Side | 
|---|
| 972 | ================================ | 
|---|
| 973 |  | 
|---|
| 974 | `diff' can produce a side by side difference listing of two files. | 
|---|
| 975 | The files are listed in two columns with a gutter between them.  The | 
|---|
| 976 | gutter contains one of the following markers: | 
|---|
| 977 |  | 
|---|
| 978 | white space | 
|---|
| 979 | The corresponding lines are in common.  That is, either the lines | 
|---|
| 980 | are identical, or the difference is ignored because of one of the | 
|---|
| 981 | `--ignore' options (*note White Space::). | 
|---|
| 982 |  | 
|---|
| 983 | `|' | 
|---|
| 984 | The corresponding lines differ, and they are either both complete | 
|---|
| 985 | or both incomplete. | 
|---|
| 986 |  | 
|---|
| 987 | `<' | 
|---|
| 988 | The files differ and only the first file contains the line. | 
|---|
| 989 |  | 
|---|
| 990 | `>' | 
|---|
| 991 | The files differ and only the second file contains the line. | 
|---|
| 992 |  | 
|---|
| 993 | `(' | 
|---|
| 994 | Only the first file contains the line, but the difference is | 
|---|
| 995 | ignored. | 
|---|
| 996 |  | 
|---|
| 997 | `)' | 
|---|
| 998 | Only the second file contains the line, but the difference is | 
|---|
| 999 | ignored. | 
|---|
| 1000 |  | 
|---|
| 1001 | `\' | 
|---|
| 1002 | The corresponding lines differ, and only the first line is | 
|---|
| 1003 | incomplete. | 
|---|
| 1004 |  | 
|---|
| 1005 | `/' | 
|---|
| 1006 | The corresponding lines differ, and only the second line is | 
|---|
| 1007 | incomplete. | 
|---|
| 1008 |  | 
|---|
| 1009 | Normally, an output line is incomplete if and only if the lines that | 
|---|
| 1010 | it contains are incomplete; *Note Incomplete Lines::.  However, when an | 
|---|
| 1011 | output line represents two differing lines, one might be incomplete | 
|---|
| 1012 | while the other is not.  In this case, the output line is complete, but | 
|---|
| 1013 | its the gutter is marked `\' if the first line is incomplete, `/' if | 
|---|
| 1014 | the second line is. | 
|---|
| 1015 |  | 
|---|
| 1016 | Side by side format is sometimes easiest to read, but it has | 
|---|
| 1017 | limitations.  It generates much wider output than usual, and truncates | 
|---|
| 1018 | lines that are too long to fit.  Also, it relies on lining up output | 
|---|
| 1019 | more heavily than usual, so its output looks particularly bad if you | 
|---|
| 1020 | use varying width fonts, nonstandard tab stops, or nonprinting | 
|---|
| 1021 | characters. | 
|---|
| 1022 |  | 
|---|
| 1023 | You can use the `sdiff' command to interactively merge side by side | 
|---|
| 1024 | differences.  *Note Interactive Merging::, for more information on | 
|---|
| 1025 | merging files. | 
|---|
| 1026 |  | 
|---|
| 1027 | * Menu: | 
|---|
| 1028 |  | 
|---|
| 1029 | * Side by Side Format::  Controlling side by side output format. | 
|---|
| 1030 | * Example Side by Side:: Sample side by side output. | 
|---|
| 1031 |  | 
|---|
| 1032 |  | 
|---|
| 1033 | File: diff.info,  Node: Side by Side Format,  Next: Example Side by Side,  Up: Side by Side | 
|---|
| 1034 |  | 
|---|
| 1035 | Controlling Side by Side Format | 
|---|
| 1036 | ------------------------------- | 
|---|
| 1037 |  | 
|---|
| 1038 | The `-y' or `--side-by-side' option selects side by side format. | 
|---|
| 1039 | Because side by side output lines contain two input lines, the output | 
|---|
| 1040 | is wider than usual: normally 130 print columns, which can fit onto a | 
|---|
| 1041 | traditional printer line.  You can set the width of the output with the | 
|---|
| 1042 | `-W COLUMNS' or `--width=COLUMNS' option.  The output is split into two | 
|---|
| 1043 | halves of equal width, separated by a small gutter to mark differences; | 
|---|
| 1044 | the right half is aligned to a tab stop so that tabs line up.  Input | 
|---|
| 1045 | lines that are too long to fit in half of an output line are truncated | 
|---|
| 1046 | for output. | 
|---|
| 1047 |  | 
|---|
| 1048 | The `--left-column' option prints only the left column of two common | 
|---|
| 1049 | lines.  The `--suppress-common-lines' option suppresses common lines | 
|---|
| 1050 | entirely. | 
|---|
| 1051 |  | 
|---|
| 1052 |  | 
|---|
| 1053 | File: diff.info,  Node: Example Side by Side,  Prev: Side by Side Format,  Up: Side by Side | 
|---|
| 1054 |  | 
|---|
| 1055 | An Example of Side by Side Format | 
|---|
| 1056 | --------------------------------- | 
|---|
| 1057 |  | 
|---|
| 1058 | Here is the output of the command `diff -y -W 72 lao tzu' (*note | 
|---|
| 1059 | Sample diff Input::, for the complete contents of the two files). | 
|---|
| 1060 |  | 
|---|
| 1061 | The Way that can be told of is n   < | 
|---|
| 1062 | The name that can be named is no   < | 
|---|
| 1063 | The Nameless is the origin of He        The Nameless is the origin of He | 
|---|
| 1064 | The Named is the mother of all t   |    The named is the mother of all t | 
|---|
| 1065 | > | 
|---|
| 1066 | Therefore let there always be no        Therefore let there always be no | 
|---|
| 1067 | so we may see their subtlety,           so we may see their subtlety, | 
|---|
| 1068 | And let there always be being,          And let there always be being, | 
|---|
| 1069 | so we may see their outcome.            so we may see their outcome. | 
|---|
| 1070 | The two are the same,                   The two are the same, | 
|---|
| 1071 | But after they are produced,            But after they are produced, | 
|---|
| 1072 | they have different names.              they have different names. | 
|---|
| 1073 | >    They both may be called deep and | 
|---|
| 1074 | >    Deeper and more profound, | 
|---|
| 1075 | >    The door of all subtleties! | 
|---|
| 1076 |  | 
|---|
| 1077 |  | 
|---|
| 1078 | File: diff.info,  Node: Scripts,  Next: If-then-else,  Prev: Side by Side,  Up: Output Formats | 
|---|
| 1079 |  | 
|---|
| 1080 | Making Edit Scripts | 
|---|
| 1081 | =================== | 
|---|
| 1082 |  | 
|---|
| 1083 | Several output modes produce command scripts for editing FROM-FILE | 
|---|
| 1084 | to produce TO-FILE. | 
|---|
| 1085 |  | 
|---|
| 1086 | * Menu: | 
|---|
| 1087 |  | 
|---|
| 1088 | * ed Scripts:: Using `diff' to produce commands for `ed'. | 
|---|
| 1089 | * Forward ed:: Making forward `ed' scripts. | 
|---|
| 1090 | * RCS::        A special `diff' output format used by RCS. | 
|---|
| 1091 |  | 
|---|
| 1092 |  | 
|---|
| 1093 | File: diff.info,  Node: ed Scripts,  Next: Forward ed,  Up: Scripts | 
|---|
| 1094 |  | 
|---|
| 1095 | `ed' Scripts | 
|---|
| 1096 | ------------ | 
|---|
| 1097 |  | 
|---|
| 1098 | `diff' can produce commands that direct the `ed' text editor to | 
|---|
| 1099 | change the first file into the second file.  Long ago, this was the | 
|---|
| 1100 | only output mode that was suitable for editing one file into another | 
|---|
| 1101 | automatically; today, with `patch', it is almost obsolete.  Use the | 
|---|
| 1102 | `-e' or `--ed' option to select this output format. | 
|---|
| 1103 |  | 
|---|
| 1104 | Like the normal format (*note Normal::), this output format does not | 
|---|
| 1105 | show any context; unlike the normal format, it does not include the | 
|---|
| 1106 | information necessary to apply the diff in reverse (to produce the first | 
|---|
| 1107 | file if all you have is the second file and the diff). | 
|---|
| 1108 |  | 
|---|
| 1109 | If the file `d' contains the output of `diff -e old new', then the | 
|---|
| 1110 | command `(cat d && echo w) | ed - old' edits `old' to make it a copy of | 
|---|
| 1111 | `new'.  More generally, if `d1', `d2', ..., `dN' contain the outputs of | 
|---|
| 1112 | `diff -e old new1', `diff -e new1 new2', ..., `diff -e newN-1 newN', | 
|---|
| 1113 | respectively, then the command `(cat d1 d2 ... dN && echo w) | ed - | 
|---|
| 1114 | old' edits `old' to make it a copy of `newN'. | 
|---|
| 1115 |  | 
|---|
| 1116 | * Menu: | 
|---|
| 1117 |  | 
|---|
| 1118 | * Detailed ed:: A detailed description of `ed' format. | 
|---|
| 1119 | * Example ed::  A sample `ed' script. | 
|---|
| 1120 |  | 
|---|
| 1121 |  | 
|---|
| 1122 | File: diff.info,  Node: Detailed ed,  Next: Example ed,  Up: ed Scripts | 
|---|
| 1123 |  | 
|---|
| 1124 | Detailed Description of `ed' Format | 
|---|
| 1125 | ................................... | 
|---|
| 1126 |  | 
|---|
| 1127 | The `ed' output format consists of one or more hunks of differences. | 
|---|
| 1128 | The changes closest to the ends of the files come first so that | 
|---|
| 1129 | commands that change the number of lines do not affect how `ed' | 
|---|
| 1130 | interprets line numbers in succeeding commands.  `ed' format hunks look | 
|---|
| 1131 | like this: | 
|---|
| 1132 |  | 
|---|
| 1133 | CHANGE-COMMAND | 
|---|
| 1134 | TO-FILE-LINE | 
|---|
| 1135 | TO-FILE-LINE... | 
|---|
| 1136 | . | 
|---|
| 1137 |  | 
|---|
| 1138 | Because `ed' uses a single period on a line to indicate the end of | 
|---|
| 1139 | input, GNU `diff' protects lines of changes that contain a single | 
|---|
| 1140 | period on a line by writing two periods instead, then writing a | 
|---|
| 1141 | subsequent `ed' command to change the two periods into one.  The `ed' | 
|---|
| 1142 | format cannot represent an incomplete line, so if the second file ends | 
|---|
| 1143 | in a changed incomplete line, `diff' reports an error and then pretends | 
|---|
| 1144 | that a newline was appended. | 
|---|
| 1145 |  | 
|---|
| 1146 | There are three types of change commands.  Each consists of a line | 
|---|
| 1147 | number or comma-separated range of lines in the first file and a single | 
|---|
| 1148 | character indicating the kind of change to make.  All line numbers are | 
|---|
| 1149 | the original line numbers in the file.  The types of change commands | 
|---|
| 1150 | are: | 
|---|
| 1151 |  | 
|---|
| 1152 | `La' | 
|---|
| 1153 | Add text from the second file after line L in the first file.  For | 
|---|
| 1154 | example, `8a' means to add the following lines after line 8 of file | 
|---|
| 1155 | 1. | 
|---|
| 1156 |  | 
|---|
| 1157 | `Rc' | 
|---|
| 1158 | Replace the lines in range R in the first file with the following | 
|---|
| 1159 | lines.  Like a combined add and delete, but more compact.  For | 
|---|
| 1160 | example, `5,7c' means change lines 5-7 of file 1 to read as the | 
|---|
| 1161 | text file 2. | 
|---|
| 1162 |  | 
|---|
| 1163 | `Rd' | 
|---|
| 1164 | Delete the lines in range R from the first file.  For example, | 
|---|
| 1165 | `5,7d' means delete lines 5-7 of file 1. | 
|---|
| 1166 |  | 
|---|
| 1167 |  | 
|---|
| 1168 | File: diff.info,  Node: Example ed,  Prev: Detailed ed,  Up: ed Scripts | 
|---|
| 1169 |  | 
|---|
| 1170 | Example `ed' Script | 
|---|
| 1171 | ................... | 
|---|
| 1172 |  | 
|---|
| 1173 | Here is the output of `diff -e lao tzu' (*note Sample diff Input::, | 
|---|
| 1174 | for the complete contents of the two files): | 
|---|
| 1175 |  | 
|---|
| 1176 | 11a | 
|---|
| 1177 | They both may be called deep and profound. | 
|---|
| 1178 | Deeper and more profound, | 
|---|
| 1179 | The door of all subtleties! | 
|---|
| 1180 | . | 
|---|
| 1181 | 4c | 
|---|
| 1182 | The named is the mother of all things. | 
|---|
| 1183 |  | 
|---|
| 1184 | . | 
|---|
| 1185 | 1,2d | 
|---|
| 1186 |  | 
|---|
| 1187 |  | 
|---|
| 1188 | File: diff.info,  Node: Forward ed,  Next: RCS,  Prev: ed Scripts,  Up: Scripts | 
|---|
| 1189 |  | 
|---|
| 1190 | Forward `ed' Scripts | 
|---|
| 1191 | -------------------- | 
|---|
| 1192 |  | 
|---|
| 1193 | `diff' can produce output that is like an `ed' script, but with | 
|---|
| 1194 | hunks in forward (front to back) order.  The format of the commands is | 
|---|
| 1195 | also changed slightly: command characters precede the lines they | 
|---|
| 1196 | modify, spaces separate line numbers in ranges, and no attempt is made | 
|---|
| 1197 | to disambiguate hunk lines consisting of a single period.  Like `ed' | 
|---|
| 1198 | format, forward `ed' format cannot represent incomplete lines. | 
|---|
| 1199 |  | 
|---|
| 1200 | Forward `ed' format is not very useful, because neither `ed' nor | 
|---|
| 1201 | `patch' can apply diffs in this format.  It exists mainly for | 
|---|
| 1202 | compatibility with older versions of `diff'.  Use the `-f' or | 
|---|
| 1203 | `--forward-ed' option to select it. | 
|---|
| 1204 |  | 
|---|
| 1205 |  | 
|---|
| 1206 | File: diff.info,  Node: RCS,  Prev: Forward ed,  Up: Scripts | 
|---|
| 1207 |  | 
|---|
| 1208 | RCS Scripts | 
|---|
| 1209 | ----------- | 
|---|
| 1210 |  | 
|---|
| 1211 | The RCS output format is designed specifically for use by the | 
|---|
| 1212 | Revision Control System, which is a set of free programs used for | 
|---|
| 1213 | organizing different versions and systems of files.  Use the `-n' or | 
|---|
| 1214 | `--rcs' option to select this output format.  It is like the forward | 
|---|
| 1215 | `ed' format (*note Forward ed::), but it can represent arbitrary | 
|---|
| 1216 | changes to the contents of a file because it avoids the forward `ed' | 
|---|
| 1217 | format's problems with lines consisting of a single period and with | 
|---|
| 1218 | incomplete lines.  Instead of ending text sections with a line | 
|---|
| 1219 | consisting of a single period, each command specifies the number of | 
|---|
| 1220 | lines it affects; a combination of the `a' and `d' commands are used | 
|---|
| 1221 | instead of `c'.  Also, if the second file ends in a changed incomplete | 
|---|
| 1222 | line, then the output also ends in an incomplete line. | 
|---|
| 1223 |  | 
|---|
| 1224 | Here is the output of `diff -n lao tzu' (*note Sample diff Input::, | 
|---|
| 1225 | for the complete contents of the two files): | 
|---|
| 1226 |  | 
|---|
| 1227 | d1 2 | 
|---|
| 1228 | d4 1 | 
|---|
| 1229 | a4 2 | 
|---|
| 1230 | The named is the mother of all things. | 
|---|
| 1231 |  | 
|---|
| 1232 | a11 3 | 
|---|
| 1233 | They both may be called deep and profound. | 
|---|
| 1234 | Deeper and more profound, | 
|---|
| 1235 | The door of all subtleties! | 
|---|
| 1236 |  | 
|---|
| 1237 |  | 
|---|
| 1238 | File: diff.info,  Node: If-then-else,  Prev: Scripts,  Up: Output Formats | 
|---|
| 1239 |  | 
|---|
| 1240 | Merging Files with If-then-else | 
|---|
| 1241 | =============================== | 
|---|
| 1242 |  | 
|---|
| 1243 | You can use `diff' to merge two files of C source code.  The output | 
|---|
| 1244 | of `diff' in this format contains all the lines of both files.  Lines | 
|---|
| 1245 | common to both files are output just once; the differing parts are | 
|---|
| 1246 | separated by the C preprocessor directives `#ifdef NAME' or `#ifndef | 
|---|
| 1247 | NAME', `#else', and `#endif'.  When compiling the output, you select | 
|---|
| 1248 | which version to use by either defining or leaving undefined the macro | 
|---|
| 1249 | NAME. | 
|---|
| 1250 |  | 
|---|
| 1251 | To merge two files, use `diff' with the `-D NAME' or `--ifdef=NAME' | 
|---|
| 1252 | option.  The argument NAME is the C preprocessor identifier to use in | 
|---|
| 1253 | the `#ifdef' and `#ifndef' directives. | 
|---|
| 1254 |  | 
|---|
| 1255 | For example, if you change an instance of `wait (&s)' to `waitpid | 
|---|
| 1256 | (-1, &s, 0)' and then merge the old and new files with the | 
|---|
| 1257 | `--ifdef=HAVE_WAITPID' option, then the affected part of your code | 
|---|
| 1258 | might look like this: | 
|---|
| 1259 |  | 
|---|
| 1260 | do { | 
|---|
| 1261 | #ifndef HAVE_WAITPID | 
|---|
| 1262 | if ((w = wait (&s)) < 0  &&  errno != EINTR) | 
|---|
| 1263 | #else /* HAVE_WAITPID */ | 
|---|
| 1264 | if ((w = waitpid (-1, &s, 0)) < 0  &&  errno != EINTR) | 
|---|
| 1265 | #endif /* HAVE_WAITPID */ | 
|---|
| 1266 | return w; | 
|---|
| 1267 | } while (w != child); | 
|---|
| 1268 |  | 
|---|
| 1269 | You can specify formats for languages other than C by using line | 
|---|
| 1270 | group formats and line formats, as described in the next sections. | 
|---|
| 1271 |  | 
|---|
| 1272 | * Menu: | 
|---|
| 1273 |  | 
|---|
| 1274 | * Line Group Formats::    Formats for general if-then-else line groups. | 
|---|
| 1275 | * Line Formats::          Formats for each line in a line group. | 
|---|
| 1276 | * Detailed If-then-else:: A detailed description of if-then-else format. | 
|---|
| 1277 | * Example If-then-else::  Sample if-then-else format output. | 
|---|
| 1278 |  | 
|---|
| 1279 |  | 
|---|
| 1280 | File: diff.info,  Node: Line Group Formats,  Next: Line Formats,  Up: If-then-else | 
|---|
| 1281 |  | 
|---|
| 1282 | Line Group Formats | 
|---|
| 1283 | ------------------ | 
|---|
| 1284 |  | 
|---|
| 1285 | Line group formats let you specify formats suitable for many | 
|---|
| 1286 | applications that allow if-then-else input, including programming | 
|---|
| 1287 | languages and text formatting languages.  A line group format specifies | 
|---|
| 1288 | the output format for a contiguous group of similar lines. | 
|---|
| 1289 |  | 
|---|
| 1290 | For example, the following command compares the TeX files `old' and | 
|---|
| 1291 | `new', and outputs a merged file in which old regions are surrounded by | 
|---|
| 1292 | `\begin{em}'-`\end{em}' lines, and new regions are surrounded by | 
|---|
| 1293 | `\begin{bf}'-`\end{bf}' lines. | 
|---|
| 1294 |  | 
|---|
| 1295 | diff \ | 
|---|
| 1296 | --old-group-format='\begin{em} | 
|---|
| 1297 | %<\end{em} | 
|---|
| 1298 | ' \ | 
|---|
| 1299 | --new-group-format='\begin{bf} | 
|---|
| 1300 | %>\end{bf} | 
|---|
| 1301 | ' \ | 
|---|
| 1302 | old new | 
|---|
| 1303 |  | 
|---|
| 1304 | The following command is equivalent to the above example, but it is a | 
|---|
| 1305 | little more verbose, because it spells out the default line group | 
|---|
| 1306 | formats. | 
|---|
| 1307 |  | 
|---|
| 1308 | diff \ | 
|---|
| 1309 | --old-group-format='\begin{em} | 
|---|
| 1310 | %<\end{em} | 
|---|
| 1311 | ' \ | 
|---|
| 1312 | --new-group-format='\begin{bf} | 
|---|
| 1313 | %>\end{bf} | 
|---|
| 1314 | ' \ | 
|---|
| 1315 | --unchanged-group-format='%=' \ | 
|---|
| 1316 | --changed-group-format='\begin{em} | 
|---|
| 1317 | %<\end{em} | 
|---|
| 1318 | \begin{bf} | 
|---|
| 1319 | %>\end{bf} | 
|---|
| 1320 | ' \ | 
|---|
| 1321 | old new | 
|---|
| 1322 |  | 
|---|
| 1323 | Here is a more advanced example, which outputs a diff listing with | 
|---|
| 1324 | headers containing line numbers in a "plain English" style. | 
|---|
| 1325 |  | 
|---|
| 1326 | diff \ | 
|---|
| 1327 | --unchanged-group-format='' \ | 
|---|
| 1328 | --old-group-format='-------- %dn line%(n=1?:s) deleted at %df: | 
|---|
| 1329 | %<' \ | 
|---|
| 1330 | --new-group-format='-------- %dN line%(N=1?:s) added after %de: | 
|---|
| 1331 | %>' \ | 
|---|
| 1332 | --changed-group-format='-------- %dn line%(n=1?:s) changed at %df: | 
|---|
| 1333 | %<-------- to: | 
|---|
| 1334 | %>' \ | 
|---|
| 1335 | old new | 
|---|
| 1336 |  | 
|---|
| 1337 | To specify a line group format, use `diff' with one of the options | 
|---|
| 1338 | listed below.  You can specify up to four line group formats, one for | 
|---|
| 1339 | each kind of line group.  You should quote FORMAT, because it typically | 
|---|
| 1340 | contains shell metacharacters. | 
|---|
| 1341 |  | 
|---|
| 1342 | `--old-group-format=FORMAT' | 
|---|
| 1343 | These line groups are hunks containing only lines from the first | 
|---|
| 1344 | file.  The default old group format is the same as the changed | 
|---|
| 1345 | group format if it is specified; otherwise it is a format that | 
|---|
| 1346 | outputs the line group as-is. | 
|---|
| 1347 |  | 
|---|
| 1348 | `--new-group-format=FORMAT' | 
|---|
| 1349 | These line groups are hunks containing only lines from the second | 
|---|
| 1350 | file.  The default new group format is same as the changed group | 
|---|
| 1351 | format if it is specified; otherwise it is a format that outputs | 
|---|
| 1352 | the line group as-is. | 
|---|
| 1353 |  | 
|---|
| 1354 | `--changed-group-format=FORMAT' | 
|---|
| 1355 | These line groups are hunks containing lines from both files.  The | 
|---|
| 1356 | default changed group format is the concatenation of the old and | 
|---|
| 1357 | new group formats. | 
|---|
| 1358 |  | 
|---|
| 1359 | `--unchanged-group-format=FORMAT' | 
|---|
| 1360 | These line groups contain lines common to both files.  The default | 
|---|
| 1361 | unchanged group format is a format that outputs the line group | 
|---|
| 1362 | as-is. | 
|---|
| 1363 |  | 
|---|
| 1364 | In a line group format, ordinary characters represent themselves; | 
|---|
| 1365 | conversion specifications start with `%' and have one of the following | 
|---|
| 1366 | forms. | 
|---|
| 1367 |  | 
|---|
| 1368 | `%<' | 
|---|
| 1369 | stands for the lines from the first file, including the trailing | 
|---|
| 1370 | newline.  Each line is formatted according to the old line format | 
|---|
| 1371 | (*note Line Formats::). | 
|---|
| 1372 |  | 
|---|
| 1373 | `%>' | 
|---|
| 1374 | stands for the lines from the second file, including the trailing | 
|---|
| 1375 | newline.  Each line is formatted according to the new line format. | 
|---|
| 1376 |  | 
|---|
| 1377 | `%=' | 
|---|
| 1378 | stands for the lines common to both files, including the trailing | 
|---|
| 1379 | newline.  Each line is formatted according to the unchanged line | 
|---|
| 1380 | format. | 
|---|
| 1381 |  | 
|---|
| 1382 | `%%' | 
|---|
| 1383 | stands for `%'. | 
|---|
| 1384 |  | 
|---|
| 1385 | `%c'C'' | 
|---|
| 1386 | where C is a single character, stands for C.  C may not be a | 
|---|
| 1387 | backslash or an apostrophe.  For example, `%c':'' stands for a | 
|---|
| 1388 | colon, even inside the then-part of an if-then-else format, which | 
|---|
| 1389 | a colon would normally terminate. | 
|---|
| 1390 |  | 
|---|
| 1391 | `%c'\O'' | 
|---|
| 1392 | where O is a string of 1, 2, or 3 octal digits, stands for the | 
|---|
| 1393 | character with octal code O.  For example, `%c'\0'' stands for a | 
|---|
| 1394 | null character. | 
|---|
| 1395 |  | 
|---|
| 1396 | `FN' | 
|---|
| 1397 | where F is a `printf' conversion specification and N is one of the | 
|---|
| 1398 | following letters, stands for N's value formatted with F. | 
|---|
| 1399 |  | 
|---|
| 1400 | `e' | 
|---|
| 1401 | The line number of the line just before the group in the old | 
|---|
| 1402 | file. | 
|---|
| 1403 |  | 
|---|
| 1404 | `f' | 
|---|
| 1405 | The line number of the first line in the group in the old | 
|---|
| 1406 | file; equals E + 1. | 
|---|
| 1407 |  | 
|---|
| 1408 | `l' | 
|---|
| 1409 | The line number of the last line in the group in the old file. | 
|---|
| 1410 |  | 
|---|
| 1411 | `m' | 
|---|
| 1412 | The line number of the line just after the group in the old | 
|---|
| 1413 | file; equals L + 1. | 
|---|
| 1414 |  | 
|---|
| 1415 | `n' | 
|---|
| 1416 | The number of lines in the group in the old file; equals L - | 
|---|
| 1417 | F + 1. | 
|---|
| 1418 |  | 
|---|
| 1419 | `E, F, L, M, N' | 
|---|
| 1420 | Likewise, for lines in the new file. | 
|---|
| 1421 |  | 
|---|
| 1422 | The `printf' conversion specification can be `%d', `%o', `%x', or | 
|---|
| 1423 | `%X', specifying decimal, octal, lower case hexadecimal, or upper | 
|---|
| 1424 | case hexadecimal output respectively.  After the `%' the following | 
|---|
| 1425 | options can appear in sequence: a series of zero or more flags; an | 
|---|
| 1426 | integer specifying the minimum field width; and a period followed | 
|---|
| 1427 | by an optional integer specifying the minimum number of digits. | 
|---|
| 1428 | The flags are `-' for left-justification, `'' for separating the | 
|---|
| 1429 | digit into groups as specified by the `LC_NUMERIC' locale category, | 
|---|
| 1430 | and `0' for padding with zeros instead of spaces.  For example, | 
|---|
| 1431 | `%5dN' prints the number of new lines in the group in a field of | 
|---|
| 1432 | width 5 characters, using the `printf' format `"%5d"'. | 
|---|
| 1433 |  | 
|---|
| 1434 | `(A=B?T:E)' | 
|---|
| 1435 | If A equals B then T else E.  A and B are each either a decimal | 
|---|
| 1436 | constant or a single letter interpreted as above.  This format | 
|---|
| 1437 | spec is equivalent to T if A's value equals B's; otherwise it is | 
|---|
| 1438 | equivalent to E. | 
|---|
| 1439 |  | 
|---|
| 1440 | For example, `%(N=0?no:%dN) line%(N=1?:s)' is equivalent to `no | 
|---|
| 1441 | lines' if N (the number of lines in the group in the the new file) | 
|---|
| 1442 | is 0, to `1 line' if N is 1, and to `%dN lines' otherwise. | 
|---|
| 1443 |  | 
|---|
| 1444 |  | 
|---|
| 1445 | File: diff.info,  Node: Line Formats,  Next: Detailed If-then-else,  Prev: Line Group Formats,  Up: If-then-else | 
|---|
| 1446 |  | 
|---|
| 1447 | Line Formats | 
|---|
| 1448 | ------------ | 
|---|
| 1449 |  | 
|---|
| 1450 | Line formats control how each line taken from an input file is | 
|---|
| 1451 | output as part of a line group in if-then-else format. | 
|---|
| 1452 |  | 
|---|
| 1453 | For example, the following command outputs text with a one-character | 
|---|
| 1454 | change indicator to the left of the text.  The first character of output | 
|---|
| 1455 | is `-' for deleted lines, `|' for added lines, and a space for | 
|---|
| 1456 | unchanged lines.  The formats contain newline characters where newlines | 
|---|
| 1457 | are desired on output. | 
|---|
| 1458 |  | 
|---|
| 1459 | diff \ | 
|---|
| 1460 | --old-line-format='-%l | 
|---|
| 1461 | ' \ | 
|---|
| 1462 | --new-line-format='|%l | 
|---|
| 1463 | ' \ | 
|---|
| 1464 | --unchanged-line-format=' %l | 
|---|
| 1465 | ' \ | 
|---|
| 1466 | old new | 
|---|
| 1467 |  | 
|---|
| 1468 | To specify a line format, use one of the following options.  You | 
|---|
| 1469 | should quote FORMAT, since it often contains shell metacharacters. | 
|---|
| 1470 |  | 
|---|
| 1471 | `--old-line-format=FORMAT' | 
|---|
| 1472 | formats lines just from the first file. | 
|---|
| 1473 |  | 
|---|
| 1474 | `--new-line-format=FORMAT' | 
|---|
| 1475 | formats lines just from the second file. | 
|---|
| 1476 |  | 
|---|
| 1477 | `--unchanged-line-format=FORMAT' | 
|---|
| 1478 | formats lines common to both files. | 
|---|
| 1479 |  | 
|---|
| 1480 | `--line-format=FORMAT' | 
|---|
| 1481 | formats all lines; in effect, it sets all three above options | 
|---|
| 1482 | simultaneously. | 
|---|
| 1483 |  | 
|---|
| 1484 | In a line format, ordinary characters represent themselves; | 
|---|
| 1485 | conversion specifications start with `%' and have one of the following | 
|---|
| 1486 | forms. | 
|---|
| 1487 |  | 
|---|
| 1488 | `%l' | 
|---|
| 1489 | stands for the contents of the line, not counting its trailing | 
|---|
| 1490 | newline (if any).  This format ignores whether the line is | 
|---|
| 1491 | incomplete; *Note Incomplete Lines::. | 
|---|
| 1492 |  | 
|---|
| 1493 | `%L' | 
|---|
| 1494 | stands for the contents of the line, including its trailing newline | 
|---|
| 1495 | (if any).  If a line is incomplete, this format preserves its | 
|---|
| 1496 | incompleteness. | 
|---|
| 1497 |  | 
|---|
| 1498 | `%%' | 
|---|
| 1499 | stands for `%'. | 
|---|
| 1500 |  | 
|---|
| 1501 | `%c'C'' | 
|---|
| 1502 | where C is a single character, stands for C.  C may not be a | 
|---|
| 1503 | backslash or an apostrophe.  For example, `%c':'' stands for a | 
|---|
| 1504 | colon. | 
|---|
| 1505 |  | 
|---|
| 1506 | `%c'\O'' | 
|---|
| 1507 | where O is a string of 1, 2, or 3 octal digits, stands for the | 
|---|
| 1508 | character with octal code O.  For example, `%c'\0'' stands for a | 
|---|
| 1509 | null character. | 
|---|
| 1510 |  | 
|---|
| 1511 | `Fn' | 
|---|
| 1512 | where F is a `printf' conversion specification, stands for the | 
|---|
| 1513 | line number formatted with F.  For example, `%.5dn' prints the | 
|---|
| 1514 | line number using the `printf' format `"%.5d"'.  *Note Line Group | 
|---|
| 1515 | Formats::, for more about printf conversion specifications. | 
|---|
| 1516 |  | 
|---|
| 1517 | The default line format is `%l' followed by a newline character. | 
|---|
| 1518 |  | 
|---|
| 1519 | If the input contains tab characters and it is important that they | 
|---|
| 1520 | line up on output, you should ensure that `%l' or `%L' in a line format | 
|---|
| 1521 | is just after a tab stop (e.g. by preceding `%l' or `%L' with a tab | 
|---|
| 1522 | character), or you should use the `-t' or `--expand-tabs' option. | 
|---|
| 1523 |  | 
|---|
| 1524 | Taken together, the line and line group formats let you specify many | 
|---|
| 1525 | different formats.  For example, the following command uses a format | 
|---|
| 1526 | similar to normal `diff' format.  You can tailor this command to get | 
|---|
| 1527 | fine control over `diff' output. | 
|---|
| 1528 |  | 
|---|
| 1529 | diff \ | 
|---|
| 1530 | --old-line-format='< %l | 
|---|
| 1531 | ' \ | 
|---|
| 1532 | --new-line-format='> %l | 
|---|
| 1533 | ' \ | 
|---|
| 1534 | --old-group-format='%df%(f=l?:,%dl)d%dE | 
|---|
| 1535 | %<' \ | 
|---|
| 1536 | --new-group-format='%dea%dF%(F=L?:,%dL) | 
|---|
| 1537 | %>' \ | 
|---|
| 1538 | --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) | 
|---|
| 1539 | %<--- | 
|---|
| 1540 | %>' \ | 
|---|
| 1541 | --unchanged-group-format='' \ | 
|---|
| 1542 | old new | 
|---|
| 1543 |  | 
|---|
| 1544 |  | 
|---|
| 1545 | File: diff.info,  Node: Detailed If-then-else,  Next: Example If-then-else,  Prev: Line Formats,  Up: If-then-else | 
|---|
| 1546 |  | 
|---|
| 1547 | Detailed Description of If-then-else Format | 
|---|
| 1548 | ------------------------------------------- | 
|---|
| 1549 |  | 
|---|
| 1550 | For lines common to both files, `diff' uses the unchanged line group | 
|---|
| 1551 | format.  For each hunk of differences in the merged output format, if | 
|---|
| 1552 | the hunk contains only lines from the first file, `diff' uses the old | 
|---|
| 1553 | line group format; if the hunk contains only lines from the second | 
|---|
| 1554 | file, `diff' uses the new group format; otherwise, `diff' uses the | 
|---|
| 1555 | changed group format. | 
|---|
| 1556 |  | 
|---|
| 1557 | The old, new, and unchanged line formats specify the output format of | 
|---|
| 1558 | lines from the first file, lines from the second file, and lines common | 
|---|
| 1559 | to both files, respectively. | 
|---|
| 1560 |  | 
|---|
| 1561 | The option `--ifdef=NAME' is equivalent to the following sequence of | 
|---|
| 1562 | options using shell syntax: | 
|---|
| 1563 |  | 
|---|
| 1564 | --old-group-format='#ifndef NAME | 
|---|
| 1565 | %<#endif /* ! NAME */ | 
|---|
| 1566 | ' \ | 
|---|
| 1567 | --new-group-format='#ifdef NAME | 
|---|
| 1568 | %>#endif /* NAME */ | 
|---|
| 1569 | ' \ | 
|---|
| 1570 | --unchanged-group-format='%=' \ | 
|---|
| 1571 | --changed-group-format='#ifndef NAME | 
|---|
| 1572 | %<#else /* NAME */ | 
|---|
| 1573 | %>#endif /* NAME */ | 
|---|
| 1574 | ' | 
|---|
| 1575 |  | 
|---|
| 1576 | You should carefully check the `diff' output for proper nesting. | 
|---|
| 1577 | For example, when using the `-D NAME' or `--ifdef=NAME' option, you | 
|---|
| 1578 | should check that if the differing lines contain any of the C | 
|---|
| 1579 | preprocessor directives `#ifdef', `#ifndef', `#else', `#elif', or | 
|---|
| 1580 | `#endif', they are nested properly and match.  If they don't, you must | 
|---|
| 1581 | make corrections manually.  It is a good idea to carefully check the | 
|---|
| 1582 | resulting code anyway to make sure that it really does what you want it | 
|---|
| 1583 | to; depending on how the input files were produced, the output might | 
|---|
| 1584 | contain duplicate or otherwise incorrect code. | 
|---|
| 1585 |  | 
|---|
| 1586 | The `patch' `-D NAME' option behaves like the `diff' `-D NAME' | 
|---|
| 1587 | option, except it operates on a file and a diff to produce a merged | 
|---|
| 1588 | file; *Note patch Options::. | 
|---|
| 1589 |  | 
|---|
| 1590 |  | 
|---|
| 1591 | File: diff.info,  Node: Example If-then-else,  Prev: Detailed If-then-else,  Up: If-then-else | 
|---|
| 1592 |  | 
|---|
| 1593 | An Example of If-then-else Format | 
|---|
| 1594 | --------------------------------- | 
|---|
| 1595 |  | 
|---|
| 1596 | Here is the output of `diff -DTWO lao tzu' (*note Sample diff | 
|---|
| 1597 | Input::, for the complete contents of the two files): | 
|---|
| 1598 |  | 
|---|
| 1599 | #ifndef TWO | 
|---|
| 1600 | The Way that can be told of is not the eternal Way; | 
|---|
| 1601 | The name that can be named is not the eternal name. | 
|---|
| 1602 | #endif /* ! TWO */ | 
|---|
| 1603 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 1604 | #ifndef TWO | 
|---|
| 1605 | The Named is the mother of all things. | 
|---|
| 1606 | #else /* TWO */ | 
|---|
| 1607 | The named is the mother of all things. | 
|---|
| 1608 |  | 
|---|
| 1609 | #endif /* TWO */ | 
|---|
| 1610 | Therefore let there always be non-being, | 
|---|
| 1611 | so we may see their subtlety, | 
|---|
| 1612 | And let there always be being, | 
|---|
| 1613 | so we may see their outcome. | 
|---|
| 1614 | The two are the same, | 
|---|
| 1615 | But after they are produced, | 
|---|
| 1616 | they have different names. | 
|---|
| 1617 | #ifdef TWO | 
|---|
| 1618 | They both may be called deep and profound. | 
|---|
| 1619 | Deeper and more profound, | 
|---|
| 1620 | The door of all subtleties! | 
|---|
| 1621 | #endif /* TWO */ | 
|---|
| 1622 |  | 
|---|
| 1623 |  | 
|---|
| 1624 | File: diff.info,  Node: Incomplete Lines,  Next: Comparing Directories,  Prev: Output Formats,  Up: Top | 
|---|
| 1625 |  | 
|---|
| 1626 | Incomplete Lines | 
|---|
| 1627 | **************** | 
|---|
| 1628 |  | 
|---|
| 1629 | When an input file ends in a non-newline character, its last line is | 
|---|
| 1630 | called an "incomplete line" because its last character is not a | 
|---|
| 1631 | newline.  All other lines are called "full lines" and end in a newline | 
|---|
| 1632 | character.  Incomplete lines do not match full lines unless differences | 
|---|
| 1633 | in white space are ignored (*note White Space::). | 
|---|
| 1634 |  | 
|---|
| 1635 | An incomplete line is normally distinguished on output from a full | 
|---|
| 1636 | line by a following line that starts with `\'.  However, the RCS format | 
|---|
| 1637 | (*note RCS::) outputs the incomplete line as-is, without any trailing | 
|---|
| 1638 | newline or following line.  The side by side format normally represents | 
|---|
| 1639 | incomplete lines as-is, but in some cases uses a `\' or `/' gutter | 
|---|
| 1640 | marker; *Note Side by Side::.  The if-then-else line format preserves a | 
|---|
| 1641 | line's incompleteness with `%L', and discards the newline with `%l'; | 
|---|
| 1642 | *Note Line Formats::.  Finally, with the `ed' and forward `ed' output | 
|---|
| 1643 | formats (*note Output Formats::) `diff' cannot represent an incomplete | 
|---|
| 1644 | line, so it pretends there was a newline and reports an error. | 
|---|
| 1645 |  | 
|---|
| 1646 | For example, suppose `F' and `G' are one-byte files that contain | 
|---|
| 1647 | just `f' and `g', respectively.  Then `diff F G' outputs | 
|---|
| 1648 |  | 
|---|
| 1649 | 1c1 | 
|---|
| 1650 | < f | 
|---|
| 1651 | \ No newline at end of file | 
|---|
| 1652 | --- | 
|---|
| 1653 | > g | 
|---|
| 1654 | \ No newline at end of file | 
|---|
| 1655 |  | 
|---|
| 1656 | (The exact message may differ in non-English locales.)  `diff -n F G' | 
|---|
| 1657 | outputs the following without a trailing newline: | 
|---|
| 1658 |  | 
|---|
| 1659 | d1 1 | 
|---|
| 1660 | a1 1 | 
|---|
| 1661 | g | 
|---|
| 1662 |  | 
|---|
| 1663 | `diff -e F G' reports two errors and outputs the following: | 
|---|
| 1664 |  | 
|---|
| 1665 | 1c | 
|---|
| 1666 | g | 
|---|
| 1667 | . | 
|---|
| 1668 |  | 
|---|
| 1669 |  | 
|---|
| 1670 | File: diff.info,  Node: Comparing Directories,  Next: Adjusting Output,  Prev: Incomplete Lines,  Up: Top | 
|---|
| 1671 |  | 
|---|
| 1672 | Comparing Directories | 
|---|
| 1673 | ********************* | 
|---|
| 1674 |  | 
|---|
| 1675 | You can use `diff' to compare some or all of the files in two | 
|---|
| 1676 | directory trees.  When both file name arguments to `diff' are | 
|---|
| 1677 | directories, it compares each file that is contained in both | 
|---|
| 1678 | directories, examining file names in alphabetical order as specified by | 
|---|
| 1679 | the `LC_COLLATE' locale category.  Normally `diff' is silent about | 
|---|
| 1680 | pairs of files that contain no differences, but if you use the `-s' or | 
|---|
| 1681 | `--report-identical-files' option, it reports pairs of identical files. | 
|---|
| 1682 | Normally `diff' reports subdirectories common to both directories | 
|---|
| 1683 | without comparing subdirectories' files, but if you use the `-r' or | 
|---|
| 1684 | `--recursive' option, it compares every corresponding pair of files in | 
|---|
| 1685 | the directory trees, as many levels deep as they go. | 
|---|
| 1686 |  | 
|---|
| 1687 | For file names that are in only one of the directories, `diff' | 
|---|
| 1688 | normally does not show the contents of the file that exists; it reports | 
|---|
| 1689 | only that the file exists in that directory and not in the other.  You | 
|---|
| 1690 | can make `diff' act as though the file existed but was empty in the | 
|---|
| 1691 | other directory, so that it outputs the entire contents of the file that | 
|---|
| 1692 | actually exists.  (It is output as either an insertion or a deletion, | 
|---|
| 1693 | depending on whether it is in the first or the second directory given.) | 
|---|
| 1694 | To do this, use the `-N' or `--new-file' option. | 
|---|
| 1695 |  | 
|---|
| 1696 | If the older directory contains one or more large files that are not | 
|---|
| 1697 | in the newer directory, you can make the patch smaller by using the | 
|---|
| 1698 | `--unidirectional-new-file' option instead of `-N'.  This option is | 
|---|
| 1699 | like `-N' except that it only inserts the contents of files that appear | 
|---|
| 1700 | in the second directory but not the first (that is, files that were | 
|---|
| 1701 | added).  At the top of the patch, write instructions for the user | 
|---|
| 1702 | applying the patch to remove the files that were deleted before | 
|---|
| 1703 | applying the patch.  *Note Making Patches::, for more discussion of | 
|---|
| 1704 | making patches for distribution. | 
|---|
| 1705 |  | 
|---|
| 1706 | To ignore some files while comparing directories, use the `-x | 
|---|
| 1707 | PATTERN' or `--exclude=PATTERN' option.  This option ignores any files | 
|---|
| 1708 | or subdirectories whose base names match the shell pattern PATTERN. | 
|---|
| 1709 | Unlike in the shell, a period at the start of the base of a file name | 
|---|
| 1710 | matches a wildcard at the start of a pattern.  You should enclose | 
|---|
| 1711 | PATTERN in quotes so that the shell does not expand it.  For example, | 
|---|
| 1712 | the option `-x '*.[ao]'' ignores any file whose name ends with `.a' or | 
|---|
| 1713 | `.o'. | 
|---|
| 1714 |  | 
|---|
| 1715 | This option accumulates if you specify it more than once.  For | 
|---|
| 1716 | example, using the options `-x 'RCS' -x '*,v'' ignores any file or | 
|---|
| 1717 | subdirectory whose base name is `RCS' or ends with `,v'. | 
|---|
| 1718 |  | 
|---|
| 1719 | If you need to give this option many times, you can instead put the | 
|---|
| 1720 | patterns in a file, one pattern per line, and use the `-X FILE' or | 
|---|
| 1721 | `--exclude-from=FILE' option. | 
|---|
| 1722 |  | 
|---|
| 1723 | If you have been comparing two directories and stopped partway | 
|---|
| 1724 | through, later you might want to continue where you left off.  You can | 
|---|
| 1725 | do this by using the `-S FILE' or `--starting-file=FILE' option.  This | 
|---|
| 1726 | compares only the file FILE and all alphabetically later files in the | 
|---|
| 1727 | topmost directory level. | 
|---|
| 1728 |  | 
|---|
| 1729 | If two directories differ only in that file names are lower case in | 
|---|
| 1730 | one directory and upper case in the upper, `diff' normally reports many | 
|---|
| 1731 | differences because it compares file names in a case sensitive way. | 
|---|
| 1732 | With the `--ignore-file-name-case' option, `diff' ignores case | 
|---|
| 1733 | differences in file names, so that for example the contents of the file | 
|---|
| 1734 | `Tao' in one directory are compared to the contents of the file `TAO' | 
|---|
| 1735 | in the other.  The `--no-ignore-file-name-case' option cancels the | 
|---|
| 1736 | effect of the `--ignore-file-name-case' option, reverting to the default | 
|---|
| 1737 | behavior. | 
|---|
| 1738 |  | 
|---|
| 1739 | If an `-x PATTERN', `--exclude=PATTERN', `-X FILE', or | 
|---|
| 1740 | `--exclude-from=FILE' option is specified while the | 
|---|
| 1741 | `--ignore-file-name-case' option is in effect, case is ignored when | 
|---|
| 1742 | excluding file names matching the specified patterns. | 
|---|
| 1743 |  | 
|---|
| 1744 |  | 
|---|
| 1745 | File: diff.info,  Node: Adjusting Output,  Next: diff Performance,  Prev: Comparing Directories,  Up: Top | 
|---|
| 1746 |  | 
|---|
| 1747 | Making `diff' Output Prettier | 
|---|
| 1748 | ***************************** | 
|---|
| 1749 |  | 
|---|
| 1750 | `diff' provides several ways to adjust the appearance of its output. | 
|---|
| 1751 | These adjustments can be applied to any output format. | 
|---|
| 1752 |  | 
|---|
| 1753 | * Menu: | 
|---|
| 1754 |  | 
|---|
| 1755 | * Tabs::       Preserving the alignment of tab stops. | 
|---|
| 1756 | * Pagination:: Page numbering and time-stamping `diff' output. | 
|---|
| 1757 |  | 
|---|
| 1758 |  | 
|---|
| 1759 | File: diff.info,  Node: Tabs,  Next: Pagination,  Up: Adjusting Output | 
|---|
| 1760 |  | 
|---|
| 1761 | Preserving Tab Stop Alignment | 
|---|
| 1762 | ============================= | 
|---|
| 1763 |  | 
|---|
| 1764 | The lines of text in some of the `diff' output formats are preceded | 
|---|
| 1765 | by one or two characters that indicate whether the text is inserted, | 
|---|
| 1766 | deleted, or changed.  The addition of those characters can cause tabs to | 
|---|
| 1767 | move to the next tab stop, throwing off the alignment of columns in the | 
|---|
| 1768 | line.  GNU `diff' provides two ways to make tab-aligned columns line up | 
|---|
| 1769 | correctly. | 
|---|
| 1770 |  | 
|---|
| 1771 | The first way is to have `diff' convert all tabs into the correct | 
|---|
| 1772 | number of spaces before outputting them; select this method with the | 
|---|
| 1773 | `-t' or `--expand-tabs' option.  `diff' assumes that tab stops are set | 
|---|
| 1774 | every 8 print columns.  To use this form of output with `patch', you | 
|---|
| 1775 | must give `patch' the `-l' or `--ignore-white-space' option (*note | 
|---|
| 1776 | Changed White Space::, for more information). | 
|---|
| 1777 |  | 
|---|
| 1778 | The other method for making tabs line up correctly is to add a tab | 
|---|
| 1779 | character instead of a space after the indicator character at the | 
|---|
| 1780 | beginning of the line.  This ensures that all following tab characters | 
|---|
| 1781 | are in the same position relative to tab stops that they were in the | 
|---|
| 1782 | original files, so that the output is aligned correctly.  Its | 
|---|
| 1783 | disadvantage is that it can make long lines too long to fit on one line | 
|---|
| 1784 | of the screen or the paper.  It also does not work with the unified | 
|---|
| 1785 | output format, which does not have a space character after the change | 
|---|
| 1786 | type indicator character.  Select this method with the `-T' or | 
|---|
| 1787 | `--initial-tab' option. | 
|---|
| 1788 |  | 
|---|
| 1789 |  | 
|---|
| 1790 | File: diff.info,  Node: Pagination,  Prev: Tabs,  Up: Adjusting Output | 
|---|
| 1791 |  | 
|---|
| 1792 | Paginating `diff' Output | 
|---|
| 1793 | ======================== | 
|---|
| 1794 |  | 
|---|
| 1795 | It can be convenient to have long output page-numbered and | 
|---|
| 1796 | time-stamped.  The `-l' and `--paginate' options do this by sending the | 
|---|
| 1797 | `diff' output through the `pr' program.  Here is what the page header | 
|---|
| 1798 | might look like for `diff -lc lao tzu': | 
|---|
| 1799 |  | 
|---|
| 1800 | 2002-02-22 14:20                 diff -lc lao tzu                 Page 1 | 
|---|
| 1801 |  | 
|---|
| 1802 |  | 
|---|
| 1803 | File: diff.info,  Node: diff Performance,  Next: Comparing Three Files,  Prev: Adjusting Output,  Up: Top | 
|---|
| 1804 |  | 
|---|
| 1805 | `diff' Performance Tradeoffs | 
|---|
| 1806 | **************************** | 
|---|
| 1807 |  | 
|---|
| 1808 | GNU `diff' runs quite efficiently; however, in some circumstances | 
|---|
| 1809 | you can cause it to run faster or produce a more compact set of changes. | 
|---|
| 1810 |  | 
|---|
| 1811 | One way to improve `diff' performance is to use hard or symbolic | 
|---|
| 1812 | links to files instead of copies.  This improves performance because | 
|---|
| 1813 | `diff' normally does not need to read two hard or symbolic links to the | 
|---|
| 1814 | same file, since their contents must be identical.  For example, | 
|---|
| 1815 | suppose you copy a large directory hierarchy, make a few changes to the | 
|---|
| 1816 | copy, and then often use `diff -r' to compare the original to the copy. | 
|---|
| 1817 | If the original files are read-only, you can greatly improve | 
|---|
| 1818 | performance by creating the copy using hard or symbolic links (e.g., | 
|---|
| 1819 | with GNU `cp -lR' or `cp -sR').  Before editing a file in the copy for | 
|---|
| 1820 | the first time, you should break the link and replace it with a regular | 
|---|
| 1821 | copy. | 
|---|
| 1822 |  | 
|---|
| 1823 | You can also affect the performance of GNU `diff' by giving it | 
|---|
| 1824 | options that change the way it compares files.  Performance has more | 
|---|
| 1825 | than one dimension.  These options improve one aspect of performance at | 
|---|
| 1826 | the cost of another, or they improve performance in some cases while | 
|---|
| 1827 | hurting it in others. | 
|---|
| 1828 |  | 
|---|
| 1829 | The way that GNU `diff' determines which lines have changed always | 
|---|
| 1830 | comes up with a near-minimal set of differences.  Usually it is good | 
|---|
| 1831 | enough for practical purposes.  If the `diff' output is large, you | 
|---|
| 1832 | might want `diff' to use a modified algorithm that sometimes produces a | 
|---|
| 1833 | smaller set of differences.  The `-d' or `--minimal' option does this; | 
|---|
| 1834 | however, it can also cause `diff' to run more slowly than usual, so it | 
|---|
| 1835 | is not the default behavior. | 
|---|
| 1836 |  | 
|---|
| 1837 | When the files you are comparing are large and have small groups of | 
|---|
| 1838 | changes scattered throughout them, you can use the | 
|---|
| 1839 | `--speed-large-files' option to make a different modification to the | 
|---|
| 1840 | algorithm that `diff' uses.  If the input files have a constant small | 
|---|
| 1841 | density of changes, this option speeds up the comparisons without | 
|---|
| 1842 | changing the output.  If not, `diff' might produce a larger set of | 
|---|
| 1843 | differences; however, the output will still be correct. | 
|---|
| 1844 |  | 
|---|
| 1845 | Normally `diff' discards the prefix and suffix that is common to | 
|---|
| 1846 | both files before it attempts to find a minimal set of differences. | 
|---|
| 1847 | This makes `diff' run faster, but occasionally it may produce | 
|---|
| 1848 | non-minimal output.  The `--horizon-lines=LINES' option prevents `diff' | 
|---|
| 1849 | from discarding the last LINES lines of the prefix and the first LINES | 
|---|
| 1850 | lines of the suffix.  This gives `diff' further opportunities to find a | 
|---|
| 1851 | minimal output. | 
|---|
| 1852 |  | 
|---|
| 1853 | Suppose a run of changed lines includes a sequence of lines at one | 
|---|
| 1854 | end and there is an identical sequence of lines just outside the other | 
|---|
| 1855 | end.  The `diff' command is free to choose which identical sequence is | 
|---|
| 1856 | included in the hunk.  In this case, `diff' normally shifts the hunk's | 
|---|
| 1857 | boundaries when this merges adjacent hunks, or shifts a hunk's lines | 
|---|
| 1858 | towards the end of the file.  Merging hunks can make the output look | 
|---|
| 1859 | nicer in some cases. | 
|---|
| 1860 |  | 
|---|
| 1861 |  | 
|---|
| 1862 | File: diff.info,  Node: Comparing Three Files,  Next: diff3 Merging,  Prev: diff Performance,  Up: Top | 
|---|
| 1863 |  | 
|---|
| 1864 | Comparing Three Files | 
|---|
| 1865 | ********************* | 
|---|
| 1866 |  | 
|---|
| 1867 | Use the program `diff3' to compare three files and show any | 
|---|
| 1868 | differences among them.  (`diff3' can also merge files; see *Note diff3 | 
|---|
| 1869 | Merging::). | 
|---|
| 1870 |  | 
|---|
| 1871 | The "normal" `diff3' output format shows each hunk of differences | 
|---|
| 1872 | without surrounding context.  Hunks are labeled depending on whether | 
|---|
| 1873 | they are two-way or three-way, and lines are annotated by their | 
|---|
| 1874 | location in the input files. | 
|---|
| 1875 |  | 
|---|
| 1876 | *Note Invoking diff3::, for more information on how to run `diff3'. | 
|---|
| 1877 |  | 
|---|
| 1878 | * Menu: | 
|---|
| 1879 |  | 
|---|
| 1880 | * Sample diff3 Input::    Sample `diff3' input for examples. | 
|---|
| 1881 | * Detailed diff3 Normal:: A detailed description of normal output format. | 
|---|
| 1882 | * diff3 Hunks::           The format of normal output format. | 
|---|
| 1883 | * Example diff3 Normal::  Sample output in the normal format. | 
|---|
| 1884 |  | 
|---|
| 1885 |  | 
|---|
| 1886 | File: diff.info,  Node: Sample diff3 Input,  Next: Detailed diff3 Normal,  Up: Comparing Three Files | 
|---|
| 1887 |  | 
|---|
| 1888 | A Third Sample Input File | 
|---|
| 1889 | ========================= | 
|---|
| 1890 |  | 
|---|
| 1891 | Here is a third sample file that will be used in examples to | 
|---|
| 1892 | illustrate the output of `diff3' and how various options can change it. | 
|---|
| 1893 | The first two files are the same that we used for `diff' (*note Sample | 
|---|
| 1894 | diff Input::).  This is the third sample file, called `tao': | 
|---|
| 1895 |  | 
|---|
| 1896 | The Way that can be told of is not the eternal Way; | 
|---|
| 1897 | The name that can be named is not the eternal name. | 
|---|
| 1898 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 1899 | The named is the mother of all things. | 
|---|
| 1900 |  | 
|---|
| 1901 | Therefore let there always be non-being, | 
|---|
| 1902 | so we may see their subtlety, | 
|---|
| 1903 | And let there always be being, | 
|---|
| 1904 | so we may see their result. | 
|---|
| 1905 | The two are the same, | 
|---|
| 1906 | But after they are produced, | 
|---|
| 1907 | they have different names. | 
|---|
| 1908 |  | 
|---|
| 1909 | -- The Way of Lao-Tzu, tr. Wing-tsit Chan | 
|---|
| 1910 |  | 
|---|
| 1911 |  | 
|---|
| 1912 | File: diff.info,  Node: Detailed diff3 Normal,  Next: diff3 Hunks,  Prev: Sample diff3 Input,  Up: Comparing Three Files | 
|---|
| 1913 |  | 
|---|
| 1914 | Detailed Description of `diff3' Normal Format | 
|---|
| 1915 | ============================================= | 
|---|
| 1916 |  | 
|---|
| 1917 | Each hunk begins with a line marked `===='.  Three-way hunks have | 
|---|
| 1918 | plain `====' lines, and two-way hunks have `1', `2', or `3' appended to | 
|---|
| 1919 | specify which of the three input files differ in that hunk.  The hunks | 
|---|
| 1920 | contain copies of two or three sets of input lines each preceded by one | 
|---|
| 1921 | or two commands identifying where the lines came from. | 
|---|
| 1922 |  | 
|---|
| 1923 | Normally, two spaces precede each copy of an input line to | 
|---|
| 1924 | distinguish it from the commands.  But with the `-T' or `--initial-tab' | 
|---|
| 1925 | option, `diff3' uses a tab instead of two spaces; this lines up tabs | 
|---|
| 1926 | correctly.  *Note Tabs::, for more information. | 
|---|
| 1927 |  | 
|---|
| 1928 | Commands take the following forms: | 
|---|
| 1929 |  | 
|---|
| 1930 | `FILE:La' | 
|---|
| 1931 | This hunk appears after line L of file FILE, and contains no lines | 
|---|
| 1932 | in that file.  To edit this file to yield the other files, one | 
|---|
| 1933 | must append hunk lines taken from the other files.  For example, | 
|---|
| 1934 | `1:11a' means that the hunk follows line 11 in the first file and | 
|---|
| 1935 | contains no lines from that file. | 
|---|
| 1936 |  | 
|---|
| 1937 | `FILE:Rc' | 
|---|
| 1938 | This hunk contains the lines in the range R of file FILE.  The | 
|---|
| 1939 | range R is a comma-separated pair of line numbers, or just one | 
|---|
| 1940 | number if the range is a singleton.  To edit this file to yield the | 
|---|
| 1941 | other files, one must change the specified lines to be the lines | 
|---|
| 1942 | taken from the other files.  For example, `2:11,13c' means that | 
|---|
| 1943 | the hunk contains lines 11 through 13 from the second file. | 
|---|
| 1944 |  | 
|---|
| 1945 | If the last line in a set of input lines is incomplete (*note | 
|---|
| 1946 | Incomplete Lines::), it is distinguished on output from a full line by | 
|---|
| 1947 | a following line that starts with `\'. | 
|---|
| 1948 |  | 
|---|
| 1949 |  | 
|---|
| 1950 | File: diff.info,  Node: diff3 Hunks,  Next: Example diff3 Normal,  Prev: Detailed diff3 Normal,  Up: Comparing Three Files | 
|---|
| 1951 |  | 
|---|
| 1952 | `diff3' Hunks | 
|---|
| 1953 | ============= | 
|---|
| 1954 |  | 
|---|
| 1955 | Groups of lines that differ in two or three of the input files are | 
|---|
| 1956 | called "diff3 hunks", by analogy with `diff' hunks (*note Hunks::).  If | 
|---|
| 1957 | all three input files differ in a `diff3' hunk, the hunk is called a | 
|---|
| 1958 | "three-way hunk"; if just two input files differ, it is a "two-way | 
|---|
| 1959 | hunk". | 
|---|
| 1960 |  | 
|---|
| 1961 | As with `diff', several solutions are possible.  When comparing the | 
|---|
| 1962 | files `A', `B', and `C', `diff3' normally finds `diff3' hunks by | 
|---|
| 1963 | merging the two-way hunks output by the two commands `diff A B' and | 
|---|
| 1964 | `diff A C'.  This does not necessarily minimize the size of the output, | 
|---|
| 1965 | but exceptions should be rare. | 
|---|
| 1966 |  | 
|---|
| 1967 | For example, suppose `F' contains the three lines `a', `b', `f', `G' | 
|---|
| 1968 | contains the lines `g', `b', `g', and `H' contains the lines `a', `b', | 
|---|
| 1969 | `h'.  `diff3 F G H' might output the following: | 
|---|
| 1970 |  | 
|---|
| 1971 | ====2 | 
|---|
| 1972 | 1:1c | 
|---|
| 1973 | 3:1c | 
|---|
| 1974 | a | 
|---|
| 1975 | 2:1c | 
|---|
| 1976 | g | 
|---|
| 1977 | ==== | 
|---|
| 1978 | 1:3c | 
|---|
| 1979 | f | 
|---|
| 1980 | 2:3c | 
|---|
| 1981 | g | 
|---|
| 1982 | 3:3c | 
|---|
| 1983 | h | 
|---|
| 1984 |  | 
|---|
| 1985 | because it found a two-way hunk containing `a' in the first and third | 
|---|
| 1986 | files and `g' in the second file, then the single line `b' common to | 
|---|
| 1987 | all three files, then a three-way hunk containing the last line of each | 
|---|
| 1988 | file. | 
|---|
| 1989 |  | 
|---|
| 1990 |  | 
|---|
| 1991 | File: diff.info,  Node: Example diff3 Normal,  Prev: diff3 Hunks,  Up: Comparing Three Files | 
|---|
| 1992 |  | 
|---|
| 1993 | An Example of `diff3' Normal Format | 
|---|
| 1994 | =================================== | 
|---|
| 1995 |  | 
|---|
| 1996 | Here is the output of the command `diff3 lao tzu tao' (*note Sample | 
|---|
| 1997 | diff3 Input::, for the complete contents of the files).  Notice that it | 
|---|
| 1998 | shows only the lines that are different among the three files. | 
|---|
| 1999 |  | 
|---|
| 2000 | ====2 | 
|---|
| 2001 | 1:1,2c | 
|---|
| 2002 | 3:1,2c | 
|---|
| 2003 | The Way that can be told of is not the eternal Way; | 
|---|
| 2004 | The name that can be named is not the eternal name. | 
|---|
| 2005 | 2:0a | 
|---|
| 2006 | ====1 | 
|---|
| 2007 | 1:4c | 
|---|
| 2008 | The Named is the mother of all things. | 
|---|
| 2009 | 2:2,3c | 
|---|
| 2010 | 3:4,5c | 
|---|
| 2011 | The named is the mother of all things. | 
|---|
| 2012 |  | 
|---|
| 2013 | ====3 | 
|---|
| 2014 | 1:8c | 
|---|
| 2015 | 2:7c | 
|---|
| 2016 | so we may see their outcome. | 
|---|
| 2017 | 3:9c | 
|---|
| 2018 | so we may see their result. | 
|---|
| 2019 | ==== | 
|---|
| 2020 | 1:11a | 
|---|
| 2021 | 2:11,13c | 
|---|
| 2022 | They both may be called deep and profound. | 
|---|
| 2023 | Deeper and more profound, | 
|---|
| 2024 | The door of all subtleties! | 
|---|
| 2025 | 3:13,14c | 
|---|
| 2026 |  | 
|---|
| 2027 | -- The Way of Lao-Tzu, tr. Wing-tsit Chan | 
|---|
| 2028 |  | 
|---|
| 2029 |  | 
|---|
| 2030 | File: diff.info,  Node: diff3 Merging,  Next: Interactive Merging,  Prev: Comparing Three Files,  Up: Top | 
|---|
| 2031 |  | 
|---|
| 2032 | Merging From a Common Ancestor | 
|---|
| 2033 | ****************************** | 
|---|
| 2034 |  | 
|---|
| 2035 | When two people have made changes to copies of the same file, | 
|---|
| 2036 | `diff3' can produce a merged output that contains both sets of changes | 
|---|
| 2037 | together with warnings about conflicts. | 
|---|
| 2038 |  | 
|---|
| 2039 | One might imagine programs with names like `diff4' and `diff5' to | 
|---|
| 2040 | compare more than three files simultaneously, but in practice the need | 
|---|
| 2041 | rarely arises.  You can use `diff3' to merge three or more sets of | 
|---|
| 2042 | changes to a file by merging two change sets at a time. | 
|---|
| 2043 |  | 
|---|
| 2044 | `diff3' can incorporate changes from two modified versions into a | 
|---|
| 2045 | common preceding version.  This lets you merge the sets of changes | 
|---|
| 2046 | represented by the two newer files.  Specify the common ancestor version | 
|---|
| 2047 | as the second argument and the two newer versions as the first and third | 
|---|
| 2048 | arguments, like this: | 
|---|
| 2049 |  | 
|---|
| 2050 | diff3 MINE OLDER YOURS | 
|---|
| 2051 |  | 
|---|
| 2052 | You can remember the order of the arguments by noting that they are in | 
|---|
| 2053 | alphabetical order. | 
|---|
| 2054 |  | 
|---|
| 2055 | You can think of this as subtracting OLDER from YOURS and adding the | 
|---|
| 2056 | result to MINE, or as merging into MINE the changes that would turn | 
|---|
| 2057 | OLDER into YOURS.  This merging is well-defined as long as MINE and | 
|---|
| 2058 | OLDER match in the neighborhood of each such change.  This fails to be | 
|---|
| 2059 | true when all three input files differ or when only OLDER differs; we | 
|---|
| 2060 | call this a "conflict".  When all three input files differ, we call the | 
|---|
| 2061 | conflict an "overlap". | 
|---|
| 2062 |  | 
|---|
| 2063 | `diff3' gives you several ways to handle overlaps and conflicts. | 
|---|
| 2064 | You can omit overlaps or conflicts, or select only overlaps, or mark | 
|---|
| 2065 | conflicts with special `<<<<<<<' and `>>>>>>>' lines. | 
|---|
| 2066 |  | 
|---|
| 2067 | `diff3' can output the merge results as an `ed' script that that can | 
|---|
| 2068 | be applied to the first file to yield the merged output.  However, it | 
|---|
| 2069 | is usually better to have `diff3' generate the merged output directly; | 
|---|
| 2070 | this bypasses some problems with `ed'. | 
|---|
| 2071 |  | 
|---|
| 2072 | * Menu: | 
|---|
| 2073 |  | 
|---|
| 2074 | * Which Changes::            Selecting changes to incorporate. | 
|---|
| 2075 | * Marking Conflicts::        Marking conflicts. | 
|---|
| 2076 | * Bypassing ed::             Generating merged output directly. | 
|---|
| 2077 | * Merging Incomplete Lines:: How `diff3' merges incomplete lines. | 
|---|
| 2078 | * Saving the Changed File::  Emulating System V behavior. | 
|---|
| 2079 |  | 
|---|
| 2080 |  | 
|---|
| 2081 | File: diff.info,  Node: Which Changes,  Next: Marking Conflicts,  Up: diff3 Merging | 
|---|
| 2082 |  | 
|---|
| 2083 | Selecting Which Changes to Incorporate | 
|---|
| 2084 | ====================================== | 
|---|
| 2085 |  | 
|---|
| 2086 | You can select all unmerged changes from OLDER to YOURS for merging | 
|---|
| 2087 | into MINE with the `-e' or `--ed' option.  You can select only the | 
|---|
| 2088 | nonoverlapping unmerged changes with `-3' or `--easy-only', and you can | 
|---|
| 2089 | select only the overlapping changes with `-x' or `--overlap-only'. | 
|---|
| 2090 |  | 
|---|
| 2091 | The `-e', `-3' and `-x' options select only "unmerged changes", i.e. | 
|---|
| 2092 | changes where MINE and YOURS differ; they ignore changes from OLDER to | 
|---|
| 2093 | YOURS where MINE and YOURS are identical, because they assume that such | 
|---|
| 2094 | changes have already been merged.  If this assumption is not a safe | 
|---|
| 2095 | one, you can use the `-A' or `--show-all' option (*note Marking | 
|---|
| 2096 | Conflicts::). | 
|---|
| 2097 |  | 
|---|
| 2098 | Here is the output of the command `diff3' with each of these three | 
|---|
| 2099 | options (*note Sample diff3 Input::, for the complete contents of the | 
|---|
| 2100 | files).  Notice that `-e' outputs the union of the disjoint sets of | 
|---|
| 2101 | changes output by `-3' and `-x'. | 
|---|
| 2102 |  | 
|---|
| 2103 | Output of `diff3 -e lao tzu tao': | 
|---|
| 2104 | 11a | 
|---|
| 2105 |  | 
|---|
| 2106 | -- The Way of Lao-Tzu, tr. Wing-tsit Chan | 
|---|
| 2107 | . | 
|---|
| 2108 | 8c | 
|---|
| 2109 | so we may see their result. | 
|---|
| 2110 | . | 
|---|
| 2111 |  | 
|---|
| 2112 | Output of `diff3 -3 lao tzu tao': | 
|---|
| 2113 | 8c | 
|---|
| 2114 | so we may see their result. | 
|---|
| 2115 | . | 
|---|
| 2116 |  | 
|---|
| 2117 | Output of `diff3 -x lao tzu tao': | 
|---|
| 2118 | 11a | 
|---|
| 2119 |  | 
|---|
| 2120 | -- The Way of Lao-Tzu, tr. Wing-tsit Chan | 
|---|
| 2121 | . | 
|---|
| 2122 |  | 
|---|
| 2123 |  | 
|---|
| 2124 | File: diff.info,  Node: Marking Conflicts,  Next: Bypassing ed,  Prev: Which Changes,  Up: diff3 Merging | 
|---|
| 2125 |  | 
|---|
| 2126 | Marking Conflicts | 
|---|
| 2127 | ================= | 
|---|
| 2128 |  | 
|---|
| 2129 | `diff3' can mark conflicts in the merged output by bracketing them | 
|---|
| 2130 | with special marker lines.  A conflict that comes from two files A and | 
|---|
| 2131 | B is marked as follows: | 
|---|
| 2132 |  | 
|---|
| 2133 | <<<<<<< A | 
|---|
| 2134 | lines from A | 
|---|
| 2135 | ======= | 
|---|
| 2136 | lines from B | 
|---|
| 2137 | >>>>>>> B | 
|---|
| 2138 |  | 
|---|
| 2139 | A conflict that comes from three files A, B and C is marked as | 
|---|
| 2140 | follows: | 
|---|
| 2141 |  | 
|---|
| 2142 | <<<<<<< A | 
|---|
| 2143 | lines from A | 
|---|
| 2144 | ||||||| B | 
|---|
| 2145 | lines from B | 
|---|
| 2146 | ======= | 
|---|
| 2147 | lines from C | 
|---|
| 2148 | >>>>>>> C | 
|---|
| 2149 |  | 
|---|
| 2150 | The `-A' or `--show-all' option acts like the `-e' option, except | 
|---|
| 2151 | that it brackets conflicts, and it outputs all changes from OLDER to | 
|---|
| 2152 | YOURS, not just the unmerged changes.  Thus, given the sample input | 
|---|
| 2153 | files (*note Sample diff3 Input::), `diff3 -A lao tzu tao' puts | 
|---|
| 2154 | brackets around the conflict where only `tzu' differs: | 
|---|
| 2155 |  | 
|---|
| 2156 | <<<<<<< tzu | 
|---|
| 2157 | ======= | 
|---|
| 2158 | The Way that can be told of is not the eternal Way; | 
|---|
| 2159 | The name that can be named is not the eternal name. | 
|---|
| 2160 | >>>>>>> tao | 
|---|
| 2161 |  | 
|---|
| 2162 | And it outputs the three-way conflict as follows: | 
|---|
| 2163 |  | 
|---|
| 2164 | <<<<<<< lao | 
|---|
| 2165 | ||||||| tzu | 
|---|
| 2166 | They both may be called deep and profound. | 
|---|
| 2167 | Deeper and more profound, | 
|---|
| 2168 | The door of all subtleties! | 
|---|
| 2169 | ======= | 
|---|
| 2170 |  | 
|---|
| 2171 | -- The Way of Lao-Tzu, tr. Wing-tsit Chan | 
|---|
| 2172 | >>>>>>> tao | 
|---|
| 2173 |  | 
|---|
| 2174 | The `-E' or `--show-overlap' option outputs less information than | 
|---|
| 2175 | the `-A' or `--show-all' option, because it outputs only unmerged | 
|---|
| 2176 | changes, and it never outputs the contents of the second file.  Thus | 
|---|
| 2177 | the `-E' option acts like the `-e' option, except that it brackets the | 
|---|
| 2178 | first and third files from three-way overlapping changes.  Similarly, | 
|---|
| 2179 | `-X' acts like `-x', except it brackets all its (necessarily | 
|---|
| 2180 | overlapping) changes.  For example, for the three-way overlapping | 
|---|
| 2181 | change above, the `-E' and `-X' options output the following: | 
|---|
| 2182 |  | 
|---|
| 2183 | <<<<<<< lao | 
|---|
| 2184 | ======= | 
|---|
| 2185 |  | 
|---|
| 2186 | -- The Way of Lao-Tzu, tr. Wing-tsit Chan | 
|---|
| 2187 | >>>>>>> tao | 
|---|
| 2188 |  | 
|---|
| 2189 | If you are comparing files that have meaningless or uninformative | 
|---|
| 2190 | names, you can use the `-L LABEL' or `--label=LABEL' option to show | 
|---|
| 2191 | alternate names in the `<<<<<<<', `|||||||' and `>>>>>>>' brackets. | 
|---|
| 2192 | This option can be given up to three times, once for each input file. | 
|---|
| 2193 | Thus `diff3 -A -L X -L Y -L Z A B C' acts like `diff3 -A A B C', except | 
|---|
| 2194 | that the output looks like it came from files named `X', `Y' and `Z' | 
|---|
| 2195 | rather than from files named `A', `B' and `C'. | 
|---|
| 2196 |  | 
|---|
| 2197 |  | 
|---|
| 2198 | File: diff.info,  Node: Bypassing ed,  Next: Merging Incomplete Lines,  Prev: Marking Conflicts,  Up: diff3 Merging | 
|---|
| 2199 |  | 
|---|
| 2200 | Generating the Merged Output Directly | 
|---|
| 2201 | ===================================== | 
|---|
| 2202 |  | 
|---|
| 2203 | With the `-m' or `--merge' option, `diff3' outputs the merged file | 
|---|
| 2204 | directly.  This is more efficient than using `ed' to generate it, and | 
|---|
| 2205 | works even with non-text files that `ed' would reject.  If you specify | 
|---|
| 2206 | `-m' without an `ed' script option, `-A' (`--show-all') is assumed. | 
|---|
| 2207 |  | 
|---|
| 2208 | For example, the command `diff3 -m lao tzu tao' (*note Sample diff3 | 
|---|
| 2209 | Input:: for a copy of the input files) would output the following: | 
|---|
| 2210 |  | 
|---|
| 2211 | <<<<<<< tzu | 
|---|
| 2212 | ======= | 
|---|
| 2213 | The Way that can be told of is not the eternal Way; | 
|---|
| 2214 | The name that can be named is not the eternal name. | 
|---|
| 2215 | >>>>>>> tao | 
|---|
| 2216 | The Nameless is the origin of Heaven and Earth; | 
|---|
| 2217 | The Named is the mother of all things. | 
|---|
| 2218 | Therefore let there always be non-being, | 
|---|
| 2219 | so we may see their subtlety, | 
|---|
| 2220 | And let there always be being, | 
|---|
| 2221 | so we may see their result. | 
|---|
| 2222 | The two are the same, | 
|---|
| 2223 | But after they are produced, | 
|---|
| 2224 | they have different names. | 
|---|
| 2225 | <<<<<<< lao | 
|---|
| 2226 | ||||||| tzu | 
|---|
| 2227 | They both may be called deep and profound. | 
|---|
| 2228 | Deeper and more profound, | 
|---|
| 2229 | The door of all subtleties! | 
|---|
| 2230 | ======= | 
|---|
| 2231 |  | 
|---|
| 2232 | -- The Way of Lao-Tzu, tr. Wing-tsit Chan | 
|---|
| 2233 | >>>>>>> tao | 
|---|
| 2234 |  | 
|---|
| 2235 |  | 
|---|
| 2236 | File: diff.info,  Node: Merging Incomplete Lines,  Next: Saving the Changed File,  Prev: Bypassing ed,  Up: diff3 Merging | 
|---|
| 2237 |  | 
|---|
| 2238 | How `diff3' Merges Incomplete Lines | 
|---|
| 2239 | =================================== | 
|---|
| 2240 |  | 
|---|
| 2241 | With `-m', incomplete lines (*note Incomplete Lines::) are simply | 
|---|
| 2242 | copied to the output as they are found; if the merged output ends in an | 
|---|
| 2243 | conflict and one of the input files ends in an incomplete line, | 
|---|
| 2244 | succeeding `|||||||', `=======' or `>>>>>>>' brackets appear somewhere | 
|---|
| 2245 | other than the start of a line because they are appended to the | 
|---|
| 2246 | incomplete line. | 
|---|
| 2247 |  | 
|---|
| 2248 | Without `-m', if an `ed' script option is specified and an | 
|---|
| 2249 | incomplete line is found, `diff3' generates a warning and acts as if a | 
|---|
| 2250 | newline had been present. | 
|---|
| 2251 |  | 
|---|
| 2252 |  | 
|---|
| 2253 | File: diff.info,  Node: Saving the Changed File,  Prev: Merging Incomplete Lines,  Up: diff3 Merging | 
|---|
| 2254 |  | 
|---|
| 2255 | Saving the Changed File | 
|---|
| 2256 | ======================= | 
|---|
| 2257 |  | 
|---|
| 2258 | Traditional Unix `diff3' generates an `ed' script without the | 
|---|
| 2259 | trailing `w' and `q' commands that save the changes.  System V `diff3' | 
|---|
| 2260 | generates these extra commands.  GNU `diff3' normally behaves like | 
|---|
| 2261 | traditional Unix `diff3', but with the `-i' option it behaves like | 
|---|
| 2262 | System V `diff3' and appends the `w' and `q' commands. | 
|---|
| 2263 |  | 
|---|
| 2264 | The `-i' option requires one of the `ed' script options `-AeExX3', | 
|---|
| 2265 | and is incompatible with the merged output option `-m'. | 
|---|
| 2266 |  | 
|---|
| 2267 |  | 
|---|
| 2268 | File: diff.info,  Node: Interactive Merging,  Next: Merging with patch,  Prev: diff3 Merging,  Up: Top | 
|---|
| 2269 |  | 
|---|
| 2270 | Interactive Merging with `sdiff' | 
|---|
| 2271 | ******************************** | 
|---|
| 2272 |  | 
|---|
| 2273 | With `sdiff', you can merge two files interactively based on a | 
|---|
| 2274 | side-by-side `-y' format comparison (*note Side by Side::).  Use `-o | 
|---|
| 2275 | FILE' or `--output=FILE' to specify where to put the merged text. | 
|---|
| 2276 | *Note Invoking sdiff::, for more details on the options to `sdiff'. | 
|---|
| 2277 |  | 
|---|
| 2278 | Another way to merge files interactively is to use the Emacs Lisp | 
|---|
| 2279 | package `emerge'.  *Note emerge: (emacs)emerge, for more information. | 
|---|
| 2280 |  | 
|---|
| 2281 | * Menu: | 
|---|
| 2282 |  | 
|---|
| 2283 | * sdiff Option Summary:: Summary of `sdiff' options. | 
|---|
| 2284 | * Merge Commands::       Merging two files interactively. | 
|---|
| 2285 |  | 
|---|
| 2286 |  | 
|---|
| 2287 | File: diff.info,  Node: sdiff Option Summary,  Next: Merge Commands,  Up: Interactive Merging | 
|---|
| 2288 |  | 
|---|
| 2289 | Specifying `diff' Options to `sdiff' | 
|---|
| 2290 | ==================================== | 
|---|
| 2291 |  | 
|---|
| 2292 | The following `sdiff' options have the same meaning as for `diff'. | 
|---|
| 2293 | *Note diff Options::, for the use of these options. | 
|---|
| 2294 |  | 
|---|
| 2295 | -a -b -d -i -t -v | 
|---|
| 2296 | -B -E -I REGEXP | 
|---|
| 2297 |  | 
|---|
| 2298 | --ignore-blank-lines  --ignore-case | 
|---|
| 2299 | --ignore-matching-lines=REGEXP  --ignore-space-change | 
|---|
| 2300 | --ignore-tab-expansion | 
|---|
| 2301 | --left-column  --minimal  --speed-large-files | 
|---|
| 2302 | --strip-trailing-cr  --suppress-common-lines  --expand-tabs | 
|---|
| 2303 | --text  --version  --width=COLUMNS | 
|---|
| 2304 |  | 
|---|
| 2305 | For historical reasons, `sdiff' has alternate names for some | 
|---|
| 2306 | options.  The `-l' option is equivalent to the `--left-column' option, | 
|---|
| 2307 | and similarly `-s' is equivalent to `--suppress-common-lines'.  The | 
|---|
| 2308 | meaning of the `sdiff' `-w' and `-W' options is interchanged from that | 
|---|
| 2309 | of `diff': with `sdiff', `-w COLUMNS' is equivalent to | 
|---|
| 2310 | `--width=COLUMNS', and `-W' is equivalent to `--ignore-all-space'. | 
|---|
| 2311 | `sdiff' without the `-o' option is equivalent to `diff' with the `-y' | 
|---|
| 2312 | or `--side-by-side' option (*note Side by Side::). | 
|---|
| 2313 |  | 
|---|
| 2314 |  | 
|---|
| 2315 | File: diff.info,  Node: Merge Commands,  Prev: sdiff Option Summary,  Up: Interactive Merging | 
|---|
| 2316 |  | 
|---|
| 2317 | Merge Commands | 
|---|
| 2318 | ============== | 
|---|
| 2319 |  | 
|---|
| 2320 | Groups of common lines, with a blank gutter, are copied from the | 
|---|
| 2321 | first file to the output.  After each group of differing lines, `sdiff' | 
|---|
| 2322 | prompts with `%' and pauses, waiting for one of the following commands. | 
|---|
| 2323 | Follow each command with <RET>. | 
|---|
| 2324 |  | 
|---|
| 2325 | `e' | 
|---|
| 2326 | Discard both versions.  Invoke a text editor on an empty temporary | 
|---|
| 2327 | file, then copy the resulting file to the output. | 
|---|
| 2328 |  | 
|---|
| 2329 | `eb' | 
|---|
| 2330 | Concatenate the two versions, edit the result in a temporary file, | 
|---|
| 2331 | then copy the edited result to the output. | 
|---|
| 2332 |  | 
|---|
| 2333 | `ed' | 
|---|
| 2334 | Like `eb', except precede each version with a header that shows | 
|---|
| 2335 | what file and lines the version came from. | 
|---|
| 2336 |  | 
|---|
| 2337 | `el' | 
|---|
| 2338 | Edit a copy of the left version, then copy the result to the | 
|---|
| 2339 | output. | 
|---|
| 2340 |  | 
|---|
| 2341 | `er' | 
|---|
| 2342 | Edit a copy of the right version, then copy the result to the | 
|---|
| 2343 | output. | 
|---|
| 2344 |  | 
|---|
| 2345 | `l' | 
|---|
| 2346 | Copy the left version to the output. | 
|---|
| 2347 |  | 
|---|
| 2348 | `q' | 
|---|
| 2349 | Quit. | 
|---|
| 2350 |  | 
|---|
| 2351 | `r' | 
|---|
| 2352 | Copy the right version to the output. | 
|---|
| 2353 |  | 
|---|
| 2354 | `s' | 
|---|
| 2355 | Silently copy common lines. | 
|---|
| 2356 |  | 
|---|
| 2357 | `v' | 
|---|
| 2358 | Verbosely copy common lines.  This is the default. | 
|---|
| 2359 |  | 
|---|
| 2360 | The text editor invoked is specified by the `EDITOR' environment | 
|---|
| 2361 | variable if it is set.  The default is system-dependent. | 
|---|
| 2362 |  | 
|---|
| 2363 |  | 
|---|
| 2364 | File: diff.info,  Node: Merging with patch,  Next: Making Patches,  Prev: Interactive Merging,  Up: Top | 
|---|
| 2365 |  | 
|---|
| 2366 | Merging with `patch' | 
|---|
| 2367 | ******************** | 
|---|
| 2368 |  | 
|---|
| 2369 | `patch' takes comparison output produced by `diff' and applies the | 
|---|
| 2370 | differences to a copy of the original file, producing a patched | 
|---|
| 2371 | version.  With `patch', you can distribute just the changes to a set of | 
|---|
| 2372 | files instead of distributing the entire file set; your correspondents | 
|---|
| 2373 | can apply `patch' to update their copy of the files with your changes. | 
|---|
| 2374 | `patch' automatically determines the diff format, skips any leading or | 
|---|
| 2375 | trailing headers, and uses the headers to determine which file to | 
|---|
| 2376 | patch.  This lets your correspondents feed a mail message containing a | 
|---|
| 2377 | difference listing directly to `patch'. | 
|---|
| 2378 |  | 
|---|
| 2379 | `patch' detects and warns about common problems like forward | 
|---|
| 2380 | patches.  It saves any patches that it could not apply.  It can also | 
|---|
| 2381 | maintain a `patchlevel.h' file to ensure that your correspondents apply | 
|---|
| 2382 | diffs in the proper order. | 
|---|
| 2383 |  | 
|---|
| 2384 | `patch' accepts a series of diffs in its standard input, usually | 
|---|
| 2385 | separated by headers that specify which file to patch.  It applies | 
|---|
| 2386 | `diff' hunks (*note Hunks::) one by one.  If a hunk does not exactly | 
|---|
| 2387 | match the original file, `patch' uses heuristics to try to patch the | 
|---|
| 2388 | file as well as it can.  If no approximate match can be found, `patch' | 
|---|
| 2389 | rejects the hunk and skips to the next hunk.  `patch' normally replaces | 
|---|
| 2390 | each file F with its new version, putting reject hunks (if any) into | 
|---|
| 2391 | `F.rej'. | 
|---|
| 2392 |  | 
|---|
| 2393 | *Note Invoking patch::, for detailed information on the options to | 
|---|
| 2394 | `patch'. | 
|---|
| 2395 |  | 
|---|
| 2396 | * Menu: | 
|---|
| 2397 |  | 
|---|
| 2398 | * patch Input::            Selecting the type of `patch' input. | 
|---|
| 2399 | * Revision Control::       Getting files from RCS, SCCS, etc. | 
|---|
| 2400 | * Imperfect::              Dealing with imperfect patches. | 
|---|
| 2401 | * Creating and Removing::  Creating and removing files with a patch. | 
|---|
| 2402 | * Patching Time Stamps::   Updating time stamps on patched files. | 
|---|
| 2403 | * Multiple Patches::       Handling multiple patches in a file. | 
|---|
| 2404 | * patch Directories::      Changing directory and stripping directories. | 
|---|
| 2405 | * Backups::                Whether backup files are made. | 
|---|
| 2406 | * Backup Names::           Backup file names. | 
|---|
| 2407 | * Reject Names::           Reject file names. | 
|---|
| 2408 | * patch Messages::         Messages and questions `patch' can produce. | 
|---|
| 2409 | * patch and POSIX::        Conformance to the POSIX standard. | 
|---|
| 2410 | * patch and Tradition::    GNU versus traditional `patch'. | 
|---|
| 2411 |  | 
|---|
| 2412 |  | 
|---|
| 2413 | File: diff.info,  Node: patch Input,  Next: Revision Control,  Up: Merging with patch | 
|---|
| 2414 |  | 
|---|
| 2415 | Selecting the `patch' Input Format | 
|---|
| 2416 | ================================== | 
|---|
| 2417 |  | 
|---|
| 2418 | `patch' normally determines which `diff' format the patch file uses | 
|---|
| 2419 | by examining its contents.  For patch files that contain particularly | 
|---|
| 2420 | confusing leading text, you might need to use one of the following | 
|---|
| 2421 | options to force `patch' to interpret the patch file as a certain | 
|---|
| 2422 | format of diff.  The output formats listed here are the only ones that | 
|---|
| 2423 | `patch' can understand. | 
|---|
| 2424 |  | 
|---|
| 2425 | `-c' | 
|---|
| 2426 | `--context' | 
|---|
| 2427 | context diff. | 
|---|
| 2428 |  | 
|---|
| 2429 | `-e' | 
|---|
| 2430 | `--ed' | 
|---|
| 2431 | `ed' script. | 
|---|
| 2432 |  | 
|---|
| 2433 | `-n' | 
|---|
| 2434 | `--normal' | 
|---|
| 2435 | normal diff. | 
|---|
| 2436 |  | 
|---|
| 2437 | `-u' | 
|---|
| 2438 | `--unified' | 
|---|
| 2439 | unified diff. | 
|---|
| 2440 |  | 
|---|
| 2441 |  | 
|---|
| 2442 | File: diff.info,  Node: Revision Control,  Next: Imperfect,  Prev: patch Input,  Up: Merging with patch | 
|---|
| 2443 |  | 
|---|
| 2444 | Revision Control | 
|---|
| 2445 | ================ | 
|---|
| 2446 |  | 
|---|
| 2447 | If a nonexistent input file is under a revision control system | 
|---|
| 2448 | supported by `patch', `patch' normally asks the user whether to get (or | 
|---|
| 2449 | check out) the file from the revision control system.  Patch currently | 
|---|
| 2450 | supports RCS, ClearCase and SCCS.  Under RCS and SCCS, `patch' also | 
|---|
| 2451 | asks when the input file is read-only and matches the default version | 
|---|
| 2452 | in the revision control system. | 
|---|
| 2453 |  | 
|---|
| 2454 | The `-g NUM' or `--get=NUM' affects access to files under supported | 
|---|
| 2455 | revision control systems.  If NUM is positive, `patch' gets the file | 
|---|
| 2456 | without asking the user; if zero, `patch' neither asks the user nor | 
|---|
| 2457 | gets the file; and if negative, `patch' asks the user before getting | 
|---|
| 2458 | the file.  The default value of NUM is given by the value of the | 
|---|
| 2459 | `PATCH_GET' environment variable if it is set; if not, the default | 
|---|
| 2460 | value is zero if `patch' is conforming to POSIX, negative otherwise. | 
|---|
| 2461 | *Note patch and POSIX::. | 
|---|
| 2462 |  | 
|---|
| 2463 | The choice of revision control system is unaffected by the | 
|---|
| 2464 | `VERSION_CONTROL' environment variable (*note Backup Names::). | 
|---|
| 2465 |  | 
|---|
| 2466 |  | 
|---|
| 2467 | File: diff.info,  Node: Imperfect,  Next: Creating and Removing,  Prev: Revision Control,  Up: Merging with patch | 
|---|
| 2468 |  | 
|---|
| 2469 | Applying Imperfect Patches | 
|---|
| 2470 | ========================== | 
|---|
| 2471 |  | 
|---|
| 2472 | `patch' tries to skip any leading text in the patch file, apply the | 
|---|
| 2473 | diff, and then skip any trailing text.  Thus you can feed a mail | 
|---|
| 2474 | message directly to `patch', and it should work.  If the entire diff is | 
|---|
| 2475 | indented by a constant amount of white space, `patch' automatically | 
|---|
| 2476 | ignores the indentation.  If a context diff contains trailing carriage | 
|---|
| 2477 | return on each line, `patch' automatically ignores the carriage return. | 
|---|
| 2478 | If a context diff has been encapsulated by prepending `- ' to lines | 
|---|
| 2479 | beginning with `-' as per Internet RFC 934 | 
|---|
| 2480 | (ftp://ftp.isi.edu/in-notes/rfc934.txt), `patch' automatically | 
|---|
| 2481 | unencapsulates the input. | 
|---|
| 2482 |  | 
|---|
| 2483 | However, certain other types of imperfect input require user | 
|---|
| 2484 | intervention or testing. | 
|---|
| 2485 |  | 
|---|
| 2486 | * Menu: | 
|---|
| 2487 |  | 
|---|
| 2488 | * Changed White Space:: When tabs and spaces don't match exactly. | 
|---|
| 2489 | * Reversed Patches::    Applying reversed patches correctly. | 
|---|
| 2490 | * Inexact::             Helping `patch' find close matches. | 
|---|
| 2491 | * Dry Runs::            Predicting what `patch' will do. | 
|---|
| 2492 |  | 
|---|
| 2493 |  | 
|---|
| 2494 | File: diff.info,  Node: Changed White Space,  Next: Reversed Patches,  Up: Imperfect | 
|---|
| 2495 |  | 
|---|
| 2496 | Applying Patches with Changed White Space | 
|---|
| 2497 | ----------------------------------------- | 
|---|
| 2498 |  | 
|---|
| 2499 | Sometimes mailers, editors, or other programs change spaces into | 
|---|
| 2500 | tabs, or vice versa.  If this happens to a patch file or an input file, | 
|---|
| 2501 | the files might look the same, but `patch' will not be able to match | 
|---|
| 2502 | them properly.  If this problem occurs, use the `-l' or | 
|---|
| 2503 | `--ignore-white-space' option, which makes `patch' compare blank | 
|---|
| 2504 | characters (i.e. spaces and tabs) loosely so that any nonempty sequence | 
|---|
| 2505 | of blanks in the patch file matches any nonempty sequence of blanks in | 
|---|
| 2506 | the input files.  Non-blank characters must still match exactly.  Each | 
|---|
| 2507 | line of the context must still match a line in the input file. | 
|---|
| 2508 |  | 
|---|
| 2509 |  | 
|---|
| 2510 | File: diff.info,  Node: Reversed Patches,  Next: Inexact,  Prev: Changed White Space,  Up: Imperfect | 
|---|
| 2511 |  | 
|---|
| 2512 | Applying Reversed Patches | 
|---|
| 2513 | ------------------------- | 
|---|
| 2514 |  | 
|---|
| 2515 | Sometimes people run `diff' with the new file first instead of | 
|---|
| 2516 | second.  This creates a diff that is "reversed".  To apply such | 
|---|
| 2517 | patches, give `patch' the `-R' or `--reverse' option.  `patch' then | 
|---|
| 2518 | attempts to swap each hunk around before applying it.  Rejects come out | 
|---|
| 2519 | in the swapped format. | 
|---|
| 2520 |  | 
|---|
| 2521 | Often `patch' can guess that the patch is reversed.  If the first | 
|---|
| 2522 | hunk of a patch fails, `patch' reverses the hunk to see if it can apply | 
|---|
| 2523 | it that way.  If it can, `patch' asks you if you want to have the `-R' | 
|---|
| 2524 | option set; if it can't, `patch' continues to apply the patch normally. | 
|---|
| 2525 | This method cannot detect a reversed patch if it is a normal diff and | 
|---|
| 2526 | the first command is an append (which should have been a delete) since | 
|---|
| 2527 | appends always succeed, because a null context matches anywhere.  But | 
|---|
| 2528 | most patches add or change lines rather than delete them, so most | 
|---|
| 2529 | reversed normal diffs begin with a delete, which fails, and `patch' | 
|---|
| 2530 | notices. | 
|---|
| 2531 |  | 
|---|
| 2532 | If you apply a patch that you have already applied, `patch' thinks | 
|---|
| 2533 | it is a reversed patch and offers to un-apply the patch.  This could be | 
|---|
| 2534 | construed as a feature.  If you did this inadvertently and you don't | 
|---|
| 2535 | want to un-apply the patch, just answer `n' to this offer and to the | 
|---|
| 2536 | subsequent "apply anyway" question--or type `C-c' to kill the `patch' | 
|---|
| 2537 | process. | 
|---|
| 2538 |  | 
|---|
| 2539 |  | 
|---|
| 2540 | File: diff.info,  Node: Inexact,  Next: Dry Runs,  Prev: Reversed Patches,  Up: Imperfect | 
|---|
| 2541 |  | 
|---|
| 2542 | Helping `patch' Find Inexact Matches | 
|---|
| 2543 | ------------------------------------ | 
|---|
| 2544 |  | 
|---|
| 2545 | For context diffs, and to a lesser extent normal diffs, `patch' can | 
|---|
| 2546 | detect when the line numbers mentioned in the patch are incorrect, and | 
|---|
| 2547 | it attempts to find the correct place to apply each hunk of the patch. | 
|---|
| 2548 | As a first guess, it takes the line number mentioned in the hunk, plus | 
|---|
| 2549 | or minus any offset used in applying the previous hunk.  If that is not | 
|---|
| 2550 | the correct place, `patch' scans both forward and backward for a set of | 
|---|
| 2551 | lines matching the context given in the hunk. | 
|---|
| 2552 |  | 
|---|
| 2553 | First `patch' looks for a place where all lines of the context | 
|---|
| 2554 | match.  If it cannot find such a place, and it is reading a context or | 
|---|
| 2555 | unified diff, and the maximum fuzz factor is set to 1 or more, then | 
|---|
| 2556 | `patch' makes another scan, ignoring the first and last line of | 
|---|
| 2557 | context.  If that fails, and the maximum fuzz factor is set to 2 or | 
|---|
| 2558 | more, it makes another scan, ignoring the first two and last two lines | 
|---|
| 2559 | of context are ignored.  It continues similarly if the maximum fuzz | 
|---|
| 2560 | factor is larger. | 
|---|
| 2561 |  | 
|---|
| 2562 | The `-F LINES' or `--fuzz=LINES' option sets the maximum fuzz factor | 
|---|
| 2563 | to LINES.  This option only applies to context and unified diffs; it | 
|---|
| 2564 | ignores up to LINES lines while looking for the place to install a | 
|---|
| 2565 | hunk.  Note that a larger fuzz factor increases the odds of making a | 
|---|
| 2566 | faulty patch.  The default fuzz factor is 2; there is no point to | 
|---|
| 2567 | setting it to more than the number of lines of context in the diff, | 
|---|
| 2568 | ordinarily 3. | 
|---|
| 2569 |  | 
|---|
| 2570 | If `patch' cannot find a place to install a hunk of the patch, it | 
|---|
| 2571 | writes the hunk out to a reject file (*note Reject Names::, for | 
|---|
| 2572 | information on how reject files are named).  It writes out rejected | 
|---|
| 2573 | hunks in context format no matter what form the input patch is in.  If | 
|---|
| 2574 | the input is a normal or `ed' diff, many of the contexts are simply | 
|---|
| 2575 | null.  The line numbers on the hunks in the reject file may be | 
|---|
| 2576 | different from those in the patch file: they show the approximate | 
|---|
| 2577 | location where `patch' thinks the failed hunks belong in the new file | 
|---|
| 2578 | rather than in the old one. | 
|---|
| 2579 |  | 
|---|
| 2580 | If the `--verbose' option is given, then as it completes each hunk | 
|---|
| 2581 | `patch' tells you whether the hunk succeeded or failed, and if it | 
|---|
| 2582 | failed, on which line (in the new file) `patch' thinks the hunk should | 
|---|
| 2583 | go.  If this is different from the line number specified in the diff, | 
|---|
| 2584 | it tells you the offset.  A single large offset _may_ indicate that | 
|---|
| 2585 | `patch' installed a hunk in the wrong place.  `patch' also tells you if | 
|---|
| 2586 | it used a fuzz factor to make the match, in which case you should also | 
|---|
| 2587 | be slightly suspicious. | 
|---|
| 2588 |  | 
|---|
| 2589 | `patch' cannot tell if the line numbers are off in an `ed' script, | 
|---|
| 2590 | and can only detect wrong line numbers in a normal diff when it finds a | 
|---|
| 2591 | change or delete command.  It may have the same problem with a context | 
|---|
| 2592 | diff using a fuzz factor equal to or greater than the number of lines | 
|---|
| 2593 | of context shown in the diff (typically 3).  In these cases, you should | 
|---|
| 2594 | probably look at a context diff between your original and patched input | 
|---|
| 2595 | files to see if the changes make sense.  Compiling without errors is a | 
|---|
| 2596 | pretty good indication that the patch worked, but not a guarantee. | 
|---|
| 2597 |  | 
|---|
| 2598 | A patch against an empty file applies to a nonexistent file, and vice | 
|---|
| 2599 | versa.  *Note Creating and Removing::. | 
|---|
| 2600 |  | 
|---|
| 2601 | `patch' usually produces the correct results, even when it must make | 
|---|
| 2602 | many guesses.  However, the results are guaranteed only when the patch | 
|---|
| 2603 | is applied to an exact copy of the file that the patch was generated | 
|---|
| 2604 | from. | 
|---|
| 2605 |  | 
|---|
| 2606 |  | 
|---|
| 2607 | File: diff.info,  Node: Dry Runs,  Prev: Inexact,  Up: Imperfect | 
|---|
| 2608 |  | 
|---|
| 2609 | Predicting what `patch' will do | 
|---|
| 2610 | ------------------------------- | 
|---|
| 2611 |  | 
|---|
| 2612 | It may not be obvious in advance what `patch' will do with a | 
|---|
| 2613 | complicated or poorly formatted patch.  If you are concerned that the | 
|---|
| 2614 | input might cause `patch' to modify the wrong files, you can use the | 
|---|
| 2615 | `--dry-run' option, which causes `patch' to print the results of | 
|---|
| 2616 | applying patches without actually changing any files.  You can then | 
|---|
| 2617 | inspect the diagnostics generated by the dry run to see whether `patch' | 
|---|
| 2618 | will modify the files that you expect.  If the patch does not do what | 
|---|
| 2619 | you want, you can modify the patch (or the other options to `patch') | 
|---|
| 2620 | and try another dry run.  Once you are satisfied with the proposed | 
|---|
| 2621 | patch you can apply it by invoking `patch' as before, but this time | 
|---|
| 2622 | without the `--dry-run' option. | 
|---|
| 2623 |  | 
|---|
| 2624 |  | 
|---|
| 2625 | File: diff.info,  Node: Creating and Removing,  Next: Patching Time Stamps,  Prev: Imperfect,  Up: Merging with patch | 
|---|
| 2626 |  | 
|---|
| 2627 | Creating and Removing Files | 
|---|
| 2628 | =========================== | 
|---|
| 2629 |  | 
|---|
| 2630 | Sometimes when comparing two directories, a file may exist in one | 
|---|
| 2631 | directory but not the other.  If you give `diff' the `-N' or | 
|---|
| 2632 | `--new-file' option, or if you supply an old or new file that is named | 
|---|
| 2633 | `/dev/null' or is empty and is dated the Epoch (1970-01-01 00:00:00 | 
|---|
| 2634 | UTC), `diff' outputs a patch that adds or deletes the contents of this | 
|---|
| 2635 | file.  When given such a patch, `patch' normally creates a new file or | 
|---|
| 2636 | removes the old file.  However, when conforming to POSIX (*note patch | 
|---|
| 2637 | and POSIX::), `patch' does not remove the old file, but leaves it empty. | 
|---|
| 2638 | The `-E' or `--remove-empty-files' option causes `patch' to remove | 
|---|
| 2639 | output files that are empty after applying a patch, even if the patch | 
|---|
| 2640 | does not appear to be one that removed the file. | 
|---|
| 2641 |  | 
|---|
| 2642 | If the patch appears to create a file that already exists, `patch' | 
|---|
| 2643 | asks for confirmation before applying the patch. | 
|---|
| 2644 |  | 
|---|
| 2645 |  | 
|---|
| 2646 | File: diff.info,  Node: Patching Time Stamps,  Next: Multiple Patches,  Prev: Creating and Removing,  Up: Merging with patch | 
|---|
| 2647 |  | 
|---|
| 2648 | Updating Time Stamps on Patched Files | 
|---|
| 2649 | ===================================== | 
|---|
| 2650 |  | 
|---|
| 2651 | When `patch' updates a file, it normally sets the file's | 
|---|
| 2652 | last-modified time stamp to the current time of day.  If you are using | 
|---|
| 2653 | `patch' to track a software distribution, this can cause `make' to | 
|---|
| 2654 | incorrectly conclude that a patched file is out of date.  For example, | 
|---|
| 2655 | if `syntax.c' depends on `syntax.y', and `patch' updates `syntax.c' and | 
|---|
| 2656 | then `syntax.y', then `syntax.c' will normally appear to be out of date | 
|---|
| 2657 | with respect to `syntax.y' even though its contents are actually up to | 
|---|
| 2658 | date. | 
|---|
| 2659 |  | 
|---|
| 2660 | The `-Z' or `--set-utc' option causes `patch' to set a patched | 
|---|
| 2661 | file's modification and access times to the time stamps given in | 
|---|
| 2662 | context diff headers.  If the context diff headers do not specify a | 
|---|
| 2663 | time zone, they are assumed to use Coordinated Universal Time (UTC, | 
|---|
| 2664 | often known as GMT). | 
|---|
| 2665 |  | 
|---|
| 2666 | The `-T' or `--set-time' option acts like `-Z' or `--set-utc', | 
|---|
| 2667 | except that it assumes that the context diff headers' time stamps use | 
|---|
| 2668 | local time instead of UTC.  This option is not recommended, because | 
|---|
| 2669 | patches using local time cannot easily be used by people in other time | 
|---|
| 2670 | zones, and because local time stamps are ambiguous when local clocks | 
|---|
| 2671 | move backwards during daylight-saving time adjustments.  If the context | 
|---|
| 2672 | diff headers specify a time zone, this option is equivalent to `-Z' or | 
|---|
| 2673 | `--set-utc'. | 
|---|
| 2674 |  | 
|---|
| 2675 | `patch' normally refrains from setting a file's time stamps if the | 
|---|
| 2676 | file's original last-modified time stamp does not match the time given | 
|---|
| 2677 | in the diff header, of if the file's contents do not exactly match the | 
|---|
| 2678 | patch.  However, if the `-f' or `--force' option is given, the file's | 
|---|
| 2679 | time stamps are set regardless. | 
|---|
| 2680 |  | 
|---|
| 2681 | Due to the limitations of the current `diff' format, `patch' cannot | 
|---|
| 2682 | update the times of files whose contents have not changed.  Also, if | 
|---|
| 2683 | you set file time stamps to values other than the current time of day, | 
|---|
| 2684 | you should also remove (e.g., with `make clean') all files that depend | 
|---|
| 2685 | on the patched files, so that later invocations of `make' do not get | 
|---|
| 2686 | confused by the patched files' times. | 
|---|
| 2687 |  | 
|---|
| 2688 |  | 
|---|
| 2689 | File: diff.info,  Node: Multiple Patches,  Next: patch Directories,  Prev: Patching Time Stamps,  Up: Merging with patch | 
|---|
| 2690 |  | 
|---|
| 2691 | Multiple Patches in a File | 
|---|
| 2692 | ========================== | 
|---|
| 2693 |  | 
|---|
| 2694 | If the patch file contains more than one patch, and if you do not | 
|---|
| 2695 | specify an input file on the command line, `patch' tries to apply each | 
|---|
| 2696 | patch as if they came from separate patch files.  This means that it | 
|---|
| 2697 | determines the name of the file to patch for each patch, and that it | 
|---|
| 2698 | examines the leading text before each patch for file names and | 
|---|
| 2699 | prerequisite revision level (*note Making Patches::, for more on that | 
|---|
| 2700 | topic). | 
|---|
| 2701 |  | 
|---|
| 2702 | `patch' uses the following rules to intuit a file name from the | 
|---|
| 2703 | leading text before a patch.  First, `patch' takes an ordered list of | 
|---|
| 2704 | candidate file names as follows: | 
|---|
| 2705 |  | 
|---|
| 2706 | * If the header is that of a context diff, `patch' takes the old and | 
|---|
| 2707 | new file names in the header.  A name is ignored if it does not | 
|---|
| 2708 | have enough slashes to satisfy the `-pNUM' or `--strip=NUM' | 
|---|
| 2709 | option.  The name `/dev/null' is also ignored. | 
|---|
| 2710 |  | 
|---|
| 2711 | * If there is an `Index:' line in the leading garbage and if either | 
|---|
| 2712 | the old and new names are both absent or if `patch' is conforming | 
|---|
| 2713 | to POSIX, `patch' takes the name in the `Index:' line. | 
|---|
| 2714 |  | 
|---|
| 2715 | * For the purpose of the following rules, the candidate file names | 
|---|
| 2716 | are considered to be in the order (old, new, index), regardless of | 
|---|
| 2717 | the order that they appear in the header. | 
|---|
| 2718 |  | 
|---|
| 2719 | Then `patch' selects a file name from the candidate list as follows: | 
|---|
| 2720 |  | 
|---|
| 2721 | * If some of the named files exist, `patch' selects the first name | 
|---|
| 2722 | if conforming to POSIX, and the best name otherwise. | 
|---|
| 2723 |  | 
|---|
| 2724 | * If `patch' is not ignoring RCS, ClearCase, and SCCS (*note | 
|---|
| 2725 | Revision Control::), and no named files exist but an RCS, | 
|---|
| 2726 | ClearCase, or SCCS master is found, `patch' selects the first | 
|---|
| 2727 | named file with an RCS, ClearCase, or SCCS master. | 
|---|
| 2728 |  | 
|---|
| 2729 | * If no named files exist, no RCS, ClearCase, or SCCS master was | 
|---|
| 2730 | found, some names are given, `patch' is not conforming to POSIX, | 
|---|
| 2731 | and the patch appears to create a file, `patch' selects the best | 
|---|
| 2732 | name requiring the creation of the fewest directories. | 
|---|
| 2733 |  | 
|---|
| 2734 | * If no file name results from the above heuristics, you are asked | 
|---|
| 2735 | for the name of the file to patch, and `patch' selects that name. | 
|---|
| 2736 |  | 
|---|
| 2737 | To determine the "best" of a nonempty list of file names, `patch' | 
|---|
| 2738 | first takes all the names with the fewest path name components; of | 
|---|
| 2739 | those, it then takes all the names with the shortest basename; of | 
|---|
| 2740 | those, it then takes all the shortest names; finally, it takes the | 
|---|
| 2741 | first remaining name. | 
|---|
| 2742 |  | 
|---|
| 2743 | *Note patch and POSIX::, to see whether `patch' is conforming to | 
|---|
| 2744 | POSIX. | 
|---|
| 2745 |  | 
|---|
| 2746 |  | 
|---|
| 2747 | File: diff.info,  Node: patch Directories,  Next: Backups,  Prev: Multiple Patches,  Up: Merging with patch | 
|---|
| 2748 |  | 
|---|
| 2749 | Applying Patches in Other Directories | 
|---|
| 2750 | ===================================== | 
|---|
| 2751 |  | 
|---|
| 2752 | The `-d DIRECTORY' or `--directory=DIRECTORY' option to `patch' | 
|---|
| 2753 | makes directory DIRECTORY the current directory for interpreting both | 
|---|
| 2754 | file names in the patch file, and file names given as arguments to | 
|---|
| 2755 | other options (such as `-B' and `-o').  For example, while in a mail | 
|---|
| 2756 | reading program, you can patch a file in the `/usr/src/emacs' directory | 
|---|
| 2757 | directly from a message containing the patch like this: | 
|---|
| 2758 |  | 
|---|
| 2759 | | patch -d /usr/src/emacs | 
|---|
| 2760 |  | 
|---|
| 2761 | Sometimes the file names given in a patch contain leading | 
|---|
| 2762 | directories, but you keep your files in a directory different from the | 
|---|
| 2763 | one given in the patch.  In those cases, you can use the `-pNUMBER' or | 
|---|
| 2764 | `--strip=NUMBER' option to set the file name strip count to NUMBER. | 
|---|
| 2765 | The strip count tells `patch' how many slashes, along with the directory | 
|---|
| 2766 | names between them, to strip from the front of file names.  A sequence | 
|---|
| 2767 | of one or more adjacent slashes is counted as a single slash.  By | 
|---|
| 2768 | default, `patch' strips off all leading directories, leaving just the | 
|---|
| 2769 | base file names. | 
|---|
| 2770 |  | 
|---|
| 2771 | For example, suppose the file name in the patch file is | 
|---|
| 2772 | `/gnu/src/emacs/etc/NEWS'.  Using `-p0' gives the entire file name | 
|---|
| 2773 | unmodified, `-p1' gives `gnu/src/emacs/etc/NEWS' (no leading slash), | 
|---|
| 2774 | `-p4' gives `etc/NEWS', and not specifying `-p' at all gives `NEWS'. | 
|---|
| 2775 |  | 
|---|
| 2776 | `patch' looks for each file (after any slashes have been stripped) | 
|---|
| 2777 | in the current directory, or if you used the `-d DIRECTORY' option, in | 
|---|
| 2778 | that directory. | 
|---|
| 2779 |  | 
|---|
| 2780 |  | 
|---|
| 2781 | File: diff.info,  Node: Backups,  Next: Backup Names,  Prev: patch Directories,  Up: Merging with patch | 
|---|
| 2782 |  | 
|---|
| 2783 | Backup Files | 
|---|
| 2784 | ============ | 
|---|
| 2785 |  | 
|---|
| 2786 | Normally, `patch' creates a backup file if the patch does not | 
|---|
| 2787 | exactly match the original input file, because in that case the | 
|---|
| 2788 | original data might not be recovered if you undo the patch with `patch | 
|---|
| 2789 | -R' (*note Reversed Patches::).  However, when conforming to POSIX, | 
|---|
| 2790 | `patch' does not create backup files by default.  *Note patch and | 
|---|
| 2791 | POSIX::. | 
|---|
| 2792 |  | 
|---|
| 2793 | The `-b' or `--backup' option causes `patch' to make a backup file | 
|---|
| 2794 | regardless of whether the patch matches the original input.  The | 
|---|
| 2795 | `--backup-if-mismatch' option causes `patch' to create backup files for | 
|---|
| 2796 | mismatches files; this is the default when not conforming to POSIX.  The | 
|---|
| 2797 | `--no-backup-if-mismatch' option causes `patch' to not create backup | 
|---|
| 2798 | files, even for mismatched patches; this is the default when conforming | 
|---|
| 2799 | to POSIX. | 
|---|
| 2800 |  | 
|---|
| 2801 | When backing up a file that does not exist, an empty, unreadable | 
|---|
| 2802 | backup file is created as a placeholder to represent the nonexistent | 
|---|
| 2803 | file. | 
|---|
| 2804 |  | 
|---|
| 2805 |  | 
|---|
| 2806 | File: diff.info,  Node: Backup Names,  Next: Reject Names,  Prev: Backups,  Up: Merging with patch | 
|---|
| 2807 |  | 
|---|
| 2808 | Backup File Names | 
|---|
| 2809 | ================= | 
|---|
| 2810 |  | 
|---|
| 2811 | Normally, `patch' renames an original input file into a backup file | 
|---|
| 2812 | by appending to its name the extension `.orig', or `~' if using `.orig' | 
|---|
| 2813 | would make the backup file name too long.(1)  The `-z BACKUP-SUFFIX' or | 
|---|
| 2814 | `--suffix=BACKUP-SUFFIX' option causes `patch' to use BACKUP-SUFFIX as | 
|---|
| 2815 | the backup extension instead. | 
|---|
| 2816 |  | 
|---|
| 2817 | Alternately, you can specify the extension for backup files with the | 
|---|
| 2818 | `SIMPLE_BACKUP_SUFFIX' environment variable, which the options override. | 
|---|
| 2819 |  | 
|---|
| 2820 | `patch' can also create numbered backup files the way GNU Emacs | 
|---|
| 2821 | does.  With this method, instead of having a single backup of each file, | 
|---|
| 2822 | `patch' makes a new backup file name each time it patches a file.  For | 
|---|
| 2823 | example, the backups of a file named `sink' would be called, | 
|---|
| 2824 | successively, `sink.~1~', `sink.~2~', `sink.~3~', etc. | 
|---|
| 2825 |  | 
|---|
| 2826 | The `-V BACKUP-STYLE' or `--version-control=BACKUP-STYLE' option | 
|---|
| 2827 | takes as an argument a method for creating backup file names.  You can | 
|---|
| 2828 | alternately control the type of backups that `patch' makes with the | 
|---|
| 2829 | `PATCH_VERSION_CONTROL' environment variable, which the `-V' option | 
|---|
| 2830 | overrides.  If `PATCH_VERSION_CONTROL' is not set, the | 
|---|
| 2831 | `VERSION_CONTROL' environment variable is used instead.  Please note | 
|---|
| 2832 | that these options and variables control backup file names; they do not | 
|---|
| 2833 | affect the choice of revision control system (*note Revision Control::). | 
|---|
| 2834 |  | 
|---|
| 2835 | The values of these environment variables and the argument to the | 
|---|
| 2836 | `-V' option are like the GNU Emacs `version-control' variable (*note | 
|---|
| 2837 | Backup Names: (emacs)Backup Names., for more information on backup | 
|---|
| 2838 | versions in Emacs).  They also recognize synonyms that are more | 
|---|
| 2839 | descriptive.  The valid values are listed below; unique abbreviations | 
|---|
| 2840 | are acceptable. | 
|---|
| 2841 |  | 
|---|
| 2842 | `t' | 
|---|
| 2843 | `numbered' | 
|---|
| 2844 | Always make numbered backups. | 
|---|
| 2845 |  | 
|---|
| 2846 | `nil' | 
|---|
| 2847 | `existing' | 
|---|
| 2848 | Make numbered backups of files that already have them, simple | 
|---|
| 2849 | backups of the others.  This is the default. | 
|---|
| 2850 |  | 
|---|
| 2851 | `never' | 
|---|
| 2852 | `simple' | 
|---|
| 2853 | Always make simple backups. | 
|---|
| 2854 |  | 
|---|
| 2855 | You can also tell `patch' to prepend a prefix, such as a directory | 
|---|
| 2856 | name, to produce backup file names.  The `-B PREFIX' or | 
|---|
| 2857 | `--prefix=PREFIX' option makes backup files by prepending PREFIX to | 
|---|
| 2858 | them.  The `-Y PREFIX' or `--basename-prefix=PREFIX' prepends PREFIX to | 
|---|
| 2859 | the last file name component of backup file names instead; for example, | 
|---|
| 2860 | `-Y ~' causes the backup name for `dir/file.c' to be `dir/~file.c'.  If | 
|---|
| 2861 | you use either of these prefix options, the suffix-based options are | 
|---|
| 2862 | ignored. | 
|---|
| 2863 |  | 
|---|
| 2864 | If you specify the output file with the `-o' option, that file is | 
|---|
| 2865 | the one that is backed up, not the input file. | 
|---|
| 2866 |  | 
|---|
| 2867 | Options that affect the names of backup files do not affect whether | 
|---|
| 2868 | backups are made.  For example, if you specify the | 
|---|
| 2869 | `--no-backup-if-mismatch' option, none of the options described in this | 
|---|
| 2870 | section have any affect, because no backups are made. | 
|---|
| 2871 |  | 
|---|
| 2872 | ---------- Footnotes ---------- | 
|---|
| 2873 |  | 
|---|
| 2874 | (1) A coding error in GNU `patch' version 2.5.4 causes it to always | 
|---|
| 2875 | use `~', but this should be fixed in the next release. | 
|---|
| 2876 |  | 
|---|
| 2877 |  | 
|---|
| 2878 | File: diff.info,  Node: Reject Names,  Next: patch Messages,  Prev: Backup Names,  Up: Merging with patch | 
|---|
| 2879 |  | 
|---|
| 2880 | Reject File Names | 
|---|
| 2881 | ================= | 
|---|
| 2882 |  | 
|---|
| 2883 | The names for reject files (files containing patches that `patch' | 
|---|
| 2884 | could not find a place to apply) are normally the name of the output | 
|---|
| 2885 | file with `.rej' appended (or `#' if if using `.rej' would make the | 
|---|
| 2886 | backup file name too long). | 
|---|
| 2887 |  | 
|---|
| 2888 | Alternatively, you can tell `patch' to place all of the rejected | 
|---|
| 2889 | patches in a single file.  The `-r REJECT-FILE' or | 
|---|
| 2890 | `--reject-file=REJECT-FILE' option uses REJECT-FILE as the reject file | 
|---|
| 2891 | name. | 
|---|
| 2892 |  | 
|---|
| 2893 |  | 
|---|
| 2894 | File: diff.info,  Node: patch Messages,  Next: patch and POSIX,  Prev: Reject Names,  Up: Merging with patch | 
|---|
| 2895 |  | 
|---|
| 2896 | Messages and Questions from `patch' | 
|---|
| 2897 | =================================== | 
|---|
| 2898 |  | 
|---|
| 2899 | `patch' can produce a variety of messages, especially if it has | 
|---|
| 2900 | trouble decoding its input.  In a few situations where it's not sure | 
|---|
| 2901 | how to proceed, `patch' normally prompts you for more information from | 
|---|
| 2902 | the keyboard.  There are options to produce more or fewer messages, to | 
|---|
| 2903 | have it not ask for keyboard input, and to affect the way that file | 
|---|
| 2904 | names are quoted in messages. | 
|---|
| 2905 |  | 
|---|
| 2906 | * Menu: | 
|---|
| 2907 |  | 
|---|
| 2908 | * More or Fewer Messages::    Controlling the verbosity of `patch'. | 
|---|
| 2909 | * patch and Keyboard Input::  Inhibiting keyboard input. | 
|---|
| 2910 | * patch Quoting Style::       Quoting file names in diagnostics. | 
|---|
| 2911 |  | 
|---|
| 2912 | `patch' exits with status 0 if all hunks are applied successfully, 1 | 
|---|
| 2913 | if some hunks cannot be applied, and 2 if there is more serious trouble. | 
|---|
| 2914 | When applying a set of patches in a loop, you should check the exit | 
|---|
| 2915 | status, so you don't apply a later patch to a partially patched file. | 
|---|
| 2916 |  | 
|---|
| 2917 |  | 
|---|
| 2918 | File: diff.info,  Node: More or Fewer Messages,  Next: patch and Keyboard Input,  Up: patch Messages | 
|---|
| 2919 |  | 
|---|
| 2920 | Controlling the Verbosity of `patch' | 
|---|
| 2921 | ------------------------------------ | 
|---|
| 2922 |  | 
|---|
| 2923 | You can cause `patch' to produce more messages by using the | 
|---|
| 2924 | `--verbose' option.  For example, when you give this option, the | 
|---|
| 2925 | message `Hmm...' indicates that `patch' is reading text in the patch | 
|---|
| 2926 | file, attempting to determine whether there is a patch in that text, | 
|---|
| 2927 | and if so, what kind of patch it is. | 
|---|
| 2928 |  | 
|---|
| 2929 | You can inhibit all terminal output from `patch', unless an error | 
|---|
| 2930 | occurs, by using the `-s', `--quiet', or `--silent' option. | 
|---|
| 2931 |  | 
|---|
| 2932 |  | 
|---|
| 2933 | File: diff.info,  Node: patch and Keyboard Input,  Next: patch Quoting Style,  Prev: More or Fewer Messages,  Up: patch Messages | 
|---|
| 2934 |  | 
|---|
| 2935 | Inhibiting Keyboard Input | 
|---|
| 2936 | ------------------------- | 
|---|
| 2937 |  | 
|---|
| 2938 | There are two ways you can prevent `patch' from asking you any | 
|---|
| 2939 | questions.  The `-f' or `--force' option assumes that you know what you | 
|---|
| 2940 | are doing.  It causes `patch' to do the following: | 
|---|
| 2941 |  | 
|---|
| 2942 | * Skip patches that do not contain file names in their headers. | 
|---|
| 2943 |  | 
|---|
| 2944 | * Patch files even though they have the wrong version for the | 
|---|
| 2945 | `Prereq:' line in the patch; | 
|---|
| 2946 |  | 
|---|
| 2947 | * Assume that patches are not reversed even if they look like they | 
|---|
| 2948 | are. | 
|---|
| 2949 |  | 
|---|
| 2950 | The `-t' or `--batch' option is similar to `-f', in that it suppresses | 
|---|
| 2951 | questions, but it makes somewhat different assumptions: | 
|---|
| 2952 |  | 
|---|
| 2953 | * Skip patches that do not contain file names in their headers (the | 
|---|
| 2954 | same as `-f'). | 
|---|
| 2955 |  | 
|---|
| 2956 | * Skip patches for which the file has the wrong version for the | 
|---|
| 2957 | `Prereq:' line in the patch; | 
|---|
| 2958 |  | 
|---|
| 2959 | * Assume that patches are reversed if they look like they are. | 
|---|
| 2960 |  | 
|---|
| 2961 |  | 
|---|
| 2962 | File: diff.info,  Node: patch Quoting Style,  Prev: patch and Keyboard Input,  Up: patch Messages | 
|---|
| 2963 |  | 
|---|
| 2964 | `patch' Quoting Style | 
|---|
| 2965 | --------------------- | 
|---|
| 2966 |  | 
|---|
| 2967 | When `patch' outputs a file name in a diagnostic message, it can | 
|---|
| 2968 | format the name in any of several ways.  This can be useful to output | 
|---|
| 2969 | file names unambiguously, even if they contain punctuation or special | 
|---|
| 2970 | characters like newlines.  The `--quoting-style=WORD' option controls | 
|---|
| 2971 | how names are output.  The WORD should be one of the following: | 
|---|
| 2972 |  | 
|---|
| 2973 | `literal' | 
|---|
| 2974 | Output names as-is. | 
|---|
| 2975 |  | 
|---|
| 2976 | `shell' | 
|---|
| 2977 | Quote names for the shell if they contain shell metacharacters or | 
|---|
| 2978 | would cause ambiguous output. | 
|---|
| 2979 |  | 
|---|
| 2980 | `shell-always' | 
|---|
| 2981 | Quote names for the shell, even if they would normally not require | 
|---|
| 2982 | quoting. | 
|---|
| 2983 |  | 
|---|
| 2984 | `c' | 
|---|
| 2985 | Quote names as for a C language string. | 
|---|
| 2986 |  | 
|---|
| 2987 | `escape' | 
|---|
| 2988 | Quote as with `c' except omit the surrounding double-quote | 
|---|
| 2989 | characters. | 
|---|
| 2990 |  | 
|---|
| 2991 | You can specify the default value of the `--quoting-style' option | 
|---|
| 2992 | with the environment variable `QUOTING_STYLE'.  If that environment | 
|---|
| 2993 | variable is not set, the default value is `shell', but this default may | 
|---|
| 2994 | change in a future version of `patch'. | 
|---|
| 2995 |  | 
|---|
| 2996 |  | 
|---|
| 2997 | File: diff.info,  Node: patch and POSIX,  Next: patch and Tradition,  Prev: patch Messages,  Up: Merging with patch | 
|---|
| 2998 |  | 
|---|
| 2999 | `patch' and the POSIX Standard | 
|---|
| 3000 | ============================== | 
|---|
| 3001 |  | 
|---|
| 3002 | If you specify the `--posix' option, or set the `POSIXLY_CORRECT' | 
|---|
| 3003 | environment variable, `patch' conforms more strictly to the POSIX | 
|---|
| 3004 | standard, as follows: | 
|---|
| 3005 |  | 
|---|
| 3006 | * Take the first existing file from the list (old, new, index) when | 
|---|
| 3007 | intuiting file names from diff headers.  *Note Multiple Patches::. | 
|---|
| 3008 |  | 
|---|
| 3009 | * Do not remove files that are removed by a diff.  *Note Creating | 
|---|
| 3010 | and Removing::. | 
|---|
| 3011 |  | 
|---|
| 3012 | * Do not ask whether to get files from RCS, ClearCase, or SCCS. | 
|---|
| 3013 | *Note Revision Control::. | 
|---|
| 3014 |  | 
|---|
| 3015 | * Require that all options precede the files in the command line. | 
|---|
| 3016 |  | 
|---|
| 3017 | * Do not backup files, even when there is a mismatch.  *Note | 
|---|
| 3018 | Backups::. | 
|---|
| 3019 |  | 
|---|
| 3020 |  | 
|---|
| 3021 |  | 
|---|
| 3022 | File: diff.info,  Node: patch and Tradition,  Prev: patch and POSIX,  Up: Merging with patch | 
|---|
| 3023 |  | 
|---|
| 3024 | GNU `patch' and Traditional `patch' | 
|---|
| 3025 | =================================== | 
|---|
| 3026 |  | 
|---|
| 3027 | The current version of GNU `patch' normally follows the POSIX | 
|---|
| 3028 | standard.  *Note patch and POSIX::, for the few exceptions to this | 
|---|
| 3029 | general rule. | 
|---|
| 3030 |  | 
|---|
| 3031 | Unfortunately, POSIX redefined the behavior of `patch' in several | 
|---|
| 3032 | important ways.  You should be aware of the following differences if | 
|---|
| 3033 | you must interoperate with traditional `patch', or with GNU `patch' | 
|---|
| 3034 | version 2.1 and earlier. | 
|---|
| 3035 |  | 
|---|
| 3036 | * In traditional `patch', the `-p' option's operand was optional, | 
|---|
| 3037 | and a bare `-p' was equivalent to `-p0'.  The `-p' option now | 
|---|
| 3038 | requires an operand, and `-p 0' is now equivalent to `-p0'.  For | 
|---|
| 3039 | maximum compatibility, use options like `-p0' and `-p1'. | 
|---|
| 3040 |  | 
|---|
| 3041 | Also, traditional `patch' simply counted slashes when stripping | 
|---|
| 3042 | path prefixes; `patch' now counts pathname components.  That is, a | 
|---|
| 3043 | sequence of one or more adjacent slashes now counts as a single | 
|---|
| 3044 | slash.  For maximum portability, avoid sending patches containing | 
|---|
| 3045 | `//' in file names. | 
|---|
| 3046 |  | 
|---|
| 3047 | * In traditional `patch', backups were enabled by default.  This | 
|---|
| 3048 | behavior is now enabled with the `-b' or `--backup' option. | 
|---|
| 3049 |  | 
|---|
| 3050 | Conversely, in POSIX `patch', backups are never made, even when | 
|---|
| 3051 | there is a mismatch.  In GNU `patch', this behavior is enabled | 
|---|
| 3052 | with the `--no-backup-if-mismatch' option, or by conforming to | 
|---|
| 3053 | POSIX. | 
|---|
| 3054 |  | 
|---|
| 3055 | The `-b SUFFIX' option of traditional `patch' is equivalent to the | 
|---|
| 3056 | `-b -z SUFFIX' options of GNU `patch'. | 
|---|
| 3057 |  | 
|---|
| 3058 | * Traditional `patch' used a complicated (and incompletely | 
|---|
| 3059 | documented) method to intuit the name of the file to be patched | 
|---|
| 3060 | from the patch header.  This method did not conform to POSIX, and | 
|---|
| 3061 | had a few gotchas.  Now `patch' uses a different, equally | 
|---|
| 3062 | complicated (but better documented) method that is optionally | 
|---|
| 3063 | POSIX-conforming; we hope it has fewer gotchas.  The two methods | 
|---|
| 3064 | are compatible if the file names in the context diff header and the | 
|---|
| 3065 | `Index:' line are all identical after prefix-stripping.  Your | 
|---|
| 3066 | patch is normally compatible if each header's file names all | 
|---|
| 3067 | contain the same number of slashes. | 
|---|
| 3068 |  | 
|---|
| 3069 | * When traditional `patch' asked the user a question, it sent the | 
|---|
| 3070 | question to standard error and looked for an answer from the first | 
|---|
| 3071 | file in the following list that was a terminal: standard error, | 
|---|
| 3072 | standard output, `/dev/tty', and standard input.  Now `patch' | 
|---|
| 3073 | sends questions to standard output and gets answers from | 
|---|
| 3074 | `/dev/tty'.  Defaults for some answers have been changed so that | 
|---|
| 3075 | `patch' never goes into an infinite loop when using default | 
|---|
| 3076 | answers. | 
|---|
| 3077 |  | 
|---|
| 3078 | * Traditional `patch' exited with a status value that counted the | 
|---|
| 3079 | number of bad hunks, or with status 1 if there was real trouble. | 
|---|
| 3080 | Now `patch' exits with status 1 if some hunks failed, or with 2 if | 
|---|
| 3081 | there was real trouble. | 
|---|
| 3082 |  | 
|---|
| 3083 | * Limit yourself to the following options when sending instructions | 
|---|
| 3084 | meant to be executed by anyone running GNU `patch', traditional | 
|---|
| 3085 | `patch', or a `patch' that conforms to POSIX.  Spaces are | 
|---|
| 3086 | significant in the following list, and operands are required. | 
|---|
| 3087 |  | 
|---|
| 3088 | `-c' | 
|---|
| 3089 | `-d DIR' | 
|---|
| 3090 | `-D DEFINE' | 
|---|
| 3091 | `-e' | 
|---|
| 3092 | `-l' | 
|---|
| 3093 | `-n' | 
|---|
| 3094 | `-N' | 
|---|
| 3095 | `-o OUTFILE' | 
|---|
| 3096 | `-pNUM' | 
|---|
| 3097 | `-R' | 
|---|
| 3098 | `-r REJECTFILE' | 
|---|
| 3099 |  | 
|---|
| 3100 |  | 
|---|
| 3101 |  | 
|---|
| 3102 | File: diff.info,  Node: Making Patches,  Next: Invoking cmp,  Prev: Merging with patch,  Up: Top | 
|---|
| 3103 |  | 
|---|
| 3104 | Tips for Making and Using Patches | 
|---|
| 3105 | ********************************* | 
|---|
| 3106 |  | 
|---|
| 3107 | Use some common sense when making and using patches.  For example, | 
|---|
| 3108 | when sending bug fixes to a program's maintainer, send several small | 
|---|
| 3109 | patches, one per independent subject, instead of one large, | 
|---|
| 3110 | harder-to-digest patch that covers all the subjects. | 
|---|
| 3111 |  | 
|---|
| 3112 | Here are some other things you should keep in mind if you are going | 
|---|
| 3113 | to distribute patches for updating a software package. | 
|---|
| 3114 |  | 
|---|
| 3115 | * Menu: | 
|---|
| 3116 |  | 
|---|
| 3117 | * Tips for Patch Producers::    Advice for making patches. | 
|---|
| 3118 | * Tips for Patch Consumers::    Advice for using patches. | 
|---|
| 3119 | * Avoiding Common Mistakes::    Avoiding common mistakes when using `patch'. | 
|---|
| 3120 | * Generating Smaller Patches::  How to generate smaller patches. | 
|---|
| 3121 |  | 
|---|
| 3122 |  | 
|---|
| 3123 | File: diff.info,  Node: Tips for Patch Producers,  Next: Tips for Patch Consumers,  Up: Making Patches | 
|---|
| 3124 |  | 
|---|
| 3125 | Tips for Patch Producers | 
|---|
| 3126 | ======================== | 
|---|
| 3127 |  | 
|---|
| 3128 | To create a patch that changes an older version of a package into a | 
|---|
| 3129 | newer version, first make a copy of the older and newer versions in | 
|---|
| 3130 | adjacent subdirectories.  It is common to do that by unpacking `tar' | 
|---|
| 3131 | archives of the two versions. | 
|---|
| 3132 |  | 
|---|
| 3133 | To generate the patch, use the command `diff -Naur OLD NEW' where | 
|---|
| 3134 | OLD and NEW identify the old and new directories.  The names OLD and | 
|---|
| 3135 | NEW should not contain any slashes.  The `-N' option lets the patch | 
|---|
| 3136 | create and remove files; `-a' lets the patch update non-text files; `-u' | 
|---|
| 3137 | generates useful time stamps and enough context; and `-r' lets the | 
|---|
| 3138 | patch update subdirectories.  Here is an example command, using Bourne | 
|---|
| 3139 | shell syntax: | 
|---|
| 3140 |  | 
|---|
| 3141 | diff -Naur gcc-3.0.3 gcc-3.0.4 | 
|---|
| 3142 |  | 
|---|
| 3143 | Tell your recipients how to apply the patches.  This should include | 
|---|
| 3144 | which working directory to use, and which `patch' options to use; the | 
|---|
| 3145 | option `-p1' is recommended.  Test your procedure by pretending to be a | 
|---|
| 3146 | recipient and applying your patches to a copy of the original files. | 
|---|
| 3147 |  | 
|---|
| 3148 | *Note Avoiding Common Mistakes::, for how to avoid common mistakes | 
|---|
| 3149 | when generating a patch. | 
|---|
| 3150 |  | 
|---|
| 3151 |  | 
|---|
| 3152 | File: diff.info,  Node: Tips for Patch Consumers,  Next: Avoiding Common Mistakes,  Prev: Tips for Patch Producers,  Up: Making Patches | 
|---|
| 3153 |  | 
|---|
| 3154 | Tips for Patch Consumers | 
|---|
| 3155 | ======================== | 
|---|
| 3156 |  | 
|---|
| 3157 | A patch producer should tell recipients how to apply the patches, so | 
|---|
| 3158 | the first rule of thumb for a patch consumer is to follow the | 
|---|
| 3159 | instructions supplied with the patch. | 
|---|
| 3160 |  | 
|---|
| 3161 | GNU `diff' can analyze files with arbitrarily long lines and files | 
|---|
| 3162 | that end in incomplete lines.  However, older versions of `patch' | 
|---|
| 3163 | cannot patch such files.  If you are having trouble applying such | 
|---|
| 3164 | patches, try upgrading to a recent version of GNU `patch'. | 
|---|
| 3165 |  | 
|---|
| 3166 |  | 
|---|
| 3167 | File: diff.info,  Node: Avoiding Common Mistakes,  Next: Generating Smaller Patches,  Prev: Tips for Patch Consumers,  Up: Making Patches | 
|---|
| 3168 |  | 
|---|
| 3169 | Avoiding Common Mistakes | 
|---|
| 3170 | ======================== | 
|---|
| 3171 |  | 
|---|
| 3172 | When producing a patch for multiple files, apply `diff' to | 
|---|
| 3173 | directories whose names do not have slashes.  This reduces confusion | 
|---|
| 3174 | when the patch consumer specifies the `-pNUMBER' option, since this | 
|---|
| 3175 | option can have surprising results when the old and new file names have | 
|---|
| 3176 | different numbers of slashes.  For example, do not send a patch with a | 
|---|
| 3177 | header that looks like this: | 
|---|
| 3178 |  | 
|---|
| 3179 | diff -Naur v2.0.29/prog/README prog/README | 
|---|
| 3180 | --- v2.0.29/prog/README    2002-03-10 23:30:39.942229878 -0800 | 
|---|
| 3181 | +++ prog/README    2002-03-17 20:49:32.442260588 -0800 | 
|---|
| 3182 |  | 
|---|
| 3183 | because the two file names have different numbers of slashes, and | 
|---|
| 3184 | different versions of `patch' interpret the file names differently.  To | 
|---|
| 3185 | avoid confusion, send output that looks like this instead: | 
|---|
| 3186 |  | 
|---|
| 3187 | diff -Naur v2.0.29/prog/README v2.0.30/prog/README | 
|---|
| 3188 | --- v2.0.29/prog/README    2002-03-10 23:30:39.942229878 -0800 | 
|---|
| 3189 | +++ v2.0.30/prog/README    2002-03-17 20:49:32.442260588 -0800 | 
|---|
| 3190 |  | 
|---|
| 3191 | Make sure you have specified the file names correctly, either in a | 
|---|
| 3192 | context diff header or with an `Index:' line.  Take care to not send out | 
|---|
| 3193 | reversed patches, since these make people wonder whether they have | 
|---|
| 3194 | already applied the patch. | 
|---|
| 3195 |  | 
|---|
| 3196 | Avoid sending patches that compare backup file names like | 
|---|
| 3197 | `README.orig' or `README~', since this might confuse `patch' into | 
|---|
| 3198 | patching a backup file instead of the real file.  Instead, send patches | 
|---|
| 3199 | that compare the same base file names in different directories, e.g. | 
|---|
| 3200 | `old/README' and `new/README'. | 
|---|
| 3201 |  | 
|---|
| 3202 | To save people from partially applying a patch before other patches | 
|---|
| 3203 | that should have gone before it, you can make the first patch in the | 
|---|
| 3204 | patch file update a file with a name like `patchlevel.h' or | 
|---|
| 3205 | `version.c', which contains a patch level or version number.  If the | 
|---|
| 3206 | input file contains the wrong version number, `patch' will complain | 
|---|
| 3207 | immediately. | 
|---|
| 3208 |  | 
|---|
| 3209 | An even clearer way to prevent this problem is to put a `Prereq:' | 
|---|
| 3210 | line before the patch.  If the leading text in the patch file contains a | 
|---|
| 3211 | line that starts with `Prereq:', `patch' takes the next word from that | 
|---|
| 3212 | line (normally a version number) and checks whether the next input file | 
|---|
| 3213 | contains that word, preceded and followed by either white space or a | 
|---|
| 3214 | newline.  If not, `patch' prompts you for confirmation before | 
|---|
| 3215 | proceeding.  This makes it difficult to accidentally apply patches in | 
|---|
| 3216 | the wrong order. | 
|---|
| 3217 |  | 
|---|
| 3218 |  | 
|---|
| 3219 | File: diff.info,  Node: Generating Smaller Patches,  Prev: Avoiding Common Mistakes,  Up: Making Patches | 
|---|
| 3220 |  | 
|---|
| 3221 | Generating Smaller Patches | 
|---|
| 3222 | ========================== | 
|---|
| 3223 |  | 
|---|
| 3224 | The simplest way to generate a patch is to use `diff -Naur' (*note | 
|---|
| 3225 | Tips for Patch Producers::), but you might be able to reduce the size | 
|---|
| 3226 | of the patch by renaming or removing some files before making the | 
|---|
| 3227 | patch.  If the older version of the package contains any files that the | 
|---|
| 3228 | newer version does not, or if any files have been renamed between the | 
|---|
| 3229 | two versions, make a list of `rm' and `mv' commands for the user to | 
|---|
| 3230 | execute in the old version directory before applying the patch.  Then | 
|---|
| 3231 | run those commands yourself in the scratch directory. | 
|---|
| 3232 |  | 
|---|
| 3233 | If there are any files that you don't need to include in the patch | 
|---|
| 3234 | because they can easily be rebuilt from other files (for example, | 
|---|
| 3235 | `TAGS' and output from `yacc' and `makeinfo'), exclude them from the | 
|---|
| 3236 | patch by giving `diff' the `-x PATTERN' option (*note Comparing | 
|---|
| 3237 | Directories::).  If you want your patch to modify a derived file | 
|---|
| 3238 | because your recipients lack tools to build it, make sure that the | 
|---|
| 3239 | patch for the derived file follows any patches for files that it | 
|---|
| 3240 | depends on, so that the recipients' time stamps will not confuse `make'. | 
|---|
| 3241 |  | 
|---|
| 3242 | Now you can create the patch using `diff -Naur'.  Make sure to | 
|---|
| 3243 | specify the scratch directory first and the newer directory second. | 
|---|
| 3244 |  | 
|---|
| 3245 | Add to the top of the patch a note telling the user any `rm' and | 
|---|
| 3246 | `mv' commands to run before applying the patch.  Then you can remove | 
|---|
| 3247 | the scratch directory. | 
|---|
| 3248 |  | 
|---|
| 3249 | You can also shrink the patch size by using fewer lines of context, | 
|---|
| 3250 | but bear in mind that `patch' typically needs at least two lines for | 
|---|
| 3251 | proper operation when patches do not exactly match the input files. | 
|---|
| 3252 |  | 
|---|
| 3253 |  | 
|---|
| 3254 | File: diff.info,  Node: Invoking cmp,  Next: Invoking diff,  Prev: Making Patches,  Up: Top | 
|---|
| 3255 |  | 
|---|
| 3256 | Invoking `cmp' | 
|---|
| 3257 | ************** | 
|---|
| 3258 |  | 
|---|
| 3259 | The `cmp' command compares two files, and if they differ, tells the | 
|---|
| 3260 | first byte and line number where they differ.  Bytes and lines are | 
|---|
| 3261 | numbered starting with 1.  The arguments of `cmp' are as follows: | 
|---|
| 3262 |  | 
|---|
| 3263 | cmp OPTIONS... FROM-FILE [TO-FILE [FROM-SKIP [TO-SKIP]]] | 
|---|
| 3264 |  | 
|---|
| 3265 | The file name `-' is always the standard input.  `cmp' also uses the | 
|---|
| 3266 | standard input if one file name is omitted.  The FROM-SKIP and TO-SKIP | 
|---|
| 3267 | operands specify how many bytes to ignore at the start of each file; | 
|---|
| 3268 | they are equivalent to the `--ignore-initial=FROM-SKIP:TO-SKIP' option. | 
|---|
| 3269 |  | 
|---|
| 3270 | An exit status of 0 means no differences were found, 1 means some | 
|---|
| 3271 | differences were found, and 2 means trouble. | 
|---|
| 3272 |  | 
|---|
| 3273 | * Menu: | 
|---|
| 3274 |  | 
|---|
| 3275 | * cmp Options:: Summary of options to `cmp'. | 
|---|
| 3276 |  | 
|---|
| 3277 |  | 
|---|
| 3278 | File: diff.info,  Node: cmp Options,  Up: Invoking cmp | 
|---|
| 3279 |  | 
|---|
| 3280 | Options to `cmp' | 
|---|
| 3281 | ================ | 
|---|
| 3282 |  | 
|---|
| 3283 | Below is a summary of all of the options that GNU `cmp' accepts. | 
|---|
| 3284 | Most options have two equivalent names, one of which is a single letter | 
|---|
| 3285 | preceded by `-', and the other of which is a long name preceded by | 
|---|
| 3286 | `--'.  Multiple single letter options (unless they take an argument) | 
|---|
| 3287 | can be combined into a single command line word: `-bl' is equivalent to | 
|---|
| 3288 | `-b -l'. | 
|---|
| 3289 |  | 
|---|
| 3290 | `-b' | 
|---|
| 3291 | `--print-bytes' | 
|---|
| 3292 | Print the differing bytes.  Display control bytes as a `^' | 
|---|
| 3293 | followed by a letter of the alphabet and precede bytes that have | 
|---|
| 3294 | the high bit set with `M-' (which stands for "meta"). | 
|---|
| 3295 |  | 
|---|
| 3296 | `--help' | 
|---|
| 3297 | Output a summary of usage and then exit. | 
|---|
| 3298 |  | 
|---|
| 3299 | `-i SKIP' | 
|---|
| 3300 | `--ignore-initial=SKIP' | 
|---|
| 3301 | Ignore any differences in the first SKIP bytes of the input files. | 
|---|
| 3302 | Treat files with fewer than SKIP bytes as if they are empty.  If | 
|---|
| 3303 | SKIP is of the form `FROM-SKIP:TO-SKIP', skip the first FROM-SKIP | 
|---|
| 3304 | bytes of the first input file and the first TO-SKIP bytes of the | 
|---|
| 3305 | second. | 
|---|
| 3306 |  | 
|---|
| 3307 | `-l' | 
|---|
| 3308 | `--verbose' | 
|---|
| 3309 | Print the (decimal) byte numbers and (octal) values of all | 
|---|
| 3310 | differing bytes. | 
|---|
| 3311 |  | 
|---|
| 3312 | `-n COUNT' | 
|---|
| 3313 | `--bytes=COUNT' | 
|---|
| 3314 | Compare at most COUNT input bytes. | 
|---|
| 3315 |  | 
|---|
| 3316 | `-s' | 
|---|
| 3317 | `--quiet' | 
|---|
| 3318 | `--silent' | 
|---|
| 3319 | Do not print anything; only return an exit status indicating | 
|---|
| 3320 | whether the files differ. | 
|---|
| 3321 |  | 
|---|
| 3322 | `-v' | 
|---|
| 3323 | `--version' | 
|---|
| 3324 | Output version information and then exit. | 
|---|
| 3325 |  | 
|---|
| 3326 | In the above table, operands that are byte counts are normally | 
|---|
| 3327 | decimal, but may be preceded by `0' for octal and `0x' for hexadecimal. | 
|---|
| 3328 |  | 
|---|
| 3329 | A byte count can be followed by a suffix to specify a multiple of | 
|---|
| 3330 | that count; in this case an omitted integer is understood to be 1.  A | 
|---|
| 3331 | bare size letter, or one followed by `iB', specifies a multiple using | 
|---|
| 3332 | powers of 1024.  A size letter followed by `B' specifies powers of 1000 | 
|---|
| 3333 | instead.  For example, `-n 4M' and `-n 4MiB' are equivalent to `-n | 
|---|
| 3334 | 4194304', whereas `-n 4MB' is equivalent to `-n 4000000'.  This | 
|---|
| 3335 | notation is upward compatible with the SI prefixes | 
|---|
| 3336 | (http://www.bipm.fr/enus/3_SI/si-prefixes.html) for decimal multiples | 
|---|
| 3337 | and with the IEC 60027-2 prefixes for binary multiples | 
|---|
| 3338 | (http://physics.nist.gov/cuu/Units/binary.html). | 
|---|
| 3339 |  | 
|---|
| 3340 | The following suffixes are defined.  Large sizes like `1Y' may be | 
|---|
| 3341 | rejected by your computer due to limitations of its arithmetic. | 
|---|
| 3342 |  | 
|---|
| 3343 | `kB' | 
|---|
| 3344 | kilobyte: 10^3 = 1000. | 
|---|
| 3345 |  | 
|---|
| 3346 | `k' | 
|---|
| 3347 | `K' | 
|---|
| 3348 | `KiB' | 
|---|
| 3349 | kibibyte: 2^10 = 1024.  `K' is special: the SI prefix is `k' and | 
|---|
| 3350 | the IEC 60027-2 prefix is `Ki', but tradition and POSIX use `k' to | 
|---|
| 3351 | mean `KiB'. | 
|---|
| 3352 |  | 
|---|
| 3353 | `MB' | 
|---|
| 3354 | megabyte: 10^6 = 1,000,000. | 
|---|
| 3355 |  | 
|---|
| 3356 | `M' | 
|---|
| 3357 | `MiB' | 
|---|
| 3358 | mebibyte: 2^20 = 1,048,576. | 
|---|
| 3359 |  | 
|---|
| 3360 | `GB' | 
|---|
| 3361 | gigabyte: 10^9 = 1,000,000,000. | 
|---|
| 3362 |  | 
|---|
| 3363 | `G' | 
|---|
| 3364 | `GiB' | 
|---|
| 3365 | gibibyte: 2^30 = 1,073,741,824. | 
|---|
| 3366 |  | 
|---|
| 3367 | `TB' | 
|---|
| 3368 | terabyte:  10^12 = 1,000,000,000,000. | 
|---|
| 3369 |  | 
|---|
| 3370 | `T' | 
|---|
| 3371 | `TiB' | 
|---|
| 3372 | tebibyte: 2^40 = 1,099,511,627,776. | 
|---|
| 3373 |  | 
|---|
| 3374 | `PB' | 
|---|
| 3375 | petabyte: 10^15 = 1,000,000,000,000,000. | 
|---|
| 3376 |  | 
|---|
| 3377 | `P' | 
|---|
| 3378 | `PiB' | 
|---|
| 3379 | pebibyte: 2^50 = 1,125,899,906,842,624. | 
|---|
| 3380 |  | 
|---|
| 3381 | `EB' | 
|---|
| 3382 | exabyte: 10^18 = 1,000,000,000,000,000,000. | 
|---|
| 3383 |  | 
|---|
| 3384 | `E' | 
|---|
| 3385 | `EiB' | 
|---|
| 3386 | exbibyte: 2^60 = 1,152,921,504,606,846,976. | 
|---|
| 3387 |  | 
|---|
| 3388 | `ZB' | 
|---|
| 3389 | zettabyte: 10^21 = 1,000,000,000,000,000,000,000 | 
|---|
| 3390 |  | 
|---|
| 3391 | `Z' | 
|---|
| 3392 | `ZiB' | 
|---|
| 3393 | 2^70 = 1,180,591,620,717,411,303,424.  (`Zi' is a GNU extension to | 
|---|
| 3394 | IEC 60027-2.) | 
|---|
| 3395 |  | 
|---|
| 3396 | `YB' | 
|---|
| 3397 | yottabyte: 10^24 = 1,000,000,000,000,000,000,000,000. | 
|---|
| 3398 |  | 
|---|
| 3399 | `Y' | 
|---|
| 3400 | `YiB' | 
|---|
| 3401 | 2^80 = 1,208,925,819,614,629,174,706,176.  (`Yi' is a GNU | 
|---|
| 3402 | extension to IEC 60027-2.) | 
|---|
| 3403 |  | 
|---|
| 3404 |  | 
|---|
| 3405 | File: diff.info,  Node: Invoking diff,  Next: Invoking diff3,  Prev: Invoking cmp,  Up: Top | 
|---|
| 3406 |  | 
|---|
| 3407 | Invoking `diff' | 
|---|
| 3408 | *************** | 
|---|
| 3409 |  | 
|---|
| 3410 | The format for running the `diff' command is: | 
|---|
| 3411 |  | 
|---|
| 3412 | diff OPTIONS... FILES... | 
|---|
| 3413 |  | 
|---|
| 3414 | In the simplest case, two file names FROM-FILE and TO-FILE are | 
|---|
| 3415 | given, and `diff' compares the contents of FROM-FILE and TO-FILE.  A | 
|---|
| 3416 | file name of `-' stands for text read from the standard input.  As a | 
|---|
| 3417 | special case, `diff - -' compares a copy of standard input to itself. | 
|---|
| 3418 |  | 
|---|
| 3419 | If one file is a directory and the other is not, `diff' compares the | 
|---|
| 3420 | file in the directory whose name is that of the non-directory.  The | 
|---|
| 3421 | non-directory file must not be `-'. | 
|---|
| 3422 |  | 
|---|
| 3423 | If two file names are given and both are directories, `diff' | 
|---|
| 3424 | compares corresponding files in both directories, in alphabetical | 
|---|
| 3425 | order; this comparison is not recursive unless the `-r' or | 
|---|
| 3426 | `--recursive' option is given.  `diff' never compares the actual | 
|---|
| 3427 | contents of a directory as if it were a file.  The file that is fully | 
|---|
| 3428 | specified may not be standard input, because standard input is nameless | 
|---|
| 3429 | and the notion of "file with the same name" does not apply. | 
|---|
| 3430 |  | 
|---|
| 3431 | If the `--from-file=FILE' option is given, the number of file names | 
|---|
| 3432 | is arbitrary, and FILE is compared to each named file.  Similarly, if | 
|---|
| 3433 | the `--to-file=FILE' option is given, each named file is compared to | 
|---|
| 3434 | FILE. | 
|---|
| 3435 |  | 
|---|
| 3436 | `diff' options begin with `-', so normally file names may not begin | 
|---|
| 3437 | with `-'.  However, `--' as an argument by itself treats the remaining | 
|---|
| 3438 | arguments as file names even if they begin with `-'. | 
|---|
| 3439 |  | 
|---|
| 3440 | An exit status of 0 means no differences were found, 1 means some | 
|---|
| 3441 | differences were found, and 2 means trouble. | 
|---|
| 3442 |  | 
|---|
| 3443 | * Menu: | 
|---|
| 3444 |  | 
|---|
| 3445 | * diff Options:: Summary of options to `diff'. | 
|---|
| 3446 |  | 
|---|
| 3447 |  | 
|---|
| 3448 | File: diff.info,  Node: diff Options,  Up: Invoking diff | 
|---|
| 3449 |  | 
|---|
| 3450 | Options to `diff' | 
|---|
| 3451 | ================= | 
|---|
| 3452 |  | 
|---|
| 3453 | Below is a summary of all of the options that GNU `diff' accepts. | 
|---|
| 3454 | Most options have two equivalent names, one of which is a single letter | 
|---|
| 3455 | preceded by `-', and the other of which is a long name preceded by | 
|---|
| 3456 | `--'.  Multiple single letter options (unless they take an argument) | 
|---|
| 3457 | can be combined into a single command line word: `-ac' is equivalent to | 
|---|
| 3458 | `-a -c'.  Long named options can be abbreviated to any unique prefix of | 
|---|
| 3459 | their name.  Brackets ([ and ]) indicate that an option takes an | 
|---|
| 3460 | optional argument. | 
|---|
| 3461 |  | 
|---|
| 3462 | `-a' | 
|---|
| 3463 | `--text' | 
|---|
| 3464 | Treat all files as text and compare them line-by-line, even if they | 
|---|
| 3465 | do not seem to be text.  *Note Binary::. | 
|---|
| 3466 |  | 
|---|
| 3467 | `-b' | 
|---|
| 3468 | `--ignore-space-change' | 
|---|
| 3469 | Ignore changes in amount of white space.  *Note White Space::. | 
|---|
| 3470 |  | 
|---|
| 3471 | `-B' | 
|---|
| 3472 | `--ignore-blank-lines' | 
|---|
| 3473 | Ignore changes that just insert or delete blank lines.  *Note | 
|---|
| 3474 | Blank Lines::. | 
|---|
| 3475 |  | 
|---|
| 3476 | `--binary' | 
|---|
| 3477 | Read and write data in binary mode.  *Note Binary::. | 
|---|
| 3478 |  | 
|---|
| 3479 | `-c' | 
|---|
| 3480 | Use the context output format, showing three lines of context. | 
|---|
| 3481 | *Note Context Format::. | 
|---|
| 3482 |  | 
|---|
| 3483 | `-C LINES' | 
|---|
| 3484 | `--context[=LINES]' | 
|---|
| 3485 | Use the context output format, showing LINES (an integer) lines of | 
|---|
| 3486 | context, or three if LINES is not given.  *Note Context Format::. | 
|---|
| 3487 | For proper operation, `patch' typically needs at least two lines of | 
|---|
| 3488 | context. | 
|---|
| 3489 |  | 
|---|
| 3490 | On older systems, `diff' supports an obsolete option `-LINES' that | 
|---|
| 3491 | has effect when combined with `-c' or `-p'.  POSIX 1003.1-2001 | 
|---|
| 3492 | (*note Standards conformance::) does not allow this; use `-C LINES' | 
|---|
| 3493 | instead. | 
|---|
| 3494 |  | 
|---|
| 3495 | `--changed-group-format=FORMAT' | 
|---|
| 3496 | Use FORMAT to output a line group containing differing lines from | 
|---|
| 3497 | both files in if-then-else format.  *Note Line Group Formats::. | 
|---|
| 3498 |  | 
|---|
| 3499 | `-d' | 
|---|
| 3500 | `--minimal' | 
|---|
| 3501 | Change the algorithm perhaps find a smaller set of changes.  This | 
|---|
| 3502 | makes `diff' slower (sometimes much slower).  *Note diff | 
|---|
| 3503 | Performance::. | 
|---|
| 3504 |  | 
|---|
| 3505 | `-D NAME' | 
|---|
| 3506 | `--ifdef=NAME' | 
|---|
| 3507 | Make merged `#ifdef' format output, conditional on the preprocessor | 
|---|
| 3508 | macro NAME.  *Note If-then-else::. | 
|---|
| 3509 |  | 
|---|
| 3510 | `-e' | 
|---|
| 3511 | `--ed' | 
|---|
| 3512 | Make output that is a valid `ed' script.  *Note ed Scripts::. | 
|---|
| 3513 |  | 
|---|
| 3514 | `-E' | 
|---|
| 3515 | `--ignore-tab-expansion' | 
|---|
| 3516 | Ignore changes due to tab expansion.  *Note White Space::. | 
|---|
| 3517 |  | 
|---|
| 3518 | `-f' | 
|---|
| 3519 | `--forward-ed' | 
|---|
| 3520 | Make output that looks vaguely like an `ed' script but has changes | 
|---|
| 3521 | in the order they appear in the file.  *Note Forward ed::. | 
|---|
| 3522 |  | 
|---|
| 3523 | `-F REGEXP' | 
|---|
| 3524 | `--show-function-line=REGEXP' | 
|---|
| 3525 | In context and unified format, for each hunk of differences, show | 
|---|
| 3526 | some of the last preceding line that matches REGEXP.  *Note | 
|---|
| 3527 | Specified Headings::. | 
|---|
| 3528 |  | 
|---|
| 3529 | `--from-file=FILE' | 
|---|
| 3530 | Compare FILE to each operand; FILE may be a directory. | 
|---|
| 3531 |  | 
|---|
| 3532 | `--help' | 
|---|
| 3533 | Output a summary of usage and then exit. | 
|---|
| 3534 |  | 
|---|
| 3535 | `--horizon-lines=LINES' | 
|---|
| 3536 | Do not discard the last LINES lines of the common prefix and the | 
|---|
| 3537 | first LINES lines of the common suffix.  *Note diff Performance::. | 
|---|
| 3538 |  | 
|---|
| 3539 | `-i' | 
|---|
| 3540 | `--ignore-case' | 
|---|
| 3541 | Ignore changes in case; consider upper- and lower-case letters | 
|---|
| 3542 | equivalent.  *Note Case Folding::. | 
|---|
| 3543 |  | 
|---|
| 3544 | `-I REGEXP' | 
|---|
| 3545 | `--ignore-matching-lines=REGEXP' | 
|---|
| 3546 | Ignore changes that just insert or delete lines that match REGEXP. | 
|---|
| 3547 | *Note Specified Folding::. | 
|---|
| 3548 |  | 
|---|
| 3549 | `--ignore-file-name-case' | 
|---|
| 3550 | Ignore case when comparing file names during recursive comparison. | 
|---|
| 3551 | *Note Comparing Directories::. | 
|---|
| 3552 |  | 
|---|
| 3553 | `-l' | 
|---|
| 3554 | `--paginate' | 
|---|
| 3555 | Pass the output through `pr' to paginate it.  *Note Pagination::. | 
|---|
| 3556 |  | 
|---|
| 3557 | `--label=LABEL' | 
|---|
| 3558 | Use LABEL instead of the file name in the context format (*note | 
|---|
| 3559 | Context Format::) and unified format (*note Unified Format::) | 
|---|
| 3560 | headers.  *Note RCS::. | 
|---|
| 3561 |  | 
|---|
| 3562 | `--left-column' | 
|---|
| 3563 | Print only the left column of two common lines in side by side | 
|---|
| 3564 | format.  *Note Side by Side Format::. | 
|---|
| 3565 |  | 
|---|
| 3566 | `--line-format=FORMAT' | 
|---|
| 3567 | Use FORMAT to output all input lines in if-then-else format. | 
|---|
| 3568 | *Note Line Formats::. | 
|---|
| 3569 |  | 
|---|
| 3570 | `-n' | 
|---|
| 3571 | `--rcs' | 
|---|
| 3572 | Output RCS-format diffs; like `-f' except that each command | 
|---|
| 3573 | specifies the number of lines affected.  *Note RCS::. | 
|---|
| 3574 |  | 
|---|
| 3575 | `-N' | 
|---|
| 3576 | `--new-file' | 
|---|
| 3577 | In directory comparison, if a file is found in only one directory, | 
|---|
| 3578 | treat it as present but empty in the other directory.  *Note | 
|---|
| 3579 | Comparing Directories::. | 
|---|
| 3580 |  | 
|---|
| 3581 | `--new-group-format=FORMAT' | 
|---|
| 3582 | Use FORMAT to output a group of lines taken from just the second | 
|---|
| 3583 | file in if-then-else format.  *Note Line Group Formats::. | 
|---|
| 3584 |  | 
|---|
| 3585 | `--new-line-format=FORMAT' | 
|---|
| 3586 | Use FORMAT to output a line taken from just the second file in | 
|---|
| 3587 | if-then-else format.  *Note Line Formats::. | 
|---|
| 3588 |  | 
|---|
| 3589 | `--old-group-format=FORMAT' | 
|---|
| 3590 | Use FORMAT to output a group of lines taken from just the first | 
|---|
| 3591 | file in if-then-else format.  *Note Line Group Formats::. | 
|---|
| 3592 |  | 
|---|
| 3593 | `--old-line-format=FORMAT' | 
|---|
| 3594 | Use FORMAT to output a line taken from just the first file in | 
|---|
| 3595 | if-then-else format.  *Note Line Formats::. | 
|---|
| 3596 |  | 
|---|
| 3597 | `-p' | 
|---|
| 3598 | `--show-c-function' | 
|---|
| 3599 | Show which C function each change is in.  *Note C Function | 
|---|
| 3600 | Headings::. | 
|---|
| 3601 |  | 
|---|
| 3602 | `-q' | 
|---|
| 3603 | `--brief' | 
|---|
| 3604 | Report only whether the files differ, not the details of the | 
|---|
| 3605 | differences.  *Note Brief::. | 
|---|
| 3606 |  | 
|---|
| 3607 | `-r' | 
|---|
| 3608 | `--recursive' | 
|---|
| 3609 | When comparing directories, recursively compare any subdirectories | 
|---|
| 3610 | found.  *Note Comparing Directories::. | 
|---|
| 3611 |  | 
|---|
| 3612 | `-s' | 
|---|
| 3613 | `--report-identical-files' | 
|---|
| 3614 | Report when two files are the same.  *Note Comparing Directories::. | 
|---|
| 3615 |  | 
|---|
| 3616 | `-S FILE' | 
|---|
| 3617 | `--starting-file=FILE' | 
|---|
| 3618 | When comparing directories, start with the file FILE.  This is | 
|---|
| 3619 | used for resuming an aborted comparison.  *Note Comparing | 
|---|
| 3620 | Directories::. | 
|---|
| 3621 |  | 
|---|
| 3622 | `--speed-large-files' | 
|---|
| 3623 | Use heuristics to speed handling of large files that have numerous | 
|---|
| 3624 | scattered small changes.  *Note diff Performance::. | 
|---|
| 3625 |  | 
|---|
| 3626 | `--strip-trailing-cr' | 
|---|
| 3627 | Strip any trailing carriage return at the end of an input line. | 
|---|
| 3628 | *Note Binary::. | 
|---|
| 3629 |  | 
|---|
| 3630 | `--suppress-common-lines' | 
|---|
| 3631 | Do not print common lines in side by side format.  *Note Side by | 
|---|
| 3632 | Side Format::. | 
|---|
| 3633 |  | 
|---|
| 3634 | `-t' | 
|---|
| 3635 | `--expand-tabs' | 
|---|
| 3636 | Expand tabs to spaces in the output, to preserve the alignment of | 
|---|
| 3637 | tabs in the input files.  *Note Tabs::. | 
|---|
| 3638 |  | 
|---|
| 3639 | `-T' | 
|---|
| 3640 | `--initial-tab' | 
|---|
| 3641 | Output a tab rather than a space before the text of a line in | 
|---|
| 3642 | normal or context format.  This causes the alignment of tabs in | 
|---|
| 3643 | the line to look normal.  *Note Tabs::. | 
|---|
| 3644 |  | 
|---|
| 3645 | `--to-file=FILE' | 
|---|
| 3646 | Compare each operand to FILE; FILE may be a directory. | 
|---|
| 3647 |  | 
|---|
| 3648 | `-u' | 
|---|
| 3649 | Use the unified output format, showing three lines of context. | 
|---|
| 3650 | *Note Unified Format::. | 
|---|
| 3651 |  | 
|---|
| 3652 | `--unchanged-group-format=FORMAT' | 
|---|
| 3653 | Use FORMAT to output a group of common lines taken from both files | 
|---|
| 3654 | in if-then-else format.  *Note Line Group Formats::. | 
|---|
| 3655 |  | 
|---|
| 3656 | `--unchanged-line-format=FORMAT' | 
|---|
| 3657 | Use FORMAT to output a line common to both files in if-then-else | 
|---|
| 3658 | format.  *Note Line Formats::. | 
|---|
| 3659 |  | 
|---|
| 3660 | `--unidirectional-new-file' | 
|---|
| 3661 | When comparing directories, if a file appears only in the second | 
|---|
| 3662 | directory of the two, treat it as present but empty in the other. | 
|---|
| 3663 | *Note Comparing Directories::. | 
|---|
| 3664 |  | 
|---|
| 3665 | `-U LINES' | 
|---|
| 3666 | `--unified[=LINES]' | 
|---|
| 3667 | Use the unified output format, showing LINES (an integer) lines of | 
|---|
| 3668 | context, or three if LINES is not given.  *Note Unified Format::. | 
|---|
| 3669 | For proper operation, `patch' typically needs at least two lines of | 
|---|
| 3670 | context. | 
|---|
| 3671 |  | 
|---|
| 3672 | On older systems, `diff' supports an obsolete option `-LINES' that | 
|---|
| 3673 | has effect when combined with `-u'.  POSIX 1003.1-2001 (*note | 
|---|
| 3674 | Standards conformance::) does not allow this; use `-U LINES' | 
|---|
| 3675 | instead. | 
|---|
| 3676 |  | 
|---|
| 3677 | `-v' | 
|---|
| 3678 | `--version' | 
|---|
| 3679 | Output version information and then exit. | 
|---|
| 3680 |  | 
|---|
| 3681 | `-w' | 
|---|
| 3682 | `--ignore-all-space' | 
|---|
| 3683 | Ignore white space when comparing lines.  *Note White Space::. | 
|---|
| 3684 |  | 
|---|
| 3685 | `-W COLUMNS' | 
|---|
| 3686 | `--width=COLUMNS' | 
|---|
| 3687 | Output at most COLUMNS (default 130) print columns per line in | 
|---|
| 3688 | side by side format.  *Note Side by Side Format::. | 
|---|
| 3689 |  | 
|---|
| 3690 | `-x PATTERN' | 
|---|
| 3691 | `--exclude=PATTERN' | 
|---|
| 3692 | When comparing directories, ignore files and subdirectories whose | 
|---|
| 3693 | basenames match PATTERN.  *Note Comparing Directories::. | 
|---|
| 3694 |  | 
|---|
| 3695 | `-X FILE' | 
|---|
| 3696 | `--exclude-from=FILE' | 
|---|
| 3697 | When comparing directories, ignore files and subdirectories whose | 
|---|
| 3698 | basenames match any pattern contained in FILE.  *Note Comparing | 
|---|
| 3699 | Directories::. | 
|---|
| 3700 |  | 
|---|
| 3701 | `-y' | 
|---|
| 3702 | `--side-by-side' | 
|---|
| 3703 | Use the side by side output format.  *Note Side by Side Format::. | 
|---|
| 3704 |  | 
|---|
| 3705 |  | 
|---|
| 3706 | File: diff.info,  Node: Invoking diff3,  Next: Invoking patch,  Prev: Invoking diff,  Up: Top | 
|---|
| 3707 |  | 
|---|
| 3708 | Invoking `diff3' | 
|---|
| 3709 | **************** | 
|---|
| 3710 |  | 
|---|
| 3711 | The `diff3' command compares three files and outputs descriptions of | 
|---|
| 3712 | their differences.  Its arguments are as follows: | 
|---|
| 3713 |  | 
|---|
| 3714 | diff3 OPTIONS... MINE OLDER YOURS | 
|---|
| 3715 |  | 
|---|
| 3716 | The files to compare are MINE, OLDER, and YOURS.  At most one of | 
|---|
| 3717 | these three file names may be `-', which tells `diff3' to read the | 
|---|
| 3718 | standard input for that file. | 
|---|
| 3719 |  | 
|---|
| 3720 | An exit status of 0 means `diff3' was successful, 1 means some | 
|---|
| 3721 | conflicts were found, and 2 means trouble. | 
|---|
| 3722 |  | 
|---|
| 3723 | * Menu: | 
|---|
| 3724 |  | 
|---|
| 3725 | * diff3 Options:: Summary of options to `diff3'. | 
|---|
| 3726 |  | 
|---|
| 3727 |  | 
|---|
| 3728 | File: diff.info,  Node: diff3 Options,  Up: Invoking diff3 | 
|---|
| 3729 |  | 
|---|
| 3730 | Options to `diff3' | 
|---|
| 3731 | ================== | 
|---|
| 3732 |  | 
|---|
| 3733 | Below is a summary of all of the options that GNU `diff3' accepts. | 
|---|
| 3734 | Multiple single letter options (unless they take an argument) can be | 
|---|
| 3735 | combined into a single command line argument. | 
|---|
| 3736 |  | 
|---|
| 3737 | `-a' | 
|---|
| 3738 | `--text' | 
|---|
| 3739 | Treat all files as text and compare them line-by-line, even if they | 
|---|
| 3740 | do not appear to be text.  *Note Binary::. | 
|---|
| 3741 |  | 
|---|
| 3742 | `-A' | 
|---|
| 3743 | `--show-all' | 
|---|
| 3744 | Incorporate all unmerged changes from OLDER to YOURS into MINE, | 
|---|
| 3745 | surrounding conflicts with bracket lines.  *Note Marking | 
|---|
| 3746 | Conflicts::. | 
|---|
| 3747 |  | 
|---|
| 3748 | `--diff-program=PROGRAM' | 
|---|
| 3749 | Use the compatible comparison program PROGRAM to compare files | 
|---|
| 3750 | instead of `diff'. | 
|---|
| 3751 |  | 
|---|
| 3752 | `-e' | 
|---|
| 3753 | `--ed' | 
|---|
| 3754 | Generate an `ed' script that incorporates all the changes from | 
|---|
| 3755 | OLDER to YOURS into MINE.  *Note Which Changes::. | 
|---|
| 3756 |  | 
|---|
| 3757 | `-E' | 
|---|
| 3758 | `--show-overlap' | 
|---|
| 3759 | Like `-e', except bracket lines from overlapping changes' first | 
|---|
| 3760 | and third files.  *Note Marking Conflicts::.  With `-E', an | 
|---|
| 3761 | overlapping change looks like this: | 
|---|
| 3762 |  | 
|---|
| 3763 | <<<<<<< MINE | 
|---|
| 3764 | lines from MINE | 
|---|
| 3765 | ======= | 
|---|
| 3766 | lines from YOURS | 
|---|
| 3767 | >>>>>>> YOURS | 
|---|
| 3768 |  | 
|---|
| 3769 | `--help' | 
|---|
| 3770 | Output a summary of usage and then exit. | 
|---|
| 3771 |  | 
|---|
| 3772 | `-i' | 
|---|
| 3773 | Generate `w' and `q' commands at the end of the `ed' script for | 
|---|
| 3774 | System V compatibility.  This option must be combined with one of | 
|---|
| 3775 | the `-AeExX3' options, and may not be combined with `-m'.  *Note | 
|---|
| 3776 | Saving the Changed File::. | 
|---|
| 3777 |  | 
|---|
| 3778 | `-L LABEL' | 
|---|
| 3779 | `--label=LABEL' | 
|---|
| 3780 | Use the label LABEL for the brackets output by the `-A', `-E' and | 
|---|
| 3781 | `-X' options.  This option may be given up to three times, one for | 
|---|
| 3782 | each input file.  The default labels are the names of the input | 
|---|
| 3783 | files.  Thus `diff3 -L X -L Y -L Z -m A B C' acts like `diff3 -m A | 
|---|
| 3784 | B C', except that the output looks like it came from files named | 
|---|
| 3785 | `X', `Y' and `Z' rather than from files named `A', `B' and `C'. | 
|---|
| 3786 | *Note Marking Conflicts::. | 
|---|
| 3787 |  | 
|---|
| 3788 | `-m' | 
|---|
| 3789 | `--merge' | 
|---|
| 3790 | Apply the edit script to the first file and send the result to | 
|---|
| 3791 | standard output.  Unlike piping the output from `diff3' to `ed', | 
|---|
| 3792 | this works even for binary files and incomplete lines.  `-A' is | 
|---|
| 3793 | assumed if no edit script option is specified.  *Note Bypassing | 
|---|
| 3794 | ed::. | 
|---|
| 3795 |  | 
|---|
| 3796 | `-T' | 
|---|
| 3797 | `--initial-tab' | 
|---|
| 3798 | Output a tab rather than two spaces before the text of a line in | 
|---|
| 3799 | normal format.  This causes the alignment of tabs in the line to | 
|---|
| 3800 | look normal.  *Note Tabs::. | 
|---|
| 3801 |  | 
|---|
| 3802 | `-v' | 
|---|
| 3803 | `--version' | 
|---|
| 3804 | Output version information and then exit. | 
|---|
| 3805 |  | 
|---|
| 3806 | `-x' | 
|---|
| 3807 | `--overlap-only' | 
|---|
| 3808 | Like `-e', except output only the overlapping changes.  *Note | 
|---|
| 3809 | Which Changes::. | 
|---|
| 3810 |  | 
|---|
| 3811 | `-X' | 
|---|
| 3812 | Like `-E', except output only the overlapping changes.  In other | 
|---|
| 3813 | words, like `-x', except bracket changes as in `-E'.  *Note | 
|---|
| 3814 | Marking Conflicts::. | 
|---|
| 3815 |  | 
|---|
| 3816 | `-3' | 
|---|
| 3817 | `--easy-only' | 
|---|
| 3818 | Like `-e', except output only the nonoverlapping changes.  *Note | 
|---|
| 3819 | Which Changes::. | 
|---|
| 3820 |  | 
|---|
| 3821 |  | 
|---|
| 3822 | File: diff.info,  Node: Invoking patch,  Next: Invoking sdiff,  Prev: Invoking diff3,  Up: Top | 
|---|
| 3823 |  | 
|---|
| 3824 | Invoking `patch' | 
|---|
| 3825 | **************** | 
|---|
| 3826 |  | 
|---|
| 3827 | Normally `patch' is invoked like this: | 
|---|
| 3828 |  | 
|---|
| 3829 | patch <PATCHFILE | 
|---|
| 3830 |  | 
|---|
| 3831 | The full format for invoking `patch' is: | 
|---|
| 3832 |  | 
|---|
| 3833 | patch OPTIONS... [ORIGFILE [PATCHFILE]] | 
|---|
| 3834 |  | 
|---|
| 3835 | You can also specify where to read the patch from with the `-i | 
|---|
| 3836 | PATCHFILE' or `--input=PATCHFILE' option.  If you do not specify | 
|---|
| 3837 | PATCHFILE, or if PATCHFILE is `-', `patch' reads the patch (that is, | 
|---|
| 3838 | the `diff' output) from the standard input. | 
|---|
| 3839 |  | 
|---|
| 3840 | If you do not specify an input file on the command line, `patch' | 
|---|
| 3841 | tries to intuit from the "leading text" (any text in the patch that | 
|---|
| 3842 | comes before the `diff' output) which file to edit.  *Note Multiple | 
|---|
| 3843 | Patches::. | 
|---|
| 3844 |  | 
|---|
| 3845 | By default, `patch' replaces the original input file with the | 
|---|
| 3846 | patched version, possibly after renaming the original file into a | 
|---|
| 3847 | backup file (*note Backup Names::, for a description of how `patch' | 
|---|
| 3848 | names backup files).  You can also specify where to put the output with | 
|---|
| 3849 | the `-o FILE' or `--output=FILE' option; however, do not use this option | 
|---|
| 3850 | if FILE is one of the input files. | 
|---|
| 3851 |  | 
|---|
| 3852 | * Menu: | 
|---|
| 3853 |  | 
|---|
| 3854 | * patch Options::     Summary table of options to `patch'. | 
|---|
| 3855 |  | 
|---|
| 3856 |  | 
|---|
| 3857 | File: diff.info,  Node: patch Options,  Up: Invoking patch | 
|---|
| 3858 |  | 
|---|
| 3859 | Options to `patch' | 
|---|
| 3860 | ================== | 
|---|
| 3861 |  | 
|---|
| 3862 | Here is a summary of all of the options that GNU `patch' accepts. | 
|---|
| 3863 | *Note patch and Tradition::, for which of these options are safe to use | 
|---|
| 3864 | in older versions of `patch'. | 
|---|
| 3865 |  | 
|---|
| 3866 | Multiple single-letter options that do not take an argument can be | 
|---|
| 3867 | combined into a single command line argument with only one dash. | 
|---|
| 3868 |  | 
|---|
| 3869 | `-b' | 
|---|
| 3870 | `--backup' | 
|---|
| 3871 | Back up the original contents of each file, even if backups would | 
|---|
| 3872 | normally not be made.  *Note Backups::. | 
|---|
| 3873 |  | 
|---|
| 3874 | `-B PREFIX' | 
|---|
| 3875 | `--prefix=PREFIX' | 
|---|
| 3876 | Prepend PREFIX to backup file names.  *Note Backup Names::. | 
|---|
| 3877 |  | 
|---|
| 3878 | `--backup-if-mismatch' | 
|---|
| 3879 | Back up the original contents of each file if the patch does not | 
|---|
| 3880 | exactly match the file.  This is the default behavior when not | 
|---|
| 3881 | conforming to POSIX.  *Note Backups::. | 
|---|
| 3882 |  | 
|---|
| 3883 | `--binary' | 
|---|
| 3884 | Read and write all files in binary mode, except for standard output | 
|---|
| 3885 | and `/dev/tty'.  This option has no effect on POSIX-conforming | 
|---|
| 3886 | systems like GNU/Linux.  On systems where this option makes a | 
|---|
| 3887 | difference, the patch should be generated by `diff -a --binary'. | 
|---|
| 3888 | *Note Binary::. | 
|---|
| 3889 |  | 
|---|
| 3890 | `-c' | 
|---|
| 3891 | `--context' | 
|---|
| 3892 | Interpret the patch file as a context diff.  *Note patch Input::. | 
|---|
| 3893 |  | 
|---|
| 3894 | `-d DIRECTORY' | 
|---|
| 3895 | `--directory=DIRECTORY' | 
|---|
| 3896 | Make directory DIRECTORY the current directory for interpreting | 
|---|
| 3897 | both file names in the patch file, and file names given as | 
|---|
| 3898 | arguments to other options.  *Note patch Directories::. | 
|---|
| 3899 |  | 
|---|
| 3900 | `-D NAME' | 
|---|
| 3901 | `--ifdef=NAME' | 
|---|
| 3902 | Make merged if-then-else output using NAME.  *Note If-then-else::. | 
|---|
| 3903 |  | 
|---|
| 3904 | `--dry-run' | 
|---|
| 3905 | Print the results of applying the patches without actually changing | 
|---|
| 3906 | any files.  *Note Dry Runs::. | 
|---|
| 3907 |  | 
|---|
| 3908 | `-e' | 
|---|
| 3909 | `--ed' | 
|---|
| 3910 | Interpret the patch file as an `ed' script.  *Note patch Input::. | 
|---|
| 3911 |  | 
|---|
| 3912 | `-E' | 
|---|
| 3913 | `--remove-empty-files' | 
|---|
| 3914 | Remove output files that are empty after the patches have been | 
|---|
| 3915 | applied.  *Note Creating and Removing::. | 
|---|
| 3916 |  | 
|---|
| 3917 | `-f' | 
|---|
| 3918 | `--force' | 
|---|
| 3919 | Assume that the user knows exactly what he or she is doing, and do | 
|---|
| 3920 | not ask any questions.  *Note patch Messages::. | 
|---|
| 3921 |  | 
|---|
| 3922 | `-F LINES' | 
|---|
| 3923 | `--fuzz=LINES' | 
|---|
| 3924 | Set the maximum fuzz factor to LINES.  *Note Inexact::. | 
|---|
| 3925 |  | 
|---|
| 3926 | `-g NUM' | 
|---|
| 3927 | `--get=NUM' | 
|---|
| 3928 | If NUM is positive, get input files from a revision control system | 
|---|
| 3929 | as necessary; if zero, do not get the files; if negative, ask the | 
|---|
| 3930 | user whether to get the files.  *Note Revision Control::. | 
|---|
| 3931 |  | 
|---|
| 3932 | `--help' | 
|---|
| 3933 | Output a summary of usage and then exit. | 
|---|
| 3934 |  | 
|---|
| 3935 | `-i PATCHFILE' | 
|---|
| 3936 | `--input=PATCHFILE' | 
|---|
| 3937 | Read the patch from PATCHFILE rather than from standard input. | 
|---|
| 3938 | *Note patch Options::. | 
|---|
| 3939 |  | 
|---|
| 3940 | `-l' | 
|---|
| 3941 | `--ignore-white-space' | 
|---|
| 3942 | Let any sequence of blanks (spaces or tabs) in the patch file match | 
|---|
| 3943 | any sequence of blanks in the input file.  *Note Changed White | 
|---|
| 3944 | Space::. | 
|---|
| 3945 |  | 
|---|
| 3946 | `-n' | 
|---|
| 3947 | `--normal' | 
|---|
| 3948 | Interpret the patch file as a normal diff.  *Note patch Input::. | 
|---|
| 3949 |  | 
|---|
| 3950 | `-N' | 
|---|
| 3951 | `--forward' | 
|---|
| 3952 | Ignore patches that `patch' thinks are reversed or already applied. | 
|---|
| 3953 | See also `-R'.  *Note Reversed Patches::. | 
|---|
| 3954 |  | 
|---|
| 3955 | `--no-backup-if-mismatch' | 
|---|
| 3956 | Do not back up the original contents of files.  This is the default | 
|---|
| 3957 | behavior when conforming to POSIX.  *Note Backups::. | 
|---|
| 3958 |  | 
|---|
| 3959 | `-o FILE' | 
|---|
| 3960 | `--output=FILE' | 
|---|
| 3961 | Use FILE as the output file name.  *Note patch Options::. | 
|---|
| 3962 |  | 
|---|
| 3963 | `-pNUMBER' | 
|---|
| 3964 | `--strip=NUMBER' | 
|---|
| 3965 | Set the file name strip count to NUMBER.  *Note patch | 
|---|
| 3966 | Directories::. | 
|---|
| 3967 |  | 
|---|
| 3968 | `--posix' | 
|---|
| 3969 | Conform to POSIX, as if the `POSIXLY_CORRECT' environment variable | 
|---|
| 3970 | had been set.  *Note patch and POSIX::. | 
|---|
| 3971 |  | 
|---|
| 3972 | `--quoting-style=WORD' | 
|---|
| 3973 | Use style WORD to quote names in diagnostics, as if the | 
|---|
| 3974 | `QUOTING_STYLE' environment variable had been set to WORD.  *Note | 
|---|
| 3975 | patch Quoting Style::. | 
|---|
| 3976 |  | 
|---|
| 3977 | `-r REJECT-FILE' | 
|---|
| 3978 | `--reject-file=REJECT-FILE' | 
|---|
| 3979 | Use REJECT-FILE as the reject file name.  *Note Reject Names::. | 
|---|
| 3980 |  | 
|---|
| 3981 | `-R' | 
|---|
| 3982 | `--reverse' | 
|---|
| 3983 | Assume that this patch was created with the old and new files | 
|---|
| 3984 | swapped.  *Note Reversed Patches::. | 
|---|
| 3985 |  | 
|---|
| 3986 | `-s' | 
|---|
| 3987 | `--quiet' | 
|---|
| 3988 | `--silent' | 
|---|
| 3989 | Work silently unless an error occurs.  *Note patch Messages::. | 
|---|
| 3990 |  | 
|---|
| 3991 | `-t' | 
|---|
| 3992 | `--batch' | 
|---|
| 3993 | Do not ask any questions.  *Note patch Messages::. | 
|---|
| 3994 |  | 
|---|
| 3995 | `-T' | 
|---|
| 3996 | `--set-time' | 
|---|
| 3997 | Set the modification and access times of patched files from time | 
|---|
| 3998 | stamps given in context diff headers, assuming that the context | 
|---|
| 3999 | diff headers use local time.  *Note Patching Time Stamps::. | 
|---|
| 4000 |  | 
|---|
| 4001 | `-u' | 
|---|
| 4002 | `--unified' | 
|---|
| 4003 | Interpret the patch file as a unified diff.  *Note patch Input::. | 
|---|
| 4004 |  | 
|---|
| 4005 | `-v' | 
|---|
| 4006 | `--version' | 
|---|
| 4007 | Output version information and then exit. | 
|---|
| 4008 |  | 
|---|
| 4009 | `-V BACKUP-STYLE' | 
|---|
| 4010 | `--version=control=BACKUP-STYLE' | 
|---|
| 4011 | Select the naming convention for backup file names.  *Note Backup | 
|---|
| 4012 | Names::. | 
|---|
| 4013 |  | 
|---|
| 4014 | `--verbose' | 
|---|
| 4015 | Print more diagnostics than usual.  *Note patch Messages::. | 
|---|
| 4016 |  | 
|---|
| 4017 | `-x NUMBER' | 
|---|
| 4018 | `--debug=NUMBER' | 
|---|
| 4019 | Set internal debugging flags.  Of interest only to `patch' | 
|---|
| 4020 | patchers. | 
|---|
| 4021 |  | 
|---|
| 4022 | `-Y PREFIX' | 
|---|
| 4023 | `--basename-prefix=PREFIX' | 
|---|
| 4024 | Prepend PREFIX to base names of backup files.  *Note Backup | 
|---|
| 4025 | Names::. | 
|---|
| 4026 |  | 
|---|
| 4027 | `-z SUFFIX' | 
|---|
| 4028 | `--suffix=SUFFIX' | 
|---|
| 4029 | Use SUFFIX as the backup extension instead of `.orig' or `~'. | 
|---|
| 4030 | *Note Backup Names::. | 
|---|
| 4031 |  | 
|---|
| 4032 | `-Z' | 
|---|
| 4033 | `--set-utc' | 
|---|
| 4034 | Set the modification and access times of patched files from time | 
|---|
| 4035 | stamps given in context diff headers, assuming that the context | 
|---|
| 4036 | diff headers use UTC.  *Note Patching Time Stamps::. | 
|---|
| 4037 |  | 
|---|
| 4038 |  | 
|---|
| 4039 | File: diff.info,  Node: Invoking sdiff,  Next: Standards conformance,  Prev: Invoking patch,  Up: Top | 
|---|
| 4040 |  | 
|---|
| 4041 | Invoking `sdiff' | 
|---|
| 4042 | **************** | 
|---|
| 4043 |  | 
|---|
| 4044 | The `sdiff' command merges two files and interactively outputs the | 
|---|
| 4045 | results.  Its arguments are as follows: | 
|---|
| 4046 |  | 
|---|
| 4047 | sdiff -o OUTFILE OPTIONS... FROM-FILE TO-FILE | 
|---|
| 4048 |  | 
|---|
| 4049 | This merges FROM-FILE with TO-FILE, with output to OUTFILE.  If | 
|---|
| 4050 | FROM-FILE is a directory and TO-FILE is not, `sdiff' compares the file | 
|---|
| 4051 | in FROM-FILE whose file name is that of TO-FILE, and vice versa. | 
|---|
| 4052 | FROM-FILE and TO-FILE may not both be directories. | 
|---|
| 4053 |  | 
|---|
| 4054 | `sdiff' options begin with `-', so normally FROM-FILE and TO-FILE | 
|---|
| 4055 | may not begin with `-'.  However, `--' as an argument by itself treats | 
|---|
| 4056 | the remaining arguments as file names even if they begin with `-'.  You | 
|---|
| 4057 | may not use `-' as an input file. | 
|---|
| 4058 |  | 
|---|
| 4059 | `sdiff' without `-o' (or `--output') produces a side-by-side | 
|---|
| 4060 | difference.  This usage is obsolete; use the `-y' or `--side-by-side' | 
|---|
| 4061 | option of `diff' instead. | 
|---|
| 4062 |  | 
|---|
| 4063 | An exit status of 0 means no differences were found, 1 means some | 
|---|
| 4064 | differences were found, and 2 means trouble. | 
|---|
| 4065 |  | 
|---|
| 4066 | * Menu: | 
|---|
| 4067 |  | 
|---|
| 4068 | * sdiff Options:: Summary of options to `diff'. | 
|---|
| 4069 |  | 
|---|
| 4070 |  | 
|---|
| 4071 | File: diff.info,  Node: sdiff Options,  Up: Invoking sdiff | 
|---|
| 4072 |  | 
|---|
| 4073 | Options to `sdiff' | 
|---|
| 4074 | ================== | 
|---|
| 4075 |  | 
|---|
| 4076 | Below is a summary of all of the options that GNU `sdiff' accepts. | 
|---|
| 4077 | Each option has two equivalent names, one of which is a single letter | 
|---|
| 4078 | preceded by `-', and the other of which is a long name preceded by | 
|---|
| 4079 | `--'.  Multiple single letter options (unless they take an argument) | 
|---|
| 4080 | can be combined into a single command line argument.  Long named | 
|---|
| 4081 | options can be abbreviated to any unique prefix of their name. | 
|---|
| 4082 |  | 
|---|
| 4083 | `-a' | 
|---|
| 4084 | `--text' | 
|---|
| 4085 | Treat all files as text and compare them line-by-line, even if they | 
|---|
| 4086 | do not appear to be text.  *Note Binary::. | 
|---|
| 4087 |  | 
|---|
| 4088 | `-b' | 
|---|
| 4089 | `--ignore-space-change' | 
|---|
| 4090 | Ignore changes in amount of white space.  *Note White Space::. | 
|---|
| 4091 |  | 
|---|
| 4092 | `-B' | 
|---|
| 4093 | `--ignore-blank-lines' | 
|---|
| 4094 | Ignore changes that just insert or delete blank lines.  *Note | 
|---|
| 4095 | Blank Lines::. | 
|---|
| 4096 |  | 
|---|
| 4097 | `-d' | 
|---|
| 4098 | `--minimal' | 
|---|
| 4099 | Change the algorithm to perhaps find a smaller set of changes. | 
|---|
| 4100 | This makes `sdiff' slower (sometimes much slower).  *Note diff | 
|---|
| 4101 | Performance::. | 
|---|
| 4102 |  | 
|---|
| 4103 | `--diff-program=PROGRAM' | 
|---|
| 4104 | Use the compatible comparison program PROGRAM to compare files | 
|---|
| 4105 | instead of `diff'. | 
|---|
| 4106 |  | 
|---|
| 4107 | `-E' | 
|---|
| 4108 | `--ignore-tab-expansion' | 
|---|
| 4109 | Ignore changes due to tab expansion.  *Note White Space::. | 
|---|
| 4110 |  | 
|---|
| 4111 | `--help' | 
|---|
| 4112 | Output a summary of usage and then exit. | 
|---|
| 4113 |  | 
|---|
| 4114 | `-i' | 
|---|
| 4115 | `--ignore-case' | 
|---|
| 4116 | Ignore changes in case; consider upper- and lower-case to be the | 
|---|
| 4117 | same.  *Note Case Folding::. | 
|---|
| 4118 |  | 
|---|
| 4119 | `-I REGEXP' | 
|---|
| 4120 | `--ignore-matching-lines=REGEXP' | 
|---|
| 4121 | Ignore changes that just insert or delete lines that match REGEXP. | 
|---|
| 4122 | *Note Specified Folding::. | 
|---|
| 4123 |  | 
|---|
| 4124 | `-l' | 
|---|
| 4125 | `--left-column' | 
|---|
| 4126 | Print only the left column of two common lines.  *Note Side by | 
|---|
| 4127 | Side Format::. | 
|---|
| 4128 |  | 
|---|
| 4129 | `-o FILE' | 
|---|
| 4130 | `--output=FILE' | 
|---|
| 4131 | Put merged output into FILE.  This option is required for merging. | 
|---|
| 4132 |  | 
|---|
| 4133 | `-s' | 
|---|
| 4134 | `--suppress-common-lines' | 
|---|
| 4135 | Do not print common lines.  *Note Side by Side Format::. | 
|---|
| 4136 |  | 
|---|
| 4137 | `--speed-large-files' | 
|---|
| 4138 | Use heuristics to speed handling of large files that have numerous | 
|---|
| 4139 | scattered small changes.  *Note diff Performance::. | 
|---|
| 4140 |  | 
|---|
| 4141 | `--strip-trailing-cr' | 
|---|
| 4142 | Strip any trailing carriage return at the end of an input line. | 
|---|
| 4143 | *Note Binary::. | 
|---|
| 4144 |  | 
|---|
| 4145 | `-t' | 
|---|
| 4146 | `--expand-tabs' | 
|---|
| 4147 | Expand tabs to spaces in the output, to preserve the alignment of | 
|---|
| 4148 | tabs in the input files.  *Note Tabs::. | 
|---|
| 4149 |  | 
|---|
| 4150 | `-v' | 
|---|
| 4151 | `--version' | 
|---|
| 4152 | Output version information and then exit. | 
|---|
| 4153 |  | 
|---|
| 4154 | `-w COLUMNS' | 
|---|
| 4155 | `--width=COLUMNS' | 
|---|
| 4156 | Output at most COLUMNS (default 130) print columns per line. | 
|---|
| 4157 | *Note Side by Side Format::.  Note that for historical reasons, | 
|---|
| 4158 | this option is `-W' in `diff', `-w' in `sdiff'. | 
|---|
| 4159 |  | 
|---|
| 4160 | `-W' | 
|---|
| 4161 | `--ignore-all-space' | 
|---|
| 4162 | Ignore white space when comparing lines.  *Note White Space::. | 
|---|
| 4163 | Note that for historical reasons, this option is `-w' in `diff', | 
|---|
| 4164 | `-W' in `sdiff'. | 
|---|
| 4165 |  | 
|---|
| 4166 |  | 
|---|
| 4167 | File: diff.info,  Node: Standards conformance,  Next: Projects,  Prev: Invoking sdiff,  Up: Top | 
|---|
| 4168 |  | 
|---|
| 4169 | Standards conformance | 
|---|
| 4170 | ********************* | 
|---|
| 4171 |  | 
|---|
| 4172 | In a few cases, the GNU utilities' default behavior is incompatible | 
|---|
| 4173 | with the POSIX standard.  To suppress these incompatibilities, define | 
|---|
| 4174 | the `POSIXLY_CORRECT' environment variable.  Unless you are checking | 
|---|
| 4175 | for POSIX conformance, you probably do not need to define | 
|---|
| 4176 | `POSIXLY_CORRECT'. | 
|---|
| 4177 |  | 
|---|
| 4178 | Normally options and operands can appear in any order, and programs | 
|---|
| 4179 | act as if all the options appear before any operands.  For example, | 
|---|
| 4180 | `diff lao tzu -C 2' acts like `diff -C 2 lao tzu', since `2' is an | 
|---|
| 4181 | option-argument of `-C'.  However, if the `POSIXLY_CORRECT' environment | 
|---|
| 4182 | variable is set, options must appear before operands, unless otherwise | 
|---|
| 4183 | specified for a particular command. | 
|---|
| 4184 |  | 
|---|
| 4185 | Newer versions of POSIX are occasionally incompatible with older | 
|---|
| 4186 | versions.  For example, older versions of POSIX allowed the command | 
|---|
| 4187 | `diff -c -10' to have the same meaning as `diff -C 10', but POSIX | 
|---|
| 4188 | 1003.1-2001 `diff' no longer allows digit-string options like `-10'. | 
|---|
| 4189 |  | 
|---|
| 4190 | The GNU utilities normally conform to the version of POSIX that is | 
|---|
| 4191 | standard for your system.  To cause them to conform to a different | 
|---|
| 4192 | version of POSIX, define the `_POSIX2_VERSION' environment variable to | 
|---|
| 4193 | a value of the form YYYYMM specifying the year and month the standard | 
|---|
| 4194 | was adopted.  Two values are currently supported for `_POSIX2_VERSION': | 
|---|
| 4195 | `199209' stands for POSIX 1003.2-1992, and `200112' stands for POSIX | 
|---|
| 4196 | 1003.1-2001.  For example, if you are running older software that | 
|---|
| 4197 | assumes an older version of POSIX and uses `diff -c -10', you can work | 
|---|
| 4198 | around the compatibility problems by setting `_POSIX2_VERSION=199209' | 
|---|
| 4199 | in your environment. | 
|---|
| 4200 |  | 
|---|
| 4201 |  | 
|---|
| 4202 | File: diff.info,  Node: Projects,  Next: Copying This Manual,  Prev: Standards conformance,  Up: Top | 
|---|
| 4203 |  | 
|---|
| 4204 | Future Projects | 
|---|
| 4205 | *************** | 
|---|
| 4206 |  | 
|---|
| 4207 | Here are some ideas for improving GNU `diff' and `patch'.  The GNU | 
|---|
| 4208 | project has identified some improvements as potential programming | 
|---|
| 4209 | projects for volunteers.  You can also help by reporting any bugs that | 
|---|
| 4210 | you find. | 
|---|
| 4211 |  | 
|---|
| 4212 | If you are a programmer and would like to contribute something to the | 
|---|
| 4213 | GNU project, please consider volunteering for one of these projects. | 
|---|
| 4214 | If you are seriously contemplating work, please write to <gnu@gnu.org> | 
|---|
| 4215 | to coordinate with other volunteers. | 
|---|
| 4216 |  | 
|---|
| 4217 | * Menu: | 
|---|
| 4218 |  | 
|---|
| 4219 | * Shortcomings:: Suggested projects for improvements. | 
|---|
| 4220 | * Bugs::         Reporting bugs. | 
|---|
| 4221 |  | 
|---|
| 4222 |  | 
|---|
| 4223 | File: diff.info,  Node: Shortcomings,  Next: Bugs,  Up: Projects | 
|---|
| 4224 |  | 
|---|
| 4225 | Suggested Projects for Improving GNU `diff' and `patch' | 
|---|
| 4226 | ======================================================= | 
|---|
| 4227 |  | 
|---|
| 4228 | One should be able to use GNU `diff' to generate a patch from any | 
|---|
| 4229 | pair of directory trees, and given the patch and a copy of one such | 
|---|
| 4230 | tree, use `patch' to generate a faithful copy of the other. | 
|---|
| 4231 | Unfortunately, some changes to directory trees cannot be expressed using | 
|---|
| 4232 | current patch formats; also, `patch' does not handle some of the | 
|---|
| 4233 | existing formats.  These shortcomings motivate the following suggested | 
|---|
| 4234 | projects. | 
|---|
| 4235 |  | 
|---|
| 4236 | * Menu: | 
|---|
| 4237 |  | 
|---|
| 4238 | * Internationalization:: Handling multibyte and varying-width characters. | 
|---|
| 4239 | * Changing Structure::   Handling changes to the directory structure. | 
|---|
| 4240 | * Special Files::        Handling symbolic links, device special files, etc. | 
|---|
| 4241 | * Unusual File Names::   Handling file names that contain unusual characters. | 
|---|
| 4242 | * Time Stamp Order::     Outputting diffs in time stamp order. | 
|---|
| 4243 | * Ignoring Changes::     Ignoring certain changes while showing others. | 
|---|
| 4244 | * Speedups::             Improving performance. | 
|---|
| 4245 |  | 
|---|
| 4246 |  | 
|---|
| 4247 | File: diff.info,  Node: Internationalization,  Next: Changing Structure,  Up: Shortcomings | 
|---|
| 4248 |  | 
|---|
| 4249 | Handling Multibyte and Varying-Width Characters | 
|---|
| 4250 | ----------------------------------------------- | 
|---|
| 4251 |  | 
|---|
| 4252 | `diff', `diff3' and `sdiff' treat each line of input as a string of | 
|---|
| 4253 | unibyte characters.  This can mishandle multibyte characters in some | 
|---|
| 4254 | cases.  For example, when asked to ignore spaces, `diff' does not | 
|---|
| 4255 | properly ignore a multibyte space character. | 
|---|
| 4256 |  | 
|---|
| 4257 | Also, `diff' currently assumes that each byte is one column wide, | 
|---|
| 4258 | and this assumption is incorrect in some locales, e.g., locales that | 
|---|
| 4259 | use UTF-8 encoding.  This causes problems with the `-y' or | 
|---|
| 4260 | `--side-by-side' option of `diff'. | 
|---|
| 4261 |  | 
|---|
| 4262 | These problems need to be fixed without unduly affecting the | 
|---|
| 4263 | performance of the utilities in unibyte environments. | 
|---|
| 4264 |  | 
|---|
| 4265 | The IBM GNU/Linux Technology Center Internationalization Team has | 
|---|
| 4266 | proposed some patches to support internationalized `diff' | 
|---|
| 4267 | `http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz'. | 
|---|
| 4268 | Unfortunately, these patches are incomplete and are to an older version | 
|---|
| 4269 | of `diff', so more work needs to be done in this area. | 
|---|
| 4270 |  | 
|---|
| 4271 |  | 
|---|
| 4272 | File: diff.info,  Node: Changing Structure,  Next: Special Files,  Prev: Internationalization,  Up: Shortcomings | 
|---|
| 4273 |  | 
|---|
| 4274 | Handling Changes to the Directory Structure | 
|---|
| 4275 | ------------------------------------------- | 
|---|
| 4276 |  | 
|---|
| 4277 | `diff' and `patch' do not handle some changes to directory | 
|---|
| 4278 | structure.  For example, suppose one directory tree contains a directory | 
|---|
| 4279 | named `D' with some subsidiary files, and another contains a file with | 
|---|
| 4280 | the same name `D'.  `diff -r' does not output enough information for | 
|---|
| 4281 | `patch' to transform the directory subtree into the file. | 
|---|
| 4282 |  | 
|---|
| 4283 | There should be a way to specify that a file has been removed without | 
|---|
| 4284 | having to include its entire contents in the patch file.  There should | 
|---|
| 4285 | also be a way to tell `patch' that a file was renamed, even if there is | 
|---|
| 4286 | no way for `diff' to generate such information.  There should be a way | 
|---|
| 4287 | to tell `patch' that a file's time stamp has changed, even if its | 
|---|
| 4288 | contents have not changed. | 
|---|
| 4289 |  | 
|---|
| 4290 | These problems can be fixed by extending the `diff' output format to | 
|---|
| 4291 | represent changes in directory structure, and extending `patch' to | 
|---|
| 4292 | understand these extensions. | 
|---|
| 4293 |  | 
|---|
| 4294 |  | 
|---|
| 4295 | File: diff.info,  Node: Special Files,  Next: Unusual File Names,  Prev: Changing Structure,  Up: Shortcomings | 
|---|
| 4296 |  | 
|---|
| 4297 | Files that are Neither Directories Nor Regular Files | 
|---|
| 4298 | ---------------------------------------------------- | 
|---|
| 4299 |  | 
|---|
| 4300 | Some files are neither directories nor regular files: they are | 
|---|
| 4301 | unusual files like symbolic links, device special files, named pipes, | 
|---|
| 4302 | and sockets.  Currently, `diff' treats symbolic links like regular | 
|---|
| 4303 | files; it treats other special files like regular files if they are | 
|---|
| 4304 | specified at the top level, but simply reports their presence when | 
|---|
| 4305 | comparing directories.  This means that `patch' cannot represent changes | 
|---|
| 4306 | to such files.  For example, if you change which file a symbolic link | 
|---|
| 4307 | points to, `diff' outputs the difference between the two files, instead | 
|---|
| 4308 | of the change to the symbolic link. | 
|---|
| 4309 |  | 
|---|
| 4310 | `diff' should optionally report changes to special files specially, | 
|---|
| 4311 | and `patch' should be extended to understand these extensions. | 
|---|
| 4312 |  | 
|---|
| 4313 |  | 
|---|
| 4314 | File: diff.info,  Node: Unusual File Names,  Next: Time Stamp Order,  Prev: Special Files,  Up: Shortcomings | 
|---|
| 4315 |  | 
|---|
| 4316 | File Names that Contain Unusual Characters | 
|---|
| 4317 | ------------------------------------------ | 
|---|
| 4318 |  | 
|---|
| 4319 | When a file name contains an unusual character like a newline or | 
|---|
| 4320 | white space, `diff -r' generates a patch that `patch' cannot parse. | 
|---|
| 4321 | The problem is with format of `diff' output, not just with `patch', | 
|---|
| 4322 | because with odd enough file names one can cause `diff' to generate a | 
|---|
| 4323 | patch that is syntactically correct but patches the wrong files.  The | 
|---|
| 4324 | format of `diff' output should be extended to handle all possible file | 
|---|
| 4325 | names. | 
|---|
| 4326 |  | 
|---|
| 4327 |  | 
|---|
| 4328 | File: diff.info,  Node: Time Stamp Order,  Next: Ignoring Changes,  Prev: Unusual File Names,  Up: Shortcomings | 
|---|
| 4329 |  | 
|---|
| 4330 | Outputting Diffs in Time Stamp Order | 
|---|
| 4331 | ------------------------------------ | 
|---|
| 4332 |  | 
|---|
| 4333 | Applying `patch' to a multiple-file diff can result in files whose | 
|---|
| 4334 | time stamps are out of order.  GNU `patch' has options to restore the | 
|---|
| 4335 | time stamps of the updated files (*note Patching Time Stamps::), but | 
|---|
| 4336 | sometimes it is useful to generate a patch that works even if the | 
|---|
| 4337 | recipient does not have GNU patch, or does not use these options.  One | 
|---|
| 4338 | way to do this would be to implement a `diff' option to output diffs in | 
|---|
| 4339 | time stamp order. | 
|---|
| 4340 |  | 
|---|
| 4341 |  | 
|---|
| 4342 | File: diff.info,  Node: Ignoring Changes,  Next: Speedups,  Prev: Time Stamp Order,  Up: Shortcomings | 
|---|
| 4343 |  | 
|---|
| 4344 | Ignoring Certain Changes | 
|---|
| 4345 | ------------------------ | 
|---|
| 4346 |  | 
|---|
| 4347 | It would be nice to have a feature for specifying two strings, one in | 
|---|
| 4348 | FROM-FILE and one in TO-FILE, which should be considered to match. | 
|---|
| 4349 | Thus, if the two strings are `foo' and `bar', then if two lines differ | 
|---|
| 4350 | only in that `foo' in file 1 corresponds to `bar' in file 2, the lines | 
|---|
| 4351 | are treated as identical. | 
|---|
| 4352 |  | 
|---|
| 4353 | It is not clear how general this feature can or should be, or what | 
|---|
| 4354 | syntax should be used for it. | 
|---|
| 4355 |  | 
|---|
| 4356 | A partial substitute is to filter one or both files before comparing, | 
|---|
| 4357 | e.g.: | 
|---|
| 4358 |  | 
|---|
| 4359 | sed 's/foo/bar/g' file1 | diff - file2 | 
|---|
| 4360 |  | 
|---|
| 4361 | However, this outputs the filtered text, not the original. | 
|---|
| 4362 |  | 
|---|
| 4363 |  | 
|---|
| 4364 | File: diff.info,  Node: Speedups,  Prev: Ignoring Changes,  Up: Shortcomings | 
|---|
| 4365 |  | 
|---|
| 4366 | Improving Performance | 
|---|
| 4367 | --------------------- | 
|---|
| 4368 |  | 
|---|
| 4369 | When comparing two large directory structures, one of which was | 
|---|
| 4370 | originally copied from the other with time stamps preserved (e.g., with | 
|---|
| 4371 | `cp -pR'), it would greatly improve performance if an option told | 
|---|
| 4372 | `diff' to assume that two files with the same size and time stamps have | 
|---|
| 4373 | the same content.  *Note diff Performance::. | 
|---|
| 4374 |  | 
|---|
| 4375 |  | 
|---|
| 4376 | File: diff.info,  Node: Bugs,  Prev: Shortcomings,  Up: Projects | 
|---|
| 4377 |  | 
|---|
| 4378 | Reporting Bugs | 
|---|
| 4379 | ============== | 
|---|
| 4380 |  | 
|---|
| 4381 | If you think you have found a bug in GNU `cmp', `diff', `diff3', or | 
|---|
| 4382 | `sdiff', please report it by electronic mail to the GNU utilities bug | 
|---|
| 4383 | report mailing list | 
|---|
| 4384 | (http://mail.gnu.org/mailman/listinfo/bug-gnu-utils) | 
|---|
| 4385 | <bug-gnu-utils@gnu.org>.  Please send bug reports for GNU `patch' to | 
|---|
| 4386 | <bug-patch@gnu.org>.  Send as precise a description of the problem as | 
|---|
| 4387 | you can, including the output of the `--version' option and sample | 
|---|
| 4388 | input files that produce the bug, if applicable.  If you have a | 
|---|
| 4389 | nontrivial fix for the bug, please send it as well.  If you have a | 
|---|
| 4390 | patch, please send it too.  It may simplify the maintainer's job if the | 
|---|
| 4391 | patch is relative to a recent test release, which you can find in the | 
|---|
| 4392 | directory `ftp://alpha.gnu.org/gnu/diffutils/'. | 
|---|
| 4393 |  | 
|---|
| 4394 |  | 
|---|
| 4395 | File: diff.info,  Node: Copying This Manual,  Next: Index,  Prev: Projects,  Up: Top | 
|---|
| 4396 |  | 
|---|
| 4397 | Copying This Manual | 
|---|
| 4398 | ******************* | 
|---|
| 4399 |  | 
|---|
| 4400 | * Menu: | 
|---|
| 4401 |  | 
|---|
| 4402 | * GNU Free Documentation License::  License for copying this manual. | 
|---|
| 4403 |  | 
|---|
| 4404 |  | 
|---|
| 4405 | File: diff.info,  Node: GNU Free Documentation License,  Up: Copying This Manual | 
|---|
| 4406 |  | 
|---|
| 4407 | GNU Free Documentation License | 
|---|
| 4408 | ============================== | 
|---|
| 4409 |  | 
|---|
| 4410 | Version 1.1, March 2000 | 
|---|
| 4411 | Copyright (C) 2000 Free Software Foundation, Inc. | 
|---|
| 4412 | 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA | 
|---|
| 4413 |  | 
|---|
| 4414 | Everyone is permitted to copy and distribute verbatim copies | 
|---|
| 4415 | of this license document, but changing it is not allowed. | 
|---|
| 4416 |  | 
|---|
| 4417 | 0. PREAMBLE | 
|---|
| 4418 |  | 
|---|
| 4419 | The purpose of this License is to make a manual, textbook, or other | 
|---|
| 4420 | written document "free" in the sense of freedom: to assure everyone | 
|---|
| 4421 | the effective freedom to copy and redistribute it, with or without | 
|---|
| 4422 | modifying it, either commercially or noncommercially.  Secondarily, | 
|---|
| 4423 | this License preserves for the author and publisher a way to get | 
|---|
| 4424 | credit for their work, while not being considered responsible for | 
|---|
| 4425 | modifications made by others. | 
|---|
| 4426 |  | 
|---|
| 4427 | This License is a kind of "copyleft", which means that derivative | 
|---|
| 4428 | works of the document must themselves be free in the same sense. | 
|---|
| 4429 | It complements the GNU General Public License, which is a copyleft | 
|---|
| 4430 | license designed for free software. | 
|---|
| 4431 |  | 
|---|
| 4432 | We have designed this License in order to use it for manuals for | 
|---|
| 4433 | free software, because free software needs free documentation: a | 
|---|
| 4434 | free program should come with manuals providing the same freedoms | 
|---|
| 4435 | that the software does.  But this License is not limited to | 
|---|
| 4436 | software manuals; it can be used for any textual work, regardless | 
|---|
| 4437 | of subject matter or whether it is published as a printed book. | 
|---|
| 4438 | We recommend this License principally for works whose purpose is | 
|---|
| 4439 | instruction or reference. | 
|---|
| 4440 |  | 
|---|
| 4441 | 1. APPLICABILITY AND DEFINITIONS | 
|---|
| 4442 |  | 
|---|
| 4443 | This License applies to any manual or other work that contains a | 
|---|
| 4444 | notice placed by the copyright holder saying it can be distributed | 
|---|
| 4445 | under the terms of this License.  The "Document", below, refers to | 
|---|
| 4446 | any such manual or work.  Any member of the public is a licensee, | 
|---|
| 4447 | and is addressed as "you". | 
|---|
| 4448 |  | 
|---|
| 4449 | A "Modified Version" of the Document means any work containing the | 
|---|
| 4450 | Document or a portion of it, either copied verbatim, or with | 
|---|
| 4451 | modifications and/or translated into another language. | 
|---|
| 4452 |  | 
|---|
| 4453 | A "Secondary Section" is a named appendix or a front-matter | 
|---|
| 4454 | section of the Document that deals exclusively with the | 
|---|
| 4455 | relationship of the publishers or authors of the Document to the | 
|---|
| 4456 | Document's overall subject (or to related matters) and contains | 
|---|
| 4457 | nothing that could fall directly within that overall subject. | 
|---|
| 4458 | (For example, if the Document is in part a textbook of | 
|---|
| 4459 | mathematics, a Secondary Section may not explain any mathematics.) | 
|---|
| 4460 | The relationship could be a matter of historical connection with | 
|---|
| 4461 | the subject or with related matters, or of legal, commercial, | 
|---|
| 4462 | philosophical, ethical or political position regarding them. | 
|---|
| 4463 |  | 
|---|
| 4464 | The "Invariant Sections" are certain Secondary Sections whose | 
|---|
| 4465 | titles are designated, as being those of Invariant Sections, in | 
|---|
| 4466 | the notice that says that the Document is released under this | 
|---|
| 4467 | License. | 
|---|
| 4468 |  | 
|---|
| 4469 | The "Cover Texts" are certain short passages of text that are | 
|---|
| 4470 | listed, as Front-Cover Texts or Back-Cover Texts, in the notice | 
|---|
| 4471 | that says that the Document is released under this License. | 
|---|
| 4472 |  | 
|---|
| 4473 | A "Transparent" copy of the Document means a machine-readable copy, | 
|---|
| 4474 | represented in a format whose specification is available to the | 
|---|
| 4475 | general public, whose contents can be viewed and edited directly | 
|---|
| 4476 | and straightforwardly with generic text editors or (for images | 
|---|
| 4477 | composed of pixels) generic paint programs or (for drawings) some | 
|---|
| 4478 | widely available drawing editor, and that is suitable for input to | 
|---|
| 4479 | text formatters or for automatic translation to a variety of | 
|---|
| 4480 | formats suitable for input to text formatters.  A copy made in an | 
|---|
| 4481 | otherwise Transparent file format whose markup has been designed | 
|---|
| 4482 | to thwart or discourage subsequent modification by readers is not | 
|---|
| 4483 | Transparent.  A copy that is not "Transparent" is called "Opaque". | 
|---|
| 4484 |  | 
|---|
| 4485 | Examples of suitable formats for Transparent copies include plain | 
|---|
| 4486 | ASCII without markup, Texinfo input format, LaTeX input format, | 
|---|
| 4487 | SGML or XML using a publicly available DTD, and | 
|---|
| 4488 | standard-conforming simple HTML designed for human modification. | 
|---|
| 4489 | Opaque formats include PostScript, PDF, proprietary formats that | 
|---|
| 4490 | can be read and edited only by proprietary word processors, SGML | 
|---|
| 4491 | or XML for which the DTD and/or processing tools are not generally | 
|---|
| 4492 | available, and the machine-generated HTML produced by some word | 
|---|
| 4493 | processors for output purposes only. | 
|---|
| 4494 |  | 
|---|
| 4495 | The "Title Page" means, for a printed book, the title page itself, | 
|---|
| 4496 | plus such following pages as are needed to hold, legibly, the | 
|---|
| 4497 | material this License requires to appear in the title page.  For | 
|---|
| 4498 | works in formats which do not have any title page as such, "Title | 
|---|
| 4499 | Page" means the text near the most prominent appearance of the | 
|---|
| 4500 | work's title, preceding the beginning of the body of the text. | 
|---|
| 4501 |  | 
|---|
| 4502 | 2. VERBATIM COPYING | 
|---|
| 4503 |  | 
|---|
| 4504 | You may copy and distribute the Document in any medium, either | 
|---|
| 4505 | commercially or noncommercially, provided that this License, the | 
|---|
| 4506 | copyright notices, and the license notice saying this License | 
|---|
| 4507 | applies to the Document are reproduced in all copies, and that you | 
|---|
| 4508 | add no other conditions whatsoever to those of this License.  You | 
|---|
| 4509 | may not use technical measures to obstruct or control the reading | 
|---|
| 4510 | or further copying of the copies you make or distribute.  However, | 
|---|
| 4511 | you may accept compensation in exchange for copies.  If you | 
|---|
| 4512 | distribute a large enough number of copies you must also follow | 
|---|
| 4513 | the conditions in section 3. | 
|---|
| 4514 |  | 
|---|
| 4515 | You may also lend copies, under the same conditions stated above, | 
|---|
| 4516 | and you may publicly display copies. | 
|---|
| 4517 |  | 
|---|
| 4518 | 3. COPYING IN QUANTITY | 
|---|
| 4519 |  | 
|---|
| 4520 | If you publish printed copies of the Document numbering more than | 
|---|
| 4521 | 100, and the Document's license notice requires Cover Texts, you | 
|---|
| 4522 | must enclose the copies in covers that carry, clearly and legibly, | 
|---|
| 4523 | all these Cover Texts: Front-Cover Texts on the front cover, and | 
|---|
| 4524 | Back-Cover Texts on the back cover.  Both covers must also clearly | 
|---|
| 4525 | and legibly identify you as the publisher of these copies.  The | 
|---|
| 4526 | front cover must present the full title with all words of the | 
|---|
| 4527 | title equally prominent and visible.  You may add other material | 
|---|
| 4528 | on the covers in addition.  Copying with changes limited to the | 
|---|
| 4529 | covers, as long as they preserve the title of the Document and | 
|---|
| 4530 | satisfy these conditions, can be treated as verbatim copying in | 
|---|
| 4531 | other respects. | 
|---|
| 4532 |  | 
|---|
| 4533 | If the required texts for either cover are too voluminous to fit | 
|---|
| 4534 | legibly, you should put the first ones listed (as many as fit | 
|---|
| 4535 | reasonably) on the actual cover, and continue the rest onto | 
|---|
| 4536 | adjacent pages. | 
|---|
| 4537 |  | 
|---|
| 4538 | If you publish or distribute Opaque copies of the Document | 
|---|
| 4539 | numbering more than 100, you must either include a | 
|---|
| 4540 | machine-readable Transparent copy along with each Opaque copy, or | 
|---|
| 4541 | state in or with each Opaque copy a publicly-accessible | 
|---|
| 4542 | computer-network location containing a complete Transparent copy | 
|---|
| 4543 | of the Document, free of added material, which the general | 
|---|
| 4544 | network-using public has access to download anonymously at no | 
|---|
| 4545 | charge using public-standard network protocols.  If you use the | 
|---|
| 4546 | latter option, you must take reasonably prudent steps, when you | 
|---|
| 4547 | begin distribution of Opaque copies in quantity, to ensure that | 
|---|
| 4548 | this Transparent copy will remain thus accessible at the stated | 
|---|
| 4549 | location until at least one year after the last time you | 
|---|
| 4550 | distribute an Opaque copy (directly or through your agents or | 
|---|
| 4551 | retailers) of that edition to the public. | 
|---|
| 4552 |  | 
|---|
| 4553 | It is requested, but not required, that you contact the authors of | 
|---|
| 4554 | the Document well before redistributing any large number of | 
|---|
| 4555 | copies, to give them a chance to provide you with an updated | 
|---|
| 4556 | version of the Document. | 
|---|
| 4557 |  | 
|---|
| 4558 | 4. MODIFICATIONS | 
|---|
| 4559 |  | 
|---|
| 4560 | You may copy and distribute a Modified Version of the Document | 
|---|
| 4561 | under the conditions of sections 2 and 3 above, provided that you | 
|---|
| 4562 | release the Modified Version under precisely this License, with | 
|---|
| 4563 | the Modified Version filling the role of the Document, thus | 
|---|
| 4564 | licensing distribution and modification of the Modified Version to | 
|---|
| 4565 | whoever possesses a copy of it.  In addition, you must do these | 
|---|
| 4566 | things in the Modified Version: | 
|---|
| 4567 |  | 
|---|
| 4568 | A. Use in the Title Page (and on the covers, if any) a title | 
|---|
| 4569 | distinct from that of the Document, and from those of | 
|---|
| 4570 | previous versions (which should, if there were any, be listed | 
|---|
| 4571 | in the History section of the Document).  You may use the | 
|---|
| 4572 | same title as a previous version if the original publisher of | 
|---|
| 4573 | that version gives permission. | 
|---|
| 4574 |  | 
|---|
| 4575 | B. List on the Title Page, as authors, one or more persons or | 
|---|
| 4576 | entities responsible for authorship of the modifications in | 
|---|
| 4577 | the Modified Version, together with at least five of the | 
|---|
| 4578 | principal authors of the Document (all of its principal | 
|---|
| 4579 | authors, if it has less than five). | 
|---|
| 4580 |  | 
|---|
| 4581 | C. State on the Title page the name of the publisher of the | 
|---|
| 4582 | Modified Version, as the publisher. | 
|---|
| 4583 |  | 
|---|
| 4584 | D. Preserve all the copyright notices of the Document. | 
|---|
| 4585 |  | 
|---|
| 4586 | E. Add an appropriate copyright notice for your modifications | 
|---|
| 4587 | adjacent to the other copyright notices. | 
|---|
| 4588 |  | 
|---|
| 4589 | F. Include, immediately after the copyright notices, a license | 
|---|
| 4590 | notice giving the public permission to use the Modified | 
|---|
| 4591 | Version under the terms of this License, in the form shown in | 
|---|
| 4592 | the Addendum below. | 
|---|
| 4593 |  | 
|---|
| 4594 | G. Preserve in that license notice the full lists of Invariant | 
|---|
| 4595 | Sections and required Cover Texts given in the Document's | 
|---|
| 4596 | license notice. | 
|---|
| 4597 |  | 
|---|
| 4598 | H. Include an unaltered copy of this License. | 
|---|
| 4599 |  | 
|---|
| 4600 | I. Preserve the section entitled "History", and its title, and | 
|---|
| 4601 | add to it an item stating at least the title, year, new | 
|---|
| 4602 | authors, and publisher of the Modified Version as given on | 
|---|
| 4603 | the Title Page.  If there is no section entitled "History" in | 
|---|
| 4604 | the Document, create one stating the title, year, authors, | 
|---|
| 4605 | and publisher of the Document as given on its Title Page, | 
|---|
| 4606 | then add an item describing the Modified Version as stated in | 
|---|
| 4607 | the previous sentence. | 
|---|
| 4608 |  | 
|---|
| 4609 | J. Preserve the network location, if any, given in the Document | 
|---|
| 4610 | for public access to a Transparent copy of the Document, and | 
|---|
| 4611 | likewise the network locations given in the Document for | 
|---|
| 4612 | previous versions it was based on.  These may be placed in | 
|---|
| 4613 | the "History" section.  You may omit a network location for a | 
|---|
| 4614 | work that was published at least four years before the | 
|---|
| 4615 | Document itself, or if the original publisher of the version | 
|---|
| 4616 | it refers to gives permission. | 
|---|
| 4617 |  | 
|---|
| 4618 | K. In any section entitled "Acknowledgments" or "Dedications", | 
|---|
| 4619 | preserve the section's title, and preserve in the section all | 
|---|
| 4620 | the substance and tone of each of the contributor | 
|---|
| 4621 | acknowledgments and/or dedications given therein. | 
|---|
| 4622 |  | 
|---|
| 4623 | L. Preserve all the Invariant Sections of the Document, | 
|---|
| 4624 | unaltered in their text and in their titles.  Section numbers | 
|---|
| 4625 | or the equivalent are not considered part of the section | 
|---|
| 4626 | titles. | 
|---|
| 4627 |  | 
|---|
| 4628 | M. Delete any section entitled "Endorsements".  Such a section | 
|---|
| 4629 | may not be included in the Modified Version. | 
|---|
| 4630 |  | 
|---|
| 4631 | N. Do not retitle any existing section as "Endorsements" or to | 
|---|
| 4632 | conflict in title with any Invariant Section. | 
|---|
| 4633 |  | 
|---|
| 4634 | If the Modified Version includes new front-matter sections or | 
|---|
| 4635 | appendices that qualify as Secondary Sections and contain no | 
|---|
| 4636 | material copied from the Document, you may at your option | 
|---|
| 4637 | designate some or all of these sections as invariant.  To do this, | 
|---|
| 4638 | add their titles to the list of Invariant Sections in the Modified | 
|---|
| 4639 | Version's license notice.  These titles must be distinct from any | 
|---|
| 4640 | other section titles. | 
|---|
| 4641 |  | 
|---|
| 4642 | You may add a section entitled "Endorsements", provided it contains | 
|---|
| 4643 | nothing but endorsements of your Modified Version by various | 
|---|
| 4644 | parties--for example, statements of peer review or that the text | 
|---|
| 4645 | has been approved by an organization as the authoritative | 
|---|
| 4646 | definition of a standard. | 
|---|
| 4647 |  | 
|---|
| 4648 | You may add a passage of up to five words as a Front-Cover Text, | 
|---|
| 4649 | and a passage of up to 25 words as a Back-Cover Text, to the end | 
|---|
| 4650 | of the list of Cover Texts in the Modified Version.  Only one | 
|---|
| 4651 | passage of Front-Cover Text and one of Back-Cover Text may be | 
|---|
| 4652 | added by (or through arrangements made by) any one entity.  If the | 
|---|
| 4653 | Document already includes a cover text for the same cover, | 
|---|
| 4654 | previously added by you or by arrangement made by the same entity | 
|---|
| 4655 | you are acting on behalf of, you may not add another; but you may | 
|---|
| 4656 | replace the old one, on explicit permission from the previous | 
|---|
| 4657 | publisher that added the old one. | 
|---|
| 4658 |  | 
|---|
| 4659 | The author(s) and publisher(s) of the Document do not by this | 
|---|
| 4660 | License give permission to use their names for publicity for or to | 
|---|
| 4661 | assert or imply endorsement of any Modified Version. | 
|---|
| 4662 |  | 
|---|
| 4663 | 5. COMBINING DOCUMENTS | 
|---|
| 4664 |  | 
|---|
| 4665 | You may combine the Document with other documents released under | 
|---|
| 4666 | this License, under the terms defined in section 4 above for | 
|---|
| 4667 | modified versions, provided that you include in the combination | 
|---|
| 4668 | all of the Invariant Sections of all of the original documents, | 
|---|
| 4669 | unmodified, and list them all as Invariant Sections of your | 
|---|
| 4670 | combined work in its license notice. | 
|---|
| 4671 |  | 
|---|
| 4672 | The combined work need only contain one copy of this License, and | 
|---|
| 4673 | multiple identical Invariant Sections may be replaced with a single | 
|---|
| 4674 | copy.  If there are multiple Invariant Sections with the same name | 
|---|
| 4675 | but different contents, make the title of each such section unique | 
|---|
| 4676 | by adding at the end of it, in parentheses, the name of the | 
|---|
| 4677 | original author or publisher of that section if known, or else a | 
|---|
| 4678 | unique number.  Make the same adjustment to the section titles in | 
|---|
| 4679 | the list of Invariant Sections in the license notice of the | 
|---|
| 4680 | combined work. | 
|---|
| 4681 |  | 
|---|
| 4682 | In the combination, you must combine any sections entitled | 
|---|
| 4683 | "History" in the various original documents, forming one section | 
|---|
| 4684 | entitled "History"; likewise combine any sections entitled | 
|---|
| 4685 | "Acknowledgments", and any sections entitled "Dedications".  You | 
|---|
| 4686 | must delete all sections entitled "Endorsements." | 
|---|
| 4687 |  | 
|---|
| 4688 | 6. COLLECTIONS OF DOCUMENTS | 
|---|
| 4689 |  | 
|---|
| 4690 | You may make a collection consisting of the Document and other | 
|---|
| 4691 | documents released under this License, and replace the individual | 
|---|
| 4692 | copies of this License in the various documents with a single copy | 
|---|
| 4693 | that is included in the collection, provided that you follow the | 
|---|
| 4694 | rules of this License for verbatim copying of each of the | 
|---|
| 4695 | documents in all other respects. | 
|---|
| 4696 |  | 
|---|
| 4697 | You may extract a single document from such a collection, and | 
|---|
| 4698 | distribute it individually under this License, provided you insert | 
|---|
| 4699 | a copy of this License into the extracted document, and follow | 
|---|
| 4700 | this License in all other respects regarding verbatim copying of | 
|---|
| 4701 | that document. | 
|---|
| 4702 |  | 
|---|
| 4703 | 7. AGGREGATION WITH INDEPENDENT WORKS | 
|---|
| 4704 |  | 
|---|
| 4705 | A compilation of the Document or its derivatives with other | 
|---|
| 4706 | separate and independent documents or works, in or on a volume of | 
|---|
| 4707 | a storage or distribution medium, does not as a whole count as a | 
|---|
| 4708 | Modified Version of the Document, provided no compilation | 
|---|
| 4709 | copyright is claimed for the compilation.  Such a compilation is | 
|---|
| 4710 | called an "aggregate", and this License does not apply to the | 
|---|
| 4711 | other self-contained works thus compiled with the Document, on | 
|---|
| 4712 | account of their being thus compiled, if they are not themselves | 
|---|
| 4713 | derivative works of the Document. | 
|---|
| 4714 |  | 
|---|
| 4715 | If the Cover Text requirement of section 3 is applicable to these | 
|---|
| 4716 | copies of the Document, then if the Document is less than one | 
|---|
| 4717 | quarter of the entire aggregate, the Document's Cover Texts may be | 
|---|
| 4718 | placed on covers that surround only the Document within the | 
|---|
| 4719 | aggregate.  Otherwise they must appear on covers around the whole | 
|---|
| 4720 | aggregate. | 
|---|
| 4721 |  | 
|---|
| 4722 | 8. TRANSLATION | 
|---|
| 4723 |  | 
|---|
| 4724 | Translation is considered a kind of modification, so you may | 
|---|
| 4725 | distribute translations of the Document under the terms of section | 
|---|
| 4726 | 4.  Replacing Invariant Sections with translations requires special | 
|---|
| 4727 | permission from their copyright holders, but you may include | 
|---|
| 4728 | translations of some or all Invariant Sections in addition to the | 
|---|
| 4729 | original versions of these Invariant Sections.  You may include a | 
|---|
| 4730 | translation of this License provided that you also include the | 
|---|
| 4731 | original English version of this License.  In case of a | 
|---|
| 4732 | disagreement between the translation and the original English | 
|---|
| 4733 | version of this License, the original English version will prevail. | 
|---|
| 4734 |  | 
|---|
| 4735 | 9. TERMINATION | 
|---|
| 4736 |  | 
|---|
| 4737 | You may not copy, modify, sublicense, or distribute the Document | 
|---|
| 4738 | except as expressly provided for under this License.  Any other | 
|---|
| 4739 | attempt to copy, modify, sublicense or distribute the Document is | 
|---|
| 4740 | void, and will automatically terminate your rights under this | 
|---|
| 4741 | License.  However, parties who have received copies, or rights, | 
|---|
| 4742 | from you under this License will not have their licenses | 
|---|
| 4743 | terminated so long as such parties remain in full compliance. | 
|---|
| 4744 |  | 
|---|
| 4745 | 10. FUTURE REVISIONS OF THIS LICENSE | 
|---|
| 4746 |  | 
|---|
| 4747 | The Free Software Foundation may publish new, revised versions of | 
|---|
| 4748 | the GNU Free Documentation License from time to time.  Such new | 
|---|
| 4749 | versions will be similar in spirit to the present version, but may | 
|---|
| 4750 | differ in detail to address new problems or concerns.  See | 
|---|
| 4751 | `http://www.gnu.org/copyleft/'. | 
|---|
| 4752 |  | 
|---|
| 4753 | Each version of the License is given a distinguishing version | 
|---|
| 4754 | number.  If the Document specifies that a particular numbered | 
|---|
| 4755 | version of this License "or any later version" applies to it, you | 
|---|
| 4756 | have the option of following the terms and conditions either of | 
|---|
| 4757 | that specified version or of any later version that has been | 
|---|
| 4758 | published (not as a draft) by the Free Software Foundation.  If | 
|---|
| 4759 | the Document does not specify a version number of this License, | 
|---|
| 4760 | you may choose any version ever published (not as a draft) by the | 
|---|
| 4761 | Free Software Foundation. | 
|---|
| 4762 |  | 
|---|
| 4763 | ADDENDUM: How to use this License for your documents | 
|---|
| 4764 | ---------------------------------------------------- | 
|---|
| 4765 |  | 
|---|
| 4766 | To use this License in a document you have written, include a copy of | 
|---|
| 4767 | the License in the document and put the following copyright and license | 
|---|
| 4768 | notices just after the title page: | 
|---|
| 4769 |  | 
|---|
| 4770 | Copyright (C)  YEAR  YOUR NAME. | 
|---|
| 4771 | Permission is granted to copy, distribute and/or modify this document | 
|---|
| 4772 | under the terms of the GNU Free Documentation License, Version 1.1 | 
|---|
| 4773 | or any later version published by the Free Software Foundation; | 
|---|
| 4774 | with the Invariant Sections being LIST THEIR TITLES, with the | 
|---|
| 4775 | Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. | 
|---|
| 4776 | A copy of the license is included in the section entitled ``GNU | 
|---|
| 4777 | Free Documentation License''. | 
|---|
| 4778 |  | 
|---|
| 4779 | If you have no Invariant Sections, write "with no Invariant Sections" | 
|---|
| 4780 | instead of saying which ones are invariant.  If you have no Front-Cover | 
|---|
| 4781 | Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being | 
|---|
| 4782 | LIST"; likewise for Back-Cover Texts. | 
|---|
| 4783 |  | 
|---|
| 4784 | If your document contains nontrivial examples of program code, we | 
|---|
| 4785 | recommend releasing these examples in parallel under your choice of | 
|---|
| 4786 | free software license, such as the GNU General Public License, to | 
|---|
| 4787 | permit their use in free software. | 
|---|
| 4788 |  | 
|---|
| 4789 |  | 
|---|
| 4790 | File: diff.info,  Node: Index,  Prev: Copying This Manual,  Up: Top | 
|---|
| 4791 |  | 
|---|
| 4792 | Index | 
|---|
| 4793 | ***** | 
|---|
| 4794 |  | 
|---|
| 4795 | * Menu: | 
|---|
| 4796 |  | 
|---|
| 4797 | * ! output format:                       Context. | 
|---|
| 4798 | * +- output format:                      Unified Format. | 
|---|
| 4799 | * < output format:                       Normal. | 
|---|
| 4800 | * <<<<<<< for marking conflicts:         Marking Conflicts. | 
|---|
| 4801 | * _POSIX2_VERSION:                       Standards conformance. | 
|---|
| 4802 | * aligning tab stops:                    Tabs. | 
|---|
| 4803 | * alternate file names:                  Alternate Names. | 
|---|
| 4804 | * backup file names:                     Backup Names. | 
|---|
| 4805 | * backup file strategy:                  Backups. | 
|---|
| 4806 | * binary file diff:                      Binary. | 
|---|
| 4807 | * blank and tab difference suppression:  White Space. | 
|---|
| 4808 | * blank line difference suppression:     Blank Lines. | 
|---|
| 4809 | * brief difference reports:              Brief. | 
|---|
| 4810 | * bug reports:                           Bugs. | 
|---|
| 4811 | * C function headings:                   C Function Headings. | 
|---|
| 4812 | * C if-then-else output format:          If-then-else. | 
|---|
| 4813 | * case difference suppression:           Case Folding. | 
|---|
| 4814 | * ClearCase:                             Revision Control. | 
|---|
| 4815 | * cmp invocation:                        Invoking cmp. | 
|---|
| 4816 | * cmp options:                           cmp Options. | 
|---|
| 4817 | * columnar output:                       Side by Side. | 
|---|
| 4818 | * common mistakes with patches:          Avoiding Common Mistakes. | 
|---|
| 4819 | * comparing three files:                 Comparing Three Files. | 
|---|
| 4820 | * conflict:                              diff3 Merging. | 
|---|
| 4821 | * conflict marking:                      Marking Conflicts. | 
|---|
| 4822 | * context output format:                 Context. | 
|---|
| 4823 | * creating files:                        Creating and Removing. | 
|---|
| 4824 | * diagnostics from patch:                patch Messages. | 
|---|
| 4825 | * diff invocation:                       Invoking diff. | 
|---|
| 4826 | * diff merging:                          Interactive Merging. | 
|---|
| 4827 | * diff options:                          diff Options. | 
|---|
| 4828 | * diff sample input:                     Sample diff Input. | 
|---|
| 4829 | * diff3 hunks:                           diff3 Hunks. | 
|---|
| 4830 | * diff3 invocation:                      Invoking diff3. | 
|---|
| 4831 | * diff3 options:                         diff3 Options. | 
|---|
| 4832 | * diff3 sample input:                    Sample diff3 Input. | 
|---|
| 4833 | * directories and patch:                 patch Directories. | 
|---|
| 4834 | * directory structure changes:           Changing Structure. | 
|---|
| 4835 | * dry runs for patch:                    Dry Runs. | 
|---|
| 4836 | * ed script output format:               ed Scripts. | 
|---|
| 4837 | * EDITOR:                                Merge Commands. | 
|---|
| 4838 | * empty files, removing:                 Creating and Removing. | 
|---|
| 4839 | * exabyte, definition of:                cmp Options. | 
|---|
| 4840 | * exbibyte, definition of:               cmp Options. | 
|---|
| 4841 | * FDL, GNU Free Documentation License:   GNU Free Documentation License. | 
|---|
| 4842 | * file name alternates:                  Alternate Names. | 
|---|
| 4843 | * file names with unusual characters:    Unusual File Names. | 
|---|
| 4844 | * format of diff output:                 Output Formats. | 
|---|
| 4845 | * format of diff3 output:                Comparing Three Files. | 
|---|
| 4846 | * formats for if-then-else line groups:  Line Group Formats. | 
|---|
| 4847 | * forward ed script output format:       Forward ed. | 
|---|
| 4848 | * full lines:                            Incomplete Lines. | 
|---|
| 4849 | * function headings, C:                  C Function Headings. | 
|---|
| 4850 | * fuzz factor when patching:             Inexact. | 
|---|
| 4851 | * gibibyte, definition of:               cmp Options. | 
|---|
| 4852 | * gigabyte, definition of:               cmp Options. | 
|---|
| 4853 | * headings:                              Sections. | 
|---|
| 4854 | * hunks:                                 Hunks. | 
|---|
| 4855 | * hunks for diff3:                       diff3 Hunks. | 
|---|
| 4856 | * if-then-else output format:            If-then-else. | 
|---|
| 4857 | * ifdef output format:                   If-then-else. | 
|---|
| 4858 | * imperfect patch application:           Imperfect. | 
|---|
| 4859 | * incomplete line merging:               Merging Incomplete Lines. | 
|---|
| 4860 | * incomplete lines:                      Incomplete Lines. | 
|---|
| 4861 | * inexact patches:                       Inexact. | 
|---|
| 4862 | * inhibit messages from patch:           More or Fewer Messages. | 
|---|
| 4863 | * interactive merging:                   Interactive Merging. | 
|---|
| 4864 | * introduction:                          Comparison. | 
|---|
| 4865 | * intuiting file names from patches:     Multiple Patches. | 
|---|
| 4866 | * invoking cmp:                          Invoking cmp. | 
|---|
| 4867 | * invoking diff:                         Invoking diff. | 
|---|
| 4868 | * invoking diff3:                        Invoking diff3. | 
|---|
| 4869 | * invoking patch:                        Invoking patch. | 
|---|
| 4870 | * invoking sdiff:                        Invoking sdiff. | 
|---|
| 4871 | * keyboard input to patch:               patch and Keyboard Input. | 
|---|
| 4872 | * kibibyte, definition of:               cmp Options. | 
|---|
| 4873 | * kilobyte, definition of:               cmp Options. | 
|---|
| 4874 | * LC_COLLATE:                            Comparing Directories. | 
|---|
| 4875 | * LC_NUMERIC:                            Line Group Formats. | 
|---|
| 4876 | * LC_TIME:                               Detailed Context. | 
|---|
| 4877 | * line formats:                          Line Formats. | 
|---|
| 4878 | * line group formats:                    Line Group Formats. | 
|---|
| 4879 | * mebibyte, definition of:               cmp Options. | 
|---|
| 4880 | * megabyte, definition of:               cmp Options. | 
|---|
| 4881 | * merge commands:                        Merge Commands. | 
|---|
| 4882 | * merged diff3 format:                   Bypassing ed. | 
|---|
| 4883 | * merged output format:                  If-then-else. | 
|---|
| 4884 | * merging from a common ancestor:        diff3 Merging. | 
|---|
| 4885 | * merging interactively:                 Merge Commands. | 
|---|
| 4886 | * messages from patch:                   patch Messages. | 
|---|
| 4887 | * multibyte characters:                  Internationalization. | 
|---|
| 4888 | * multiple patches:                      Multiple Patches. | 
|---|
| 4889 | * newline treatment by diff:             Incomplete Lines. | 
|---|
| 4890 | * normal output format:                  Normal. | 
|---|
| 4891 | * options for cmp:                       cmp Options. | 
|---|
| 4892 | * options for diff:                      diff Options. | 
|---|
| 4893 | * options for diff3:                     diff3 Options. | 
|---|
| 4894 | * options for patch:                     patch Options. | 
|---|
| 4895 | * options for sdiff:                     sdiff Options. | 
|---|
| 4896 | * output formats:                        Output Formats. | 
|---|
| 4897 | * overlap:                               diff3 Merging. | 
|---|
| 4898 | * overlapping change, selection of:      Which Changes. | 
|---|
| 4899 | * overview of diff and patch:            Overview. | 
|---|
| 4900 | * paginating diff output:                Pagination. | 
|---|
| 4901 | * patch consumer tips:                   Tips for Patch Consumers. | 
|---|
| 4902 | * patch input format:                    patch Input. | 
|---|
| 4903 | * patch invocation:                      Invoking patch. | 
|---|
| 4904 | * patch messages and questions:          patch Messages. | 
|---|
| 4905 | * patch options:                         patch Options. | 
|---|
| 4906 | * patch producer tips:                   Tips for Patch Producers. | 
|---|
| 4907 | * patch, common mistakes:                Avoiding Common Mistakes. | 
|---|
| 4908 | * PATCH_GET:                             Revision Control. | 
|---|
| 4909 | * PATCH_VERSION_CONTROL:                 Backup Names. | 
|---|
| 4910 | * patches, shrinking:                    Generating Smaller Patches. | 
|---|
| 4911 | * patching directories:                  patch Directories. | 
|---|
| 4912 | * pebibyte, definition of:               cmp Options. | 
|---|
| 4913 | * performance of diff:                   diff Performance. | 
|---|
| 4914 | * petabyte, definition of:               cmp Options. | 
|---|
| 4915 | * POSIX <1>:                             Standards conformance. | 
|---|
| 4916 | * POSIX:                                 patch and POSIX. | 
|---|
| 4917 | * POSIXLY_CORRECT <1>:                   patch and POSIX. | 
|---|
| 4918 | * POSIXLY_CORRECT:                       Standards conformance. | 
|---|
| 4919 | * projects for directories:              Shortcomings. | 
|---|
| 4920 | * quoting style:                         patch Quoting Style. | 
|---|
| 4921 | * QUOTING_STYLE:                         patch Quoting Style. | 
|---|
| 4922 | * RCS:                                   Revision Control. | 
|---|
| 4923 | * RCS script output format:              RCS. | 
|---|
| 4924 | * regular expression matching headings:  Specified Headings. | 
|---|
| 4925 | * regular expression suppression:        Specified Folding. | 
|---|
| 4926 | * reject file names:                     Reject Names. | 
|---|
| 4927 | * removing empty files:                  Creating and Removing. | 
|---|
| 4928 | * reporting bugs:                        Bugs. | 
|---|
| 4929 | * reversed patches:                      Reversed Patches. | 
|---|
| 4930 | * revision control:                      Revision Control. | 
|---|
| 4931 | * sample input for diff:                 Sample diff Input. | 
|---|
| 4932 | * sample input for diff3:                Sample diff3 Input. | 
|---|
| 4933 | * SCCS:                                  Revision Control. | 
|---|
| 4934 | * script output formats:                 Scripts. | 
|---|
| 4935 | * sdiff invocation:                      Invoking sdiff. | 
|---|
| 4936 | * sdiff options:                         sdiff Options. | 
|---|
| 4937 | * sdiff output format:                   sdiff Option Summary. | 
|---|
| 4938 | * section headings:                      Sections. | 
|---|
| 4939 | * side by side:                          Side by Side. | 
|---|
| 4940 | * side by side format:                   Side by Side Format. | 
|---|
| 4941 | * SIMPLE_BACKUP_SUFFIX:                  Backup Names. | 
|---|
| 4942 | * special files:                         Special Files. | 
|---|
| 4943 | * specified headings:                    Specified Headings. | 
|---|
| 4944 | * summarizing which files differ:        Brief. | 
|---|
| 4945 | * System V diff3 compatibility:          Saving the Changed File. | 
|---|
| 4946 | * tab and blank difference suppression:  White Space. | 
|---|
| 4947 | * tab stop alignment:                    Tabs. | 
|---|
| 4948 | * tebibyte, definition of:               cmp Options. | 
|---|
| 4949 | * terabyte, definition of:               cmp Options. | 
|---|
| 4950 | * testing patch:                         Dry Runs. | 
|---|
| 4951 | * text versus binary diff:               Binary. | 
|---|
| 4952 | * time stamp format, context diffs:      Detailed Context. | 
|---|
| 4953 | * time stamp format, unified diffs:      Detailed Unified. | 
|---|
| 4954 | * time stamps on patched files:          Patching Time Stamps. | 
|---|
| 4955 | * traditional patch:                     patch and Tradition. | 
|---|
| 4956 | * two-column output:                     Side by Side. | 
|---|
| 4957 | * unified output format:                 Unified Format. | 
|---|
| 4958 | * unmerged change:                       Which Changes. | 
|---|
| 4959 | * varying-width characters:              Internationalization. | 
|---|
| 4960 | * verbose messages from patch:           More or Fewer Messages. | 
|---|
| 4961 | * version control:                       Revision Control. | 
|---|
| 4962 | * VERSION_CONTROL <1>:                   Backup Names. | 
|---|
| 4963 | * VERSION_CONTROL:                       Revision Control. | 
|---|
| 4964 | * white space in patches:                Changed White Space. | 
|---|
| 4965 | * yottabyte, definition of:              cmp Options. | 
|---|
| 4966 | * zettabyte, definition of:              cmp Options. | 
|---|
| 4967 |  | 
|---|
| 4968 |  | 
|---|
| 4969 |  | 
|---|
| 4970 | Tag Table: | 
|---|
| 4971 | Node: Top1653 | 
|---|
| 4972 | Node: Overview4045 | 
|---|
| 4973 | Node: Comparison7202 | 
|---|
| 4974 | Node: Hunks9888 | 
|---|
| 4975 | Node: White Space11313 | 
|---|
| 4976 | Node: Blank Lines12807 | 
|---|
| 4977 | Node: Case Folding13562 | 
|---|
| 4978 | Node: Specified Folding13977 | 
|---|
| 4979 | Node: Brief15052 | 
|---|
| 4980 | Node: Binary16295 | 
|---|
| 4981 | Node: Output Formats20358 | 
|---|
| 4982 | Node: Sample diff Input21076 | 
|---|
| 4983 | Node: Normal22569 | 
|---|
| 4984 | Node: Detailed Normal23564 | 
|---|
| 4985 | Node: Example Normal25289 | 
|---|
| 4986 | Node: Context26011 | 
|---|
| 4987 | Node: Context Format27567 | 
|---|
| 4988 | Node: Detailed Context28345 | 
|---|
| 4989 | Node: Example Context30234 | 
|---|
| 4990 | Node: Less Context31748 | 
|---|
| 4991 | Node: Unified Format32894 | 
|---|
| 4992 | Node: Detailed Unified33676 | 
|---|
| 4993 | Node: Example Unified34787 | 
|---|
| 4994 | Node: Sections35807 | 
|---|
| 4995 | Node: Specified Headings36552 | 
|---|
| 4996 | Node: C Function Headings38083 | 
|---|
| 4997 | Node: Alternate Names38908 | 
|---|
| 4998 | Node: Side by Side39808 | 
|---|
| 4999 | Node: Side by Side Format41947 | 
|---|
| 5000 | Node: Example Side by Side42836 | 
|---|
| 5001 | Node: Scripts44162 | 
|---|
| 5002 | Node: ed Scripts44563 | 
|---|
| 5003 | Node: Detailed ed45756 | 
|---|
| 5004 | Node: Example ed47497 | 
|---|
| 5005 | Node: Forward ed47934 | 
|---|
| 5006 | Node: RCS48696 | 
|---|
| 5007 | Node: If-then-else49904 | 
|---|
| 5008 | Node: Line Group Formats51572 | 
|---|
| 5009 | Node: Line Formats57437 | 
|---|
| 5010 | Node: Detailed If-then-else60693 | 
|---|
| 5011 | Node: Example If-then-else62583 | 
|---|
| 5012 | Node: Incomplete Lines63632 | 
|---|
| 5013 | Node: Comparing Directories65263 | 
|---|
| 5014 | Node: Adjusting Output69220 | 
|---|
| 5015 | Node: Tabs69645 | 
|---|
| 5016 | Node: Pagination71177 | 
|---|
| 5017 | Node: diff Performance71626 | 
|---|
| 5018 | Node: Comparing Three Files74708 | 
|---|
| 5019 | Node: Sample diff3 Input75580 | 
|---|
| 5020 | Node: Detailed diff3 Normal76528 | 
|---|
| 5021 | Node: diff3 Hunks78307 | 
|---|
| 5022 | Node: Example diff3 Normal79593 | 
|---|
| 5023 | Node: diff3 Merging80616 | 
|---|
| 5024 | Node: Which Changes82854 | 
|---|
| 5025 | Node: Marking Conflicts84258 | 
|---|
| 5026 | Node: Bypassing ed86714 | 
|---|
| 5027 | Node: Merging Incomplete Lines88068 | 
|---|
| 5028 | Node: Saving the Changed File88784 | 
|---|
| 5029 | Node: Interactive Merging89390 | 
|---|
| 5030 | Node: sdiff Option Summary90094 | 
|---|
| 5031 | Node: Merge Commands91242 | 
|---|
| 5032 | Node: Merging with patch92503 | 
|---|
| 5033 | Node: patch Input94867 | 
|---|
| 5034 | Node: Revision Control95537 | 
|---|
| 5035 | Node: Imperfect96689 | 
|---|
| 5036 | Node: Changed White Space97825 | 
|---|
| 5037 | Node: Reversed Patches98606 | 
|---|
| 5038 | Node: Inexact100056 | 
|---|
| 5039 | Node: Dry Runs103599 | 
|---|
| 5040 | Node: Creating and Removing104447 | 
|---|
| 5041 | Node: Patching Time Stamps105486 | 
|---|
| 5042 | Node: Multiple Patches107677 | 
|---|
| 5043 | Node: patch Directories110328 | 
|---|
| 5044 | Node: Backups111942 | 
|---|
| 5045 | Node: Backup Names112996 | 
|---|
| 5046 | Ref: Backup Names-Footnote-1115955 | 
|---|
| 5047 | Node: Reject Names116082 | 
|---|
| 5048 | Node: patch Messages116660 | 
|---|
| 5049 | Node: More or Fewer Messages117706 | 
|---|
| 5050 | Node: patch and Keyboard Input118319 | 
|---|
| 5051 | Node: patch Quoting Style119332 | 
|---|
| 5052 | Node: patch and POSIX120464 | 
|---|
| 5053 | Node: patch and Tradition121290 | 
|---|
| 5054 | Node: Making Patches124734 | 
|---|
| 5055 | Node: Tips for Patch Producers125552 | 
|---|
| 5056 | Node: Tips for Patch Consumers126796 | 
|---|
| 5057 | Node: Avoiding Common Mistakes127421 | 
|---|
| 5058 | Node: Generating Smaller Patches129934 | 
|---|
| 5059 | Node: Invoking cmp131683 | 
|---|
| 5060 | Node: cmp Options132532 | 
|---|
| 5061 | Node: Invoking diff135896 | 
|---|
| 5062 | Node: diff Options137599 | 
|---|
| 5063 | Node: Invoking diff3145722 | 
|---|
| 5064 | Node: diff3 Options146352 | 
|---|
| 5065 | Node: Invoking patch149255 | 
|---|
| 5066 | Node: patch Options150455 | 
|---|
| 5067 | Node: Invoking sdiff155669 | 
|---|
| 5068 | Node: sdiff Options156808 | 
|---|
| 5069 | Node: Standards conformance159561 | 
|---|
| 5070 | Node: Projects161299 | 
|---|
| 5071 | Node: Shortcomings162002 | 
|---|
| 5072 | Node: Internationalization163092 | 
|---|
| 5073 | Node: Changing Structure164247 | 
|---|
| 5074 | Node: Special Files165336 | 
|---|
| 5075 | Node: Unusual File Names166282 | 
|---|
| 5076 | Node: Time Stamp Order166904 | 
|---|
| 5077 | Node: Ignoring Changes167531 | 
|---|
| 5078 | Node: Speedups168285 | 
|---|
| 5079 | Node: Bugs168733 | 
|---|
| 5080 | Node: Copying This Manual169574 | 
|---|
| 5081 | Node: GNU Free Documentation License169782 | 
|---|
| 5082 | Node: Index189646 | 
|---|
| 5083 |  | 
|---|
| 5084 | End Tag Table | 
|---|