[16148] | 1 | This is Info file diff.info, produced by Makeinfo-1.55 from the input |
---|
| 2 | file ./diff.texi. |
---|
| 3 | |
---|
| 4 | This file documents the the GNU `diff', `diff3', `sdiff', and `cmp' |
---|
| 5 | commands for showing the differences between text files and the `patch' |
---|
| 6 | command for using their output to update files. |
---|
| 7 | |
---|
| 8 | Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. |
---|
| 9 | |
---|
| 10 | Permission is granted to make and distribute verbatim copies of this |
---|
| 11 | manual provided the copyright notice and this permission notice are |
---|
| 12 | preserved on all copies. |
---|
| 13 | |
---|
| 14 | Permission is granted to copy and distribute modified versions of |
---|
| 15 | this manual under the conditions for verbatim copying, provided that |
---|
| 16 | the entire resulting derived work is distributed under the terms of a |
---|
| 17 | permission notice identical to this one. |
---|
| 18 | |
---|
| 19 | Permission is granted to copy and distribute translations of this |
---|
| 20 | manual into another language, under the above conditions for modified |
---|
| 21 | versions, except that this permission notice may be stated in a |
---|
| 22 | translation approved by the Foundation. |
---|
| 23 | |
---|
| 24 | |
---|
| 25 | File: diff.info, Node: Making Patches, Next: Invoking cmp, Prev: Merging with patch, Up: Top |
---|
| 26 | |
---|
| 27 | Tips for Making Patch Distributions |
---|
| 28 | *********************************** |
---|
| 29 | |
---|
| 30 | Here are some things you should keep in mind if you are going to |
---|
| 31 | distribute patches for updating a software package. |
---|
| 32 | |
---|
| 33 | Make sure you have specified the file names correctly, either in a |
---|
| 34 | context diff header or with an `Index:' line. If you are patching |
---|
| 35 | files in a subdirectory, be sure to tell the patch user to specify a |
---|
| 36 | `-p' or `--strip' option as needed. Take care to not send out reversed |
---|
| 37 | patches, since these make people wonder whether they have already |
---|
| 38 | applied the patch. |
---|
| 39 | |
---|
| 40 | To save people from partially applying a patch before other patches |
---|
| 41 | that should have gone before it, you can make the first patch in the |
---|
| 42 | patch file update a file with a name like `patchlevel.h' or |
---|
| 43 | `version.c', which contains a patch level or version number. If the |
---|
| 44 | input file contains the wrong version number, `patch' will complain |
---|
| 45 | immediately. |
---|
| 46 | |
---|
| 47 | An even clearer way to prevent this problem is to put a `Prereq:' |
---|
| 48 | line before the patch. If the leading text in the patch file contains a |
---|
| 49 | line that starts with `Prereq:', `patch' takes the next word from that |
---|
| 50 | line (normally a version number) and checks whether the next input file |
---|
| 51 | contains that word, preceded and followed by either white space or a |
---|
| 52 | newline. If not, `patch' prompts you for confirmation before |
---|
| 53 | proceeding. This makes it difficult to accidentally apply patches in |
---|
| 54 | the wrong order. |
---|
| 55 | |
---|
| 56 | Since `patch' does not handle incomplete lines properly, make sure |
---|
| 57 | that all the source files in your program end with a newline whenever |
---|
| 58 | you release a version. |
---|
| 59 | |
---|
| 60 | To create a patch that changes an older version of a package into a |
---|
| 61 | newer version, first make a copy of the older version in a scratch |
---|
| 62 | directory. Typically you do that by unpacking a `tar' or `shar' |
---|
| 63 | archive of the older version. |
---|
| 64 | |
---|
| 65 | You might be able to reduce the size of the patch by renaming or |
---|
| 66 | removing some files before making the patch. If the older version of |
---|
| 67 | the package contains any files that the newer version does not, or if |
---|
| 68 | any files have been renamed between the two versions, make a list of |
---|
| 69 | `rm' and `mv' commands for the user to execute in the old version |
---|
| 70 | directory before applying the patch. Then run those commands yourself |
---|
| 71 | in the scratch directory. |
---|
| 72 | |
---|
| 73 | If there are any files that you don't need to include in the patch |
---|
| 74 | because they can easily be rebuilt from other files (for example, |
---|
| 75 | `TAGS' and output from `yacc' and `makeinfo'), replace the versions in |
---|
| 76 | the scratch directory with the newer versions, using `rm' and `ln' or |
---|
| 77 | `cp'. |
---|
| 78 | |
---|
| 79 | Now you can create the patch. The de-facto standard `diff' format |
---|
| 80 | for patch distributions is context format with two lines of context, |
---|
| 81 | produced by giving `diff' the `-C 2' option. Do not use less than two |
---|
| 82 | lines of context, because `patch' typically needs at least two lines |
---|
| 83 | for proper operation. Give `diff' the `-P' option in case the newer |
---|
| 84 | version of the package contains any files that the older one does not. |
---|
| 85 | Make sure to specify the scratch directory first and the newer |
---|
| 86 | directory second. |
---|
| 87 | |
---|
| 88 | Add to the top of the patch a note telling the user any `rm' and |
---|
| 89 | `mv' commands to run before applying the patch. Then you can remove |
---|
| 90 | the scratch directory. |
---|
| 91 | |
---|
| 92 | |
---|
| 93 | File: diff.info, Node: Invoking cmp, Next: Invoking diff, Prev: Making Patches, Up: Top |
---|
| 94 | |
---|
| 95 | Invoking `cmp' |
---|
| 96 | ************** |
---|
| 97 | |
---|
| 98 | The `cmp' command compares two files, and if they differ, tells the |
---|
| 99 | first byte and line number where they differ. Its arguments are as |
---|
| 100 | follows: |
---|
| 101 | |
---|
| 102 | cmp OPTIONS... FROM-FILE [TO-FILE] |
---|
| 103 | |
---|
| 104 | The file name `-' is always the standard input. `cmp' also uses the |
---|
| 105 | standard input if one file name is omitted. |
---|
| 106 | |
---|
| 107 | An exit status of 0 means no differences were found, 1 means some |
---|
| 108 | differences were found, and 2 means trouble. |
---|
| 109 | |
---|
| 110 | * Menu: |
---|
| 111 | |
---|
| 112 | * cmp Options:: Summary of options to `cmp'. |
---|
| 113 | |
---|
| 114 | |
---|
| 115 | File: diff.info, Node: cmp Options, Up: Invoking cmp |
---|
| 116 | |
---|
| 117 | Options to `cmp' |
---|
| 118 | ================ |
---|
| 119 | |
---|
| 120 | Below is a summary of all of the options that GNU `cmp' accepts. |
---|
| 121 | Most options have two equivalent names, one of which is a single letter |
---|
| 122 | preceded by `-', and the other of which is a long name preceded by |
---|
| 123 | `--'. Multiple single letter options (unless they take an argument) |
---|
| 124 | can be combined into a single command line word: `-cl' is equivalent to |
---|
| 125 | `-c -l'. |
---|
| 126 | |
---|
| 127 | `-c' |
---|
| 128 | Print the differing characters. Display control characters as a |
---|
| 129 | `^' followed by a letter of the alphabet and precede characters |
---|
| 130 | that have the high bit set with `M-' (which stands for "meta"). |
---|
| 131 | |
---|
| 132 | `--ignore-initial=BYTES' |
---|
| 133 | Ignore any differences in the the first BYTES bytes of the input |
---|
| 134 | files. Treat files with fewer than BYTES bytes as if they are |
---|
| 135 | empty. |
---|
| 136 | |
---|
| 137 | `-l' |
---|
| 138 | Print the (decimal) offsets and (octal) values of all differing |
---|
| 139 | bytes. |
---|
| 140 | |
---|
| 141 | `--print-chars' |
---|
| 142 | Print the differing characters. Display control characters as a |
---|
| 143 | `^' followed by a letter of the alphabet and precede characters |
---|
| 144 | that have the high bit set with `M-' (which stands for "meta"). |
---|
| 145 | |
---|
| 146 | `--quiet' |
---|
| 147 | `-s' |
---|
| 148 | `--silent' |
---|
| 149 | Do not print anything; only return an exit status indicating |
---|
| 150 | whether the files differ. |
---|
| 151 | |
---|
| 152 | `--verbose' |
---|
| 153 | Print the (decimal) offsets and (octal) values of all differing |
---|
| 154 | bytes. |
---|
| 155 | |
---|
| 156 | `-v' |
---|
| 157 | `--version' |
---|
| 158 | Output the version number of `cmp'. |
---|
| 159 | |
---|
| 160 | |
---|
| 161 | File: diff.info, Node: Invoking diff, Next: Invoking diff3, Prev: Invoking cmp, Up: Top |
---|
| 162 | |
---|
| 163 | Invoking `diff' |
---|
| 164 | *************** |
---|
| 165 | |
---|
| 166 | The format for running the `diff' command is: |
---|
| 167 | |
---|
| 168 | diff OPTIONS... FROM-FILE TO-FILE |
---|
| 169 | |
---|
| 170 | In the simplest case, `diff' compares the contents of the two files |
---|
| 171 | FROM-FILE and TO-FILE. A file name of `-' stands for text read from |
---|
| 172 | the standard input. As a special case, `diff - -' compares a copy of |
---|
| 173 | standard input to itself. |
---|
| 174 | |
---|
| 175 | If FROM-FILE is a directory and TO-FILE is not, `diff' compares the |
---|
| 176 | file in FROM-FILE whose file name is that of TO-FILE, and vice versa. |
---|
| 177 | The non-directory file must not be `-'. |
---|
| 178 | |
---|
| 179 | If both FROM-FILE and TO-FILE are directories, `diff' compares |
---|
| 180 | corresponding files in both directories, in alphabetical order; this |
---|
| 181 | comparison is not recursive unless the `-r' or `--recursive' option is |
---|
| 182 | given. `diff' never compares the actual contents of a directory as if |
---|
| 183 | it were a file. The file that is fully specified may not be standard |
---|
| 184 | input, because standard input is nameless and the notion of "file with |
---|
| 185 | the same name" does not apply. |
---|
| 186 | |
---|
| 187 | `diff' options begin with `-', so normally FROM-FILE and TO-FILE may |
---|
| 188 | not begin with `-'. However, `--' as an argument by itself treats the |
---|
| 189 | remaining arguments as file names even if they begin with `-'. |
---|
| 190 | |
---|
| 191 | An exit status of 0 means no differences were found, 1 means some |
---|
| 192 | differences were found, and 2 means trouble. |
---|
| 193 | |
---|
| 194 | * Menu: |
---|
| 195 | |
---|
| 196 | * diff Options:: Summary of options to `diff'. |
---|
| 197 | |
---|
| 198 | |
---|
| 199 | File: diff.info, Node: diff Options, Up: Invoking diff |
---|
| 200 | |
---|
| 201 | Options to `diff' |
---|
| 202 | ================= |
---|
| 203 | |
---|
| 204 | Below is a summary of all of the options that GNU `diff' accepts. |
---|
| 205 | Most options have two equivalent names, one of which is a single letter |
---|
| 206 | preceded by `-', and the other of which is a long name preceded by |
---|
| 207 | `--'. Multiple single letter options (unless they take an argument) |
---|
| 208 | can be combined into a single command line word: `-ac' is equivalent to |
---|
| 209 | `-a -c'. Long named options can be abbreviated to any unique prefix of |
---|
| 210 | their name. Brackets ([ and ]) indicate that an option takes an |
---|
| 211 | optional argument. |
---|
| 212 | |
---|
| 213 | `-LINES' |
---|
| 214 | Show LINES (an integer) lines of context. This option does not |
---|
| 215 | specify an output format by itself; it has no effect unless it is |
---|
| 216 | combined with `-c' (*note Context Format::.) or `-u' (*note |
---|
| 217 | Unified Format::.). This option is obsolete. For proper |
---|
| 218 | operation, `patch' typically needs at least two lines of context. |
---|
| 219 | |
---|
| 220 | `-a' |
---|
| 221 | Treat all files as text and compare them line-by-line, even if they |
---|
| 222 | do not seem to be text. *Note Binary::. |
---|
| 223 | |
---|
| 224 | `-b' |
---|
| 225 | Ignore changes in amount of white space. *Note White Space::. |
---|
| 226 | |
---|
| 227 | `-B' |
---|
| 228 | Ignore changes that just insert or delete blank lines. *Note |
---|
| 229 | Blank Lines::. |
---|
| 230 | |
---|
| 231 | `--binary' |
---|
| 232 | Read and write data in binary mode. *Note Binary::. |
---|
| 233 | |
---|
| 234 | `--brief' |
---|
| 235 | Report only whether the files differ, not the details of the |
---|
| 236 | differences. *Note Brief::. |
---|
| 237 | |
---|
| 238 | `-c' |
---|
| 239 | Use the context output format. *Note Context Format::. |
---|
| 240 | |
---|
| 241 | `-C LINES' |
---|
| 242 | `--context[=LINES]' |
---|
| 243 | Use the context output format, showing LINES (an integer) lines of |
---|
| 244 | context, or three if LINES is not given. *Note Context Format::. |
---|
| 245 | For proper operation, `patch' typically needs at least two lines of |
---|
| 246 | context. |
---|
| 247 | |
---|
| 248 | `--changed-group-format=FORMAT' |
---|
| 249 | Use FORMAT to output a line group containing differing lines from |
---|
| 250 | both files in if-then-else format. *Note Line Group Formats::. |
---|
| 251 | |
---|
| 252 | `-d' |
---|
| 253 | Change the algorithm perhaps find a smaller set of changes. This |
---|
| 254 | makes `diff' slower (sometimes much slower). *Note diff |
---|
| 255 | Performance::. |
---|
| 256 | |
---|
| 257 | `-D NAME' |
---|
| 258 | Make merged `#ifdef' format output, conditional on the preprocessor |
---|
| 259 | macro NAME. *Note If-then-else::. |
---|
| 260 | |
---|
| 261 | `-e' |
---|
| 262 | `--ed' |
---|
| 263 | Make output that is a valid `ed' script. *Note ed Scripts::. |
---|
| 264 | |
---|
| 265 | `--exclude=PATTERN' |
---|
| 266 | When comparing directories, ignore files and subdirectories whose |
---|
| 267 | basenames match PATTERN. *Note Comparing Directories::. |
---|
| 268 | |
---|
| 269 | `--exclude-from=FILE' |
---|
| 270 | When comparing directories, ignore files and subdirectories whose |
---|
| 271 | basenames match any pattern contained in FILE. *Note Comparing |
---|
| 272 | Directories::. |
---|
| 273 | |
---|
| 274 | `--expand-tabs' |
---|
| 275 | Expand tabs to spaces in the output, to preserve the alignment of |
---|
| 276 | tabs in the input files. *Note Tabs::. |
---|
| 277 | |
---|
| 278 | `-f' |
---|
| 279 | Make output that looks vaguely like an `ed' script but has changes |
---|
| 280 | in the order they appear in the file. *Note Forward ed::. |
---|
| 281 | |
---|
| 282 | `-F REGEXP' |
---|
| 283 | In context and unified format, for each hunk of differences, show |
---|
| 284 | some of the last preceding line that matches REGEXP. *Note |
---|
| 285 | Specified Headings::. |
---|
| 286 | |
---|
| 287 | `--forward-ed' |
---|
| 288 | Make output that looks vaguely like an `ed' script but has changes |
---|
| 289 | in the order they appear in the file. *Note Forward ed::. |
---|
| 290 | |
---|
| 291 | `-h' |
---|
| 292 | This option currently has no effect; it is present for Unix |
---|
| 293 | compatibility. |
---|
| 294 | |
---|
| 295 | `-H' |
---|
| 296 | Use heuristics to speed handling of large files that have numerous |
---|
| 297 | scattered small changes. *Note diff Performance::. |
---|
| 298 | |
---|
| 299 | `--horizon-lines=LINES' |
---|
| 300 | Do not discard the last LINES lines of the common prefix and the |
---|
| 301 | first LINES lines of the common suffix. *Note diff Performance::. |
---|
| 302 | |
---|
| 303 | `-i' |
---|
| 304 | Ignore changes in case; consider upper- and lower-case letters |
---|
| 305 | equivalent. *Note Case Folding::. |
---|
| 306 | |
---|
| 307 | `-I REGEXP' |
---|
| 308 | Ignore changes that just insert or delete lines that match REGEXP. |
---|
| 309 | *Note Specified Folding::. |
---|
| 310 | |
---|
| 311 | `--ifdef=NAME' |
---|
| 312 | Make merged if-then-else output using NAME. *Note If-then-else::. |
---|
| 313 | |
---|
| 314 | `--ignore-all-space' |
---|
| 315 | Ignore white space when comparing lines. *Note White Space::. |
---|
| 316 | |
---|
| 317 | `--ignore-blank-lines' |
---|
| 318 | Ignore changes that just insert or delete blank lines. *Note |
---|
| 319 | Blank Lines::. |
---|
| 320 | |
---|
| 321 | `--ignore-case' |
---|
| 322 | Ignore changes in case; consider upper- and lower-case to be the |
---|
| 323 | same. *Note Case Folding::. |
---|
| 324 | |
---|
| 325 | `--ignore-matching-lines=REGEXP' |
---|
| 326 | Ignore changes that just insert or delete lines that match REGEXP. |
---|
| 327 | *Note Specified Folding::. |
---|
| 328 | |
---|
| 329 | `--ignore-space-change' |
---|
| 330 | Ignore changes in amount of white space. *Note White Space::. |
---|
| 331 | |
---|
| 332 | `--initial-tab' |
---|
| 333 | Output a tab rather than a space before the text of a line in |
---|
| 334 | normal or context format. This causes the alignment of tabs in |
---|
| 335 | the line to look normal. *Note Tabs::. |
---|
| 336 | |
---|
| 337 | `-l' |
---|
| 338 | Pass the output through `pr' to paginate it. *Note Pagination::. |
---|
| 339 | |
---|
| 340 | `-L LABEL' |
---|
| 341 | Use LABEL instead of the file name in the context format (*note |
---|
| 342 | Context Format::.) and unified format (*note Unified Format::.) |
---|
| 343 | headers. *Note RCS::. |
---|
| 344 | |
---|
| 345 | `--label=LABEL' |
---|
| 346 | Use LABEL instead of the file name in the context format (*note |
---|
| 347 | Context Format::.) and unified format (*note Unified Format::.) |
---|
| 348 | headers. |
---|
| 349 | |
---|
| 350 | `--left-column' |
---|
| 351 | Print only the left column of two common lines in side by side |
---|
| 352 | format. *Note Side by Side Format::. |
---|
| 353 | |
---|
| 354 | `--line-format=FORMAT' |
---|
| 355 | Use FORMAT to output all input lines in if-then-else format. |
---|
| 356 | *Note Line Formats::. |
---|
| 357 | |
---|
| 358 | `--minimal' |
---|
| 359 | Change the algorithm to perhaps find a smaller set of changes. |
---|
| 360 | This makes `diff' slower (sometimes much slower). *Note diff |
---|
| 361 | Performance::. |
---|
| 362 | |
---|
| 363 | `-n' |
---|
| 364 | Output RCS-format diffs; like `-f' except that each command |
---|
| 365 | specifies the number of lines affected. *Note RCS::. |
---|
| 366 | |
---|
| 367 | `-N' |
---|
| 368 | `--new-file' |
---|
| 369 | In directory comparison, if a file is found in only one directory, |
---|
| 370 | treat it as present but empty in the other directory. *Note |
---|
| 371 | Comparing Directories::. |
---|
| 372 | |
---|
| 373 | `--new-group-format=FORMAT' |
---|
| 374 | Use FORMAT to output a group of lines taken from just the second |
---|
| 375 | file in if-then-else format. *Note Line Group Formats::. |
---|
| 376 | |
---|
| 377 | `--new-line-format=FORMAT' |
---|
| 378 | Use FORMAT to output a line taken from just the second file in |
---|
| 379 | if-then-else format. *Note Line Formats::. |
---|
| 380 | |
---|
| 381 | `--old-group-format=FORMAT' |
---|
| 382 | Use FORMAT to output a group of lines taken from just the first |
---|
| 383 | file in if-then-else format. *Note Line Group Formats::. |
---|
| 384 | |
---|
| 385 | `--old-line-format=FORMAT' |
---|
| 386 | Use FORMAT to output a line taken from just the first file in |
---|
| 387 | if-then-else format. *Note Line Formats::. |
---|
| 388 | |
---|
| 389 | `-p' |
---|
| 390 | Show which C function each change is in. *Note C Function |
---|
| 391 | Headings::. |
---|
| 392 | |
---|
| 393 | `-P' |
---|
| 394 | When comparing directories, if a file appears only in the second |
---|
| 395 | directory of the two, treat it as present but empty in the other. |
---|
| 396 | *Note Comparing Directories::. |
---|
| 397 | |
---|
| 398 | `--paginate' |
---|
| 399 | Pass the output through `pr' to paginate it. *Note Pagination::. |
---|
| 400 | |
---|
| 401 | `-q' |
---|
| 402 | Report only whether the files differ, not the details of the |
---|
| 403 | differences. *Note Brief::. |
---|
| 404 | |
---|
| 405 | `-r' |
---|
| 406 | When comparing directories, recursively compare any subdirectories |
---|
| 407 | found. *Note Comparing Directories::. |
---|
| 408 | |
---|
| 409 | `--rcs' |
---|
| 410 | Output RCS-format diffs; like `-f' except that each command |
---|
| 411 | specifies the number of lines affected. *Note RCS::. |
---|
| 412 | |
---|
| 413 | `--recursive' |
---|
| 414 | When comparing directories, recursively compare any subdirectories |
---|
| 415 | found. *Note Comparing Directories::. |
---|
| 416 | |
---|
| 417 | `--report-identical-files' |
---|
| 418 | Report when two files are the same. *Note Comparing Directories::. |
---|
| 419 | |
---|
| 420 | `-s' |
---|
| 421 | Report when two files are the same. *Note Comparing Directories::. |
---|
| 422 | |
---|
| 423 | `-S FILE' |
---|
| 424 | When comparing directories, start with the file FILE. This is |
---|
| 425 | used for resuming an aborted comparison. *Note Comparing |
---|
| 426 | Directories::. |
---|
| 427 | |
---|
| 428 | `--sdiff-merge-assist' |
---|
| 429 | Print extra information to help `sdiff'. `sdiff' uses this option |
---|
| 430 | when it runs `diff'. This option is not intended for users to use |
---|
| 431 | directly. |
---|
| 432 | |
---|
| 433 | `--show-c-function' |
---|
| 434 | Show which C function each change is in. *Note C Function |
---|
| 435 | Headings::. |
---|
| 436 | |
---|
| 437 | `--show-function-line=REGEXP' |
---|
| 438 | In context and unified format, for each hunk of differences, show |
---|
| 439 | some of the last preceding line that matches REGEXP. *Note |
---|
| 440 | Specified Headings::. |
---|
| 441 | |
---|
| 442 | `--side-by-side' |
---|
| 443 | Use the side by side output format. *Note Side by Side Format::. |
---|
| 444 | |
---|
| 445 | `--speed-large-files' |
---|
| 446 | Use heuristics to speed handling of large files that have numerous |
---|
| 447 | scattered small changes. *Note diff Performance::. |
---|
| 448 | |
---|
| 449 | `--starting-file=FILE' |
---|
| 450 | When comparing directories, start with the file FILE. This is |
---|
| 451 | used for resuming an aborted comparison. *Note Comparing |
---|
| 452 | Directories::. |
---|
| 453 | |
---|
| 454 | `--suppress-common-lines' |
---|
| 455 | Do not print common lines in side by side format. *Note Side by |
---|
| 456 | Side Format::. |
---|
| 457 | |
---|
| 458 | `-t' |
---|
| 459 | Expand tabs to spaces in the output, to preserve the alignment of |
---|
| 460 | tabs in the input files. *Note Tabs::. |
---|
| 461 | |
---|
| 462 | `-T' |
---|
| 463 | Output a tab rather than a space before the text of a line in |
---|
| 464 | normal or context format. This causes the alignment of tabs in |
---|
| 465 | the line to look normal. *Note Tabs::. |
---|
| 466 | |
---|
| 467 | `--text' |
---|
| 468 | Treat all files as text and compare them line-by-line, even if they |
---|
| 469 | do not appear to be text. *Note Binary::. |
---|
| 470 | |
---|
| 471 | `-u' |
---|
| 472 | Use the unified output format. *Note Unified Format::. |
---|
| 473 | |
---|
| 474 | `--unchanged-group-format=FORMAT' |
---|
| 475 | Use FORMAT to output a group of common lines taken from both files |
---|
| 476 | in if-then-else format. *Note Line Group Formats::. |
---|
| 477 | |
---|
| 478 | `--unchanged-line-format=FORMAT' |
---|
| 479 | Use FORMAT to output a line common to both files in if-then-else |
---|
| 480 | format. *Note Line Formats::. |
---|
| 481 | |
---|
| 482 | `--unidirectional-new-file' |
---|
| 483 | When comparing directories, if a file appears only in the second |
---|
| 484 | directory of the two, treat it as present but empty in the other. |
---|
| 485 | *Note Comparing Directories::. |
---|
| 486 | |
---|
| 487 | `-U LINES' |
---|
| 488 | `--unified[=LINES]' |
---|
| 489 | Use the unified output format, showing LINES (an integer) lines of |
---|
| 490 | context, or three if LINES is not given. *Note Unified Format::. |
---|
| 491 | For proper operation, `patch' typically needs at least two lines of |
---|
| 492 | context. |
---|
| 493 | |
---|
| 494 | `-v' |
---|
| 495 | `--version' |
---|
| 496 | Output the version number of `diff'. |
---|
| 497 | |
---|
| 498 | `-w' |
---|
| 499 | Ignore white space when comparing lines. *Note White Space::. |
---|
| 500 | |
---|
| 501 | `-W COLUMNS' |
---|
| 502 | `--width=COLUMNS' |
---|
| 503 | Use an output width of COLUMNS in side by side format. *Note Side |
---|
| 504 | by Side Format::. |
---|
| 505 | |
---|
| 506 | `-x PATTERN' |
---|
| 507 | When comparing directories, ignore files and subdirectories whose |
---|
| 508 | basenames match PATTERN. *Note Comparing Directories::. |
---|
| 509 | |
---|
| 510 | `-X FILE' |
---|
| 511 | When comparing directories, ignore files and subdirectories whose |
---|
| 512 | basenames match any pattern contained in FILE. *Note Comparing |
---|
| 513 | Directories::. |
---|
| 514 | |
---|
| 515 | `-y' |
---|
| 516 | Use the side by side output format. *Note Side by Side Format::. |
---|
| 517 | |
---|
| 518 | |
---|
| 519 | File: diff.info, Node: Invoking diff3, Next: Invoking patch, Prev: Invoking diff, Up: Top |
---|
| 520 | |
---|
| 521 | Invoking `diff3' |
---|
| 522 | **************** |
---|
| 523 | |
---|
| 524 | The `diff3' command compares three files and outputs descriptions of |
---|
| 525 | their differences. Its arguments are as follows: |
---|
| 526 | |
---|
| 527 | diff3 OPTIONS... MINE OLDER YOURS |
---|
| 528 | |
---|
| 529 | The files to compare are MINE, OLDER, and YOURS. At most one of |
---|
| 530 | these three file names may be `-', which tells `diff3' to read the |
---|
| 531 | standard input for that file. |
---|
| 532 | |
---|
| 533 | An exit status of 0 means `diff3' was successful, 1 means some |
---|
| 534 | conflicts were found, and 2 means trouble. |
---|
| 535 | |
---|
| 536 | * Menu: |
---|
| 537 | |
---|
| 538 | * diff3 Options:: Summary of options to `diff3'. |
---|
| 539 | |
---|
| 540 | |
---|
| 541 | File: diff.info, Node: diff3 Options, Up: Invoking diff3 |
---|
| 542 | |
---|
| 543 | Options to `diff3' |
---|
| 544 | ================== |
---|
| 545 | |
---|
| 546 | Below is a summary of all of the options that GNU `diff3' accepts. |
---|
| 547 | Multiple single letter options (unless they take an argument) can be |
---|
| 548 | combined into a single command line argument. |
---|
| 549 | |
---|
| 550 | `-a' |
---|
| 551 | Treat all files as text and compare them line-by-line, even if they |
---|
| 552 | do not appear to be text. *Note Binary::. |
---|
| 553 | |
---|
| 554 | `-A' |
---|
| 555 | Incorporate all changes from OLDER to YOURS into MINE, surrounding |
---|
| 556 | all conflicts with bracket lines. *Note Marking Conflicts::. |
---|
| 557 | |
---|
| 558 | `-e' |
---|
| 559 | Generate an `ed' script that incorporates all the changes from |
---|
| 560 | OLDER to YOURS into MINE. *Note Which Changes::. |
---|
| 561 | |
---|
| 562 | `-E' |
---|
| 563 | Like `-e', except bracket lines from overlapping changes' first |
---|
| 564 | and third files. *Note Marking Conflicts::. With `-e', an |
---|
| 565 | overlapping change looks like this: |
---|
| 566 | |
---|
| 567 | <<<<<<< MINE |
---|
| 568 | lines from MINE |
---|
| 569 | ======= |
---|
| 570 | lines from YOURS |
---|
| 571 | >>>>>>> YOURS |
---|
| 572 | |
---|
| 573 | `--ed' |
---|
| 574 | Generate an `ed' script that incorporates all the changes from |
---|
| 575 | OLDER to YOURS into MINE. *Note Which Changes::. |
---|
| 576 | |
---|
| 577 | `--easy-only' |
---|
| 578 | Like `-e', except output only the nonoverlapping changes. *Note |
---|
| 579 | Which Changes::. |
---|
| 580 | |
---|
| 581 | `-i' |
---|
| 582 | Generate `w' and `q' commands at the end of the `ed' script for |
---|
| 583 | System V compatibility. This option must be combined with one of |
---|
| 584 | the `-AeExX3' options, and may not be combined with `-m'. *Note |
---|
| 585 | Saving the Changed File::. |
---|
| 586 | |
---|
| 587 | `--initial-tab' |
---|
| 588 | Output a tab rather than two spaces before the text of a line in |
---|
| 589 | normal format. This causes the alignment of tabs in the line to |
---|
| 590 | look normal. *Note Tabs::. |
---|
| 591 | |
---|
| 592 | `-L LABEL' |
---|
| 593 | `--label=LABEL' |
---|
| 594 | Use the label LABEL for the brackets output by the `-A', `-E' and |
---|
| 595 | `-X' options. This option may be given up to three times, one for |
---|
| 596 | each input file. The default labels are the names of the input |
---|
| 597 | files. Thus `diff3 -L X -L Y -L Z -m A B C' acts like `diff3 -m A |
---|
| 598 | B C', except that the output looks like it came from files named |
---|
| 599 | `X', `Y' and `Z' rather than from files named `A', `B' and `C'. |
---|
| 600 | *Note Marking Conflicts::. |
---|
| 601 | |
---|
| 602 | `-m' |
---|
| 603 | `--merge' |
---|
| 604 | Apply the edit script to the first file and send the result to |
---|
| 605 | standard output. Unlike piping the output from `diff3' to `ed', |
---|
| 606 | this works even for binary files and incomplete lines. `-A' is |
---|
| 607 | assumed if no edit script option is specified. *Note Bypassing |
---|
| 608 | ed::. |
---|
| 609 | |
---|
| 610 | `--overlap-only' |
---|
| 611 | Like `-e', except output only the overlapping changes. *Note |
---|
| 612 | Which Changes::. |
---|
| 613 | |
---|
| 614 | `--show-all' |
---|
| 615 | Incorporate all unmerged changes from OLDER to YOURS into MINE, |
---|
| 616 | surrounding all overlapping changes with bracket lines. *Note |
---|
| 617 | Marking Conflicts::. |
---|
| 618 | |
---|
| 619 | `--show-overlap' |
---|
| 620 | Like `-e', except bracket lines from overlapping changes' first |
---|
| 621 | and third files. *Note Marking Conflicts::. |
---|
| 622 | |
---|
| 623 | `-T' |
---|
| 624 | Output a tab rather than two spaces before the text of a line in |
---|
| 625 | normal format. This causes the alignment of tabs in the line to |
---|
| 626 | look normal. *Note Tabs::. |
---|
| 627 | |
---|
| 628 | `--text' |
---|
| 629 | Treat all files as text and compare them line-by-line, even if they |
---|
| 630 | do not appear to be text. *Note Binary::. |
---|
| 631 | |
---|
| 632 | `-v' |
---|
| 633 | `--version' |
---|
| 634 | Output the version number of `diff3'. |
---|
| 635 | |
---|
| 636 | `-x' |
---|
| 637 | Like `-e', except output only the overlapping changes. *Note |
---|
| 638 | Which Changes::. |
---|
| 639 | |
---|
| 640 | `-X' |
---|
| 641 | Like `-E', except output only the overlapping changes. In other |
---|
| 642 | words, like `-x', except bracket changes as in `-E'. *Note |
---|
| 643 | Marking Conflicts::. |
---|
| 644 | |
---|
| 645 | `-3' |
---|
| 646 | Like `-e', except output only the nonoverlapping changes. *Note |
---|
| 647 | Which Changes::. |
---|
| 648 | |
---|
| 649 | |
---|
| 650 | File: diff.info, Node: Invoking patch, Next: Invoking sdiff, Prev: Invoking diff3, Up: Top |
---|
| 651 | |
---|
| 652 | Invoking `patch' |
---|
| 653 | **************** |
---|
| 654 | |
---|
| 655 | Normally `patch' is invoked like this: |
---|
| 656 | |
---|
| 657 | patch <PATCHFILE |
---|
| 658 | |
---|
| 659 | The full format for invoking `patch' is: |
---|
| 660 | |
---|
| 661 | patch OPTIONS... [ORIGFILE [PATCHFILE]] [+ OPTIONS... [ORIGFILE]]... |
---|
| 662 | |
---|
| 663 | If you do not specify PATCHFILE, or if PATCHFILE is `-', `patch' |
---|
| 664 | reads the patch (that is, the `diff' output) from the standard input. |
---|
| 665 | |
---|
| 666 | You can specify one or more of the original files as ORIG arguments; |
---|
| 667 | each one and options for interpreting it is separated from the others |
---|
| 668 | with a `+'. *Note Multiple Patches::, for more information. |
---|
| 669 | |
---|
| 670 | If you do not specify an input file on the command line, `patch' |
---|
| 671 | tries to figure out from the "leading text" (any text in the patch that |
---|
| 672 | comes before the `diff' output) which file to edit. In the header of a |
---|
| 673 | context or unified diff, `patch' looks in lines beginning with `***', |
---|
| 674 | `---', or `+++'; among those, it chooses the shortest name of an |
---|
| 675 | existing file. Otherwise, if there is an `Index:' line in the leading |
---|
| 676 | text, `patch' tries to use the file name from that line. If `patch' |
---|
| 677 | cannot figure out the name of an existing file from the leading text, |
---|
| 678 | it prompts you for the name of the file to patch. |
---|
| 679 | |
---|
| 680 | If the input file does not exist or is read-only, and a suitable RCS |
---|
| 681 | or SCCS file exists, `patch' attempts to check out or get the file |
---|
| 682 | before proceeding. |
---|
| 683 | |
---|
| 684 | By default, `patch' replaces the original input file with the |
---|
| 685 | patched version, after renaming the original file into a backup file |
---|
| 686 | (*note Backups::., for a description of how `patch' names backup |
---|
| 687 | files). You can also specify where to put the output with the `-o |
---|
| 688 | OUTPUT-FILE' or `--output=OUTPUT-FILE' option. |
---|
| 689 | |
---|
| 690 | * Menu: |
---|
| 691 | |
---|
| 692 | * patch Directories:: Changing directory and stripping directories. |
---|
| 693 | * Backups:: Backup file names. |
---|
| 694 | * Rejects:: Reject file names. |
---|
| 695 | * patch Options:: Summary table of options to `patch'. |
---|
| 696 | |
---|
| 697 | |
---|
| 698 | File: diff.info, Node: patch Directories, Next: Backups, Up: Invoking patch |
---|
| 699 | |
---|
| 700 | Applying Patches in Other Directories |
---|
| 701 | ===================================== |
---|
| 702 | |
---|
| 703 | The `-d DIRECTORY' or `--directory=DIRECTORY' option to `patch' |
---|
| 704 | makes directory DIRECTORY the current directory for interpreting both |
---|
| 705 | file names in the patch file, and file names given as arguments to |
---|
| 706 | other options (such as `-B' and `-o'). For example, while in a news |
---|
| 707 | reading program, you can patch a file in the `/usr/src/emacs' directory |
---|
| 708 | directly from the article containing the patch like this: |
---|
| 709 | |
---|
| 710 | | patch -d /usr/src/emacs |
---|
| 711 | |
---|
| 712 | Sometimes the file names given in a patch contain leading |
---|
| 713 | directories, but you keep your files in a directory different from the |
---|
| 714 | one given in the patch. In those cases, you can use the `-p[NUMBER]' |
---|
| 715 | or `--strip[=NUMBER]' option to set the file name strip count to |
---|
| 716 | NUMBER. The strip count tells `patch' how many slashes, along with the |
---|
| 717 | directory names between them, to strip from the front of file names. |
---|
| 718 | `-p' with no NUMBER given is equivalent to `-p0'. By default, `patch' |
---|
| 719 | strips off all leading directories, leaving just the base file names, |
---|
| 720 | except that when a file name given in the patch is a relative file name |
---|
| 721 | and all of its leading directories already exist, `patch' does not |
---|
| 722 | strip off the leading directory. (A "relative" file name is one that |
---|
| 723 | does not start with a slash.) |
---|
| 724 | |
---|
| 725 | `patch' looks for each file (after any slashes have been stripped) |
---|
| 726 | in the current directory, or if you used the `-d DIRECTORY' option, in |
---|
| 727 | that directory. |
---|
| 728 | |
---|
| 729 | For example, suppose the file name in the patch file is |
---|
| 730 | `/gnu/src/emacs/etc/NEWS'. Using `-p' or `-p0' gives the entire file |
---|
| 731 | name unmodified, `-p1' gives `gnu/src/emacs/etc/NEWS' (no leading |
---|
| 732 | slash), `-p4' gives `etc/NEWS', and not specifying `-p' at all gives |
---|
| 733 | `NEWS'. |
---|
| 734 | |
---|
| 735 | |
---|
| 736 | File: diff.info, Node: Backups, Next: Rejects, Prev: patch Directories, Up: Invoking patch |
---|
| 737 | |
---|
| 738 | Backup File Names |
---|
| 739 | ================= |
---|
| 740 | |
---|
| 741 | Normally, `patch' renames an original input file into a backup file |
---|
| 742 | by appending to its name the extension `.orig', or `~' on systems that |
---|
| 743 | do not support long file names. The `-b BACKUP-SUFFIX' or |
---|
| 744 | `--suffix=BACKUP-SUFFIX' option uses BACKUP-SUFFIX as the backup |
---|
| 745 | extension instead. |
---|
| 746 | |
---|
| 747 | Alternately, you can specify the extension for backup files with the |
---|
| 748 | `SIMPLE_BACKUP_SUFFIX' environment variable, which the options override. |
---|
| 749 | |
---|
| 750 | `patch' can also create numbered backup files the way GNU Emacs |
---|
| 751 | does. With this method, instead of having a single backup of each file, |
---|
| 752 | `patch' makes a new backup file name each time it patches a file. For |
---|
| 753 | example, the backups of a file named `sink' would be called, |
---|
| 754 | successively, `sink.~1~', `sink.~2~', `sink.~3~', etc. |
---|
| 755 | |
---|
| 756 | The `-V BACKUP-STYLE' or `--version-control=BACKUP-STYLE' option |
---|
| 757 | takes as an argument a method for creating backup file names. You can |
---|
| 758 | alternately control the type of backups that `patch' makes with the |
---|
| 759 | `VERSION_CONTROL' environment variable, which the `-V' option |
---|
| 760 | overrides. The value of the `VERSION_CONTROL' environment variable and |
---|
| 761 | the argument to the `-V' option are like the GNU Emacs |
---|
| 762 | `version-control' variable (*note emacs: Backups., for more information |
---|
| 763 | on backup versions in Emacs). They also recognize synonyms that are |
---|
| 764 | more descriptive. The valid values are listed below; unique |
---|
| 765 | abbreviations are acceptable. |
---|
| 766 | |
---|
| 767 | `t' |
---|
| 768 | `numbered' |
---|
| 769 | Always make numbered backups. |
---|
| 770 | |
---|
| 771 | `nil' |
---|
| 772 | `existing' |
---|
| 773 | Make numbered backups of files that already have them, simple |
---|
| 774 | backups of the others. This is the default. |
---|
| 775 | |
---|
| 776 | `never' |
---|
| 777 | `simple' |
---|
| 778 | Always make simple backups. |
---|
| 779 | |
---|
| 780 | Alternately, you can tell `patch' to prepend a prefix, such as a |
---|
| 781 | directory name, to produce backup file names. The `-B BACKUP-PREFIX' |
---|
| 782 | or `--prefix=BACKUP-PREFIX' option makes backup files by prepending |
---|
| 783 | BACKUP-PREFIX to them. If you use this option, `patch' ignores any |
---|
| 784 | `-b' option that you give. |
---|
| 785 | |
---|
| 786 | If the backup file already exists, `patch' creates a new backup file |
---|
| 787 | name by changing the first lowercase letter in the last component of |
---|
| 788 | the file name into uppercase. If there are no more lowercase letters |
---|
| 789 | in the name, it removes the first character from the name. It repeats |
---|
| 790 | this process until it comes up with a backup file name that does not |
---|
| 791 | already exist. |
---|
| 792 | |
---|
| 793 | If you specify the output file with the `-o' option, that file is |
---|
| 794 | the one that is backed up, not the input file. |
---|
| 795 | |
---|
| 796 | |
---|
| 797 | File: diff.info, Node: Rejects, Next: patch Options, Prev: Backups, Up: Invoking patch |
---|
| 798 | |
---|
| 799 | Reject File Names |
---|
| 800 | ================= |
---|
| 801 | |
---|
| 802 | The names for reject files (files containing patches that `patch' |
---|
| 803 | could not find a place to apply) are normally the name of the output |
---|
| 804 | file with `.rej' appended (or `#' on systems that do not support long |
---|
| 805 | file names). |
---|
| 806 | |
---|
| 807 | Alternatively, you can tell `patch' to place all of the rejected |
---|
| 808 | patches in a single file. The `-r REJECT-FILE' or |
---|
| 809 | `--reject-file=REJECT-FILE' option uses REJECT-FILE as the reject file |
---|
| 810 | name. |
---|
| 811 | |
---|
| 812 | |
---|
| 813 | File: diff.info, Node: patch Options, Prev: Rejects, Up: Invoking patch |
---|
| 814 | |
---|
| 815 | Options to `patch' |
---|
| 816 | ================== |
---|
| 817 | |
---|
| 818 | Here is a summary of all of the options that `patch' accepts. Older |
---|
| 819 | versions of `patch' do not accept long-named options or the `-t', `-E', |
---|
| 820 | or `-V' options. |
---|
| 821 | |
---|
| 822 | Multiple single-letter options that do not take an argument can be |
---|
| 823 | combined into a single command line argument (with only one dash). |
---|
| 824 | Brackets ([ and ]) indicate that an option takes an optional argument. |
---|
| 825 | |
---|
| 826 | `-b BACKUP-SUFFIX' |
---|
| 827 | Use BACKUP-SUFFIX as the backup extension instead of `.orig' or |
---|
| 828 | `~'. *Note Backups::. |
---|
| 829 | |
---|
| 830 | `-B BACKUP-PREFIX' |
---|
| 831 | Use BACKUP-PREFIX as a prefix to the backup file name. If this |
---|
| 832 | option is specified, any `-b' option is ignored. *Note Backups::. |
---|
| 833 | |
---|
| 834 | `--batch' |
---|
| 835 | Do not ask any questions. *Note patch Messages::. |
---|
| 836 | |
---|
| 837 | `-c' |
---|
| 838 | `--context' |
---|
| 839 | Interpret the patch file as a context diff. *Note patch Input::. |
---|
| 840 | |
---|
| 841 | `-d DIRECTORY' |
---|
| 842 | `--directory=DIRECTORY' |
---|
| 843 | Makes directory DIRECTORY the current directory for interpreting |
---|
| 844 | both file names in the patch file, and file names given as |
---|
| 845 | arguments to other options. *Note patch Directories::. |
---|
| 846 | |
---|
| 847 | `-D NAME' |
---|
| 848 | Make merged if-then-else output using FORMAT. *Note |
---|
| 849 | If-then-else::. |
---|
| 850 | |
---|
| 851 | `--debug=NUMBER' |
---|
| 852 | Set internal debugging flags. Of interest only to `patch' |
---|
| 853 | patchers. |
---|
| 854 | |
---|
| 855 | `-e' |
---|
| 856 | `--ed' |
---|
| 857 | Interpret the patch file as an `ed' script. *Note patch Input::. |
---|
| 858 | |
---|
| 859 | `-E' |
---|
| 860 | Remove output files that are empty after the patches have been |
---|
| 861 | applied. *Note Empty Files::. |
---|
| 862 | |
---|
| 863 | `-f' |
---|
| 864 | Assume that the user knows exactly what he or she is doing, and do |
---|
| 865 | not ask any questions. *Note patch Messages::. |
---|
| 866 | |
---|
| 867 | `-F LINES' |
---|
| 868 | Set the maximum fuzz factor to LINES. *Note Inexact::. |
---|
| 869 | |
---|
| 870 | `--force' |
---|
| 871 | Assume that the user knows exactly what he or she is doing, and do |
---|
| 872 | not ask any questions. *Note patch Messages::. |
---|
| 873 | |
---|
| 874 | `--forward' |
---|
| 875 | Ignore patches that `patch' thinks are reversed or already applied. |
---|
| 876 | See also `-R'. *Note Reversed Patches::. |
---|
| 877 | |
---|
| 878 | `--fuzz=LINES' |
---|
| 879 | Set the maximum fuzz factor to LINES. *Note Inexact::. |
---|
| 880 | |
---|
| 881 | `--help' |
---|
| 882 | Print a summary of the options that `patch' recognizes, then exit. |
---|
| 883 | |
---|
| 884 | `--ifdef=NAME' |
---|
| 885 | Make merged if-then-else output using FORMAT. *Note |
---|
| 886 | If-then-else::. |
---|
| 887 | |
---|
| 888 | `--ignore-white-space' |
---|
| 889 | `-l' |
---|
| 890 | Let any sequence of white space in the patch file match any |
---|
| 891 | sequence of white space in the input file. *Note Changed White |
---|
| 892 | Space::. |
---|
| 893 | |
---|
| 894 | `-n' |
---|
| 895 | `--normal' |
---|
| 896 | Interpret the patch file as a normal diff. *Note patch Input::. |
---|
| 897 | |
---|
| 898 | `-N' |
---|
| 899 | Ignore patches that `patch' thinks are reversed or already applied. |
---|
| 900 | See also `-R'. *Note Reversed Patches::. |
---|
| 901 | |
---|
| 902 | `-o OUTPUT-FILE' |
---|
| 903 | `--output=OUTPUT-FILE' |
---|
| 904 | Use OUTPUT-FILE as the output file name. *Note patch Options::. |
---|
| 905 | |
---|
| 906 | `-p[NUMBER]' |
---|
| 907 | Set the file name strip count to NUMBER. *Note patch |
---|
| 908 | Directories::. |
---|
| 909 | |
---|
| 910 | `--prefix=BACKUP-PREFIX' |
---|
| 911 | Use BACKUP-PREFIX as a prefix to the backup file name. If this |
---|
| 912 | option is specified, any `-b' option is ignored. *Note Backups::. |
---|
| 913 | |
---|
| 914 | `--quiet' |
---|
| 915 | Work silently unless an error occurs. *Note patch Messages::. |
---|
| 916 | |
---|
| 917 | `-r REJECT-FILE' |
---|
| 918 | Use REJECT-FILE as the reject file name. *Note Rejects::. |
---|
| 919 | |
---|
| 920 | `-R' |
---|
| 921 | Assume that this patch was created with the old and new files |
---|
| 922 | swapped. *Note Reversed Patches::. |
---|
| 923 | |
---|
| 924 | `--reject-file=REJECT-FILE' |
---|
| 925 | Use REJECT-FILE as the reject file name. *Note Rejects::. |
---|
| 926 | |
---|
| 927 | `--remove-empty-files' |
---|
| 928 | Remove output files that are empty after the patches have been |
---|
| 929 | applied. *Note Empty Files::. |
---|
| 930 | |
---|
| 931 | `--reverse' |
---|
| 932 | Assume that this patch was created with the old and new files |
---|
| 933 | swapped. *Note Reversed Patches::. |
---|
| 934 | |
---|
| 935 | `-s' |
---|
| 936 | Work silently unless an error occurs. *Note patch Messages::. |
---|
| 937 | |
---|
| 938 | `-S' |
---|
| 939 | Ignore this patch from the patch file, but continue looking for |
---|
| 940 | the next patch in the file. *Note Multiple Patches::. |
---|
| 941 | |
---|
| 942 | `--silent' |
---|
| 943 | Work silently unless an error occurs. *Note patch Messages::. |
---|
| 944 | |
---|
| 945 | `--skip' |
---|
| 946 | Ignore this patch from the patch file, but continue looking for |
---|
| 947 | the next patch in the file. *Note Multiple Patches::. |
---|
| 948 | |
---|
| 949 | `--strip[=NUMBER]' |
---|
| 950 | Set the file name strip count to NUMBER. *Note patch |
---|
| 951 | Directories::. |
---|
| 952 | |
---|
| 953 | `--suffix=BACKUP-SUFFIX' |
---|
| 954 | Use BACKUP-SUFFIX as the backup extension instead of `.orig' or |
---|
| 955 | `~'. *Note Backups::. |
---|
| 956 | |
---|
| 957 | `-t' |
---|
| 958 | Do not ask any questions. *Note patch Messages::. |
---|
| 959 | |
---|
| 960 | `-u' |
---|
| 961 | `--unified' |
---|
| 962 | Interpret the patch file as a unified diff. *Note patch Input::. |
---|
| 963 | |
---|
| 964 | `-v' |
---|
| 965 | Output the revision header and patch level of `patch'. |
---|
| 966 | |
---|
| 967 | `-V BACKUP-STYLE' |
---|
| 968 | Select the kind of backups to make. *Note Backups::. |
---|
| 969 | |
---|
| 970 | `--version' |
---|
| 971 | Output the revision header and patch level of `patch', then exit. |
---|
| 972 | |
---|
| 973 | `--version=control=BACKUP-STYLE' |
---|
| 974 | Select the kind of backups to make. *Note Backups::. |
---|
| 975 | |
---|
| 976 | `-x NUMBER' |
---|
| 977 | Set internal debugging flags. Of interest only to `patch' |
---|
| 978 | patchers. |
---|
| 979 | |
---|
| 980 | |
---|
| 981 | File: diff.info, Node: Invoking sdiff, Next: Incomplete Lines, Prev: Invoking patch, Up: Top |
---|
| 982 | |
---|
| 983 | Invoking `sdiff' |
---|
| 984 | **************** |
---|
| 985 | |
---|
| 986 | The `sdiff' command merges two files and interactively outputs the |
---|
| 987 | results. Its arguments are as follows: |
---|
| 988 | |
---|
| 989 | sdiff -o OUTFILE OPTIONS... FROM-FILE TO-FILE |
---|
| 990 | |
---|
| 991 | This merges FROM-FILE with TO-FILE, with output to OUTFILE. If |
---|
| 992 | FROM-FILE is a directory and TO-FILE is not, `sdiff' compares the file |
---|
| 993 | in FROM-FILE whose file name is that of TO-FILE, and vice versa. |
---|
| 994 | fROM-FILE and TO-FILE may not both be directories. |
---|
| 995 | |
---|
| 996 | `sdiff' options begin with `-', so normally FROM-FILE and TO-FILE |
---|
| 997 | may not begin with `-'. However, `--' as an argument by itself treats |
---|
| 998 | the remaining arguments as file names even if they begin with `-'. You |
---|
| 999 | may not use `-' as an input file. |
---|
| 1000 | |
---|
| 1001 | An exit status of 0 means no differences were found, 1 means some |
---|
| 1002 | differences were found, and 2 means trouble. |
---|
| 1003 | |
---|
| 1004 | `sdiff' without `-o' (or `--output') produces a side-by-side |
---|
| 1005 | difference. This usage is obsolete; use `diff --side-by-side' instead. |
---|
| 1006 | |
---|
| 1007 | * Menu: |
---|
| 1008 | |
---|
| 1009 | * sdiff Options:: Summary of options to `diff'. |
---|
| 1010 | |
---|
| 1011 | |
---|
| 1012 | File: diff.info, Node: sdiff Options, Up: Invoking sdiff |
---|
| 1013 | |
---|
| 1014 | Options to `sdiff' |
---|
| 1015 | ================== |
---|
| 1016 | |
---|
| 1017 | Below is a summary of all of the options that GNU `sdiff' accepts. |
---|
| 1018 | Each option has two equivalent names, one of which is a single letter |
---|
| 1019 | preceded by `-', and the other of which is a long name preceded by |
---|
| 1020 | `--'. Multiple single letter options (unless they take an argument) |
---|
| 1021 | can be combined into a single command line argument. Long named |
---|
| 1022 | options can be abbreviated to any unique prefix of their name. |
---|
| 1023 | |
---|
| 1024 | `-a' |
---|
| 1025 | Treat all files as text and compare them line-by-line, even if they |
---|
| 1026 | do not appear to be text. *Note Binary::. |
---|
| 1027 | |
---|
| 1028 | `-b' |
---|
| 1029 | Ignore changes in amount of white space. *Note White Space::. |
---|
| 1030 | |
---|
| 1031 | `-B' |
---|
| 1032 | Ignore changes that just insert or delete blank lines. *Note |
---|
| 1033 | Blank Lines::. |
---|
| 1034 | |
---|
| 1035 | `-d' |
---|
| 1036 | Change the algorithm to perhaps find a smaller set of changes. |
---|
| 1037 | This makes `sdiff' slower (sometimes much slower). *Note diff |
---|
| 1038 | Performance::. |
---|
| 1039 | |
---|
| 1040 | `-H' |
---|
| 1041 | Use heuristics to speed handling of large files that have numerous |
---|
| 1042 | scattered small changes. *Note diff Performance::. |
---|
| 1043 | |
---|
| 1044 | `--expand-tabs' |
---|
| 1045 | Expand tabs to spaces in the output, to preserve the alignment of |
---|
| 1046 | tabs in the input files. *Note Tabs::. |
---|
| 1047 | |
---|
| 1048 | `-i' |
---|
| 1049 | Ignore changes in case; consider upper- and lower-case to be the |
---|
| 1050 | same. *Note Case Folding::. |
---|
| 1051 | |
---|
| 1052 | `-I REGEXP' |
---|
| 1053 | Ignore changes that just insert or delete lines that match REGEXP. |
---|
| 1054 | *Note Specified Folding::. |
---|
| 1055 | |
---|
| 1056 | `--ignore-all-space' |
---|
| 1057 | Ignore white space when comparing lines. *Note White Space::. |
---|
| 1058 | |
---|
| 1059 | `--ignore-blank-lines' |
---|
| 1060 | Ignore changes that just insert or delete blank lines. *Note |
---|
| 1061 | Blank Lines::. |
---|
| 1062 | |
---|
| 1063 | `--ignore-case' |
---|
| 1064 | Ignore changes in case; consider upper- and lower-case to be the |
---|
| 1065 | same. *Note Case Folding::. |
---|
| 1066 | |
---|
| 1067 | `--ignore-matching-lines=REGEXP' |
---|
| 1068 | Ignore changes that just insert or delete lines that match REGEXP. |
---|
| 1069 | *Note Specified Folding::. |
---|
| 1070 | |
---|
| 1071 | `--ignore-space-change' |
---|
| 1072 | Ignore changes in amount of white space. *Note White Space::. |
---|
| 1073 | |
---|
| 1074 | `-l' |
---|
| 1075 | `--left-column' |
---|
| 1076 | Print only the left column of two common lines. *Note Side by |
---|
| 1077 | Side Format::. |
---|
| 1078 | |
---|
| 1079 | `--minimal' |
---|
| 1080 | Change the algorithm to perhaps find a smaller set of changes. |
---|
| 1081 | This makes `sdiff' slower (sometimes much slower). *Note diff |
---|
| 1082 | Performance::. |
---|
| 1083 | |
---|
| 1084 | `-o FILE' |
---|
| 1085 | `--output=FILE' |
---|
| 1086 | Put merged output into FILE. This option is required for merging. |
---|
| 1087 | |
---|
| 1088 | `-s' |
---|
| 1089 | `--suppress-common-lines' |
---|
| 1090 | Do not print common lines. *Note Side by Side Format::. |
---|
| 1091 | |
---|
| 1092 | `--speed-large-files' |
---|
| 1093 | Use heuristics to speed handling of large files that have numerous |
---|
| 1094 | scattered small changes. *Note diff Performance::. |
---|
| 1095 | |
---|
| 1096 | `-t' |
---|
| 1097 | Expand tabs to spaces in the output, to preserve the alignment of |
---|
| 1098 | tabs in the input files. *Note Tabs::. |
---|
| 1099 | |
---|
| 1100 | `--text' |
---|
| 1101 | Treat all files as text and compare them line-by-line, even if they |
---|
| 1102 | do not appear to be text. *Note Binary::. |
---|
| 1103 | |
---|
| 1104 | `-v' |
---|
| 1105 | `--version' |
---|
| 1106 | Output the version number of `sdiff'. |
---|
| 1107 | |
---|
| 1108 | `-w COLUMNS' |
---|
| 1109 | `--width=COLUMNS' |
---|
| 1110 | Use an output width of COLUMNS. *Note Side by Side Format::. |
---|
| 1111 | Note that for historical reasons, this option is `-W' in `diff', |
---|
| 1112 | `-w' in `sdiff'. |
---|
| 1113 | |
---|
| 1114 | `-W' |
---|
| 1115 | Ignore horizontal white space when comparing lines. *Note White |
---|
| 1116 | Space::. Note that for historical reasons, this option is `-w' in |
---|
| 1117 | `diff', `-W' in `sdiff'. |
---|
| 1118 | |
---|
| 1119 | |
---|
| 1120 | File: diff.info, Node: Incomplete Lines, Next: Projects, Prev: Invoking sdiff, Up: Top |
---|
| 1121 | |
---|
| 1122 | Incomplete Lines |
---|
| 1123 | **************** |
---|
| 1124 | |
---|
| 1125 | When an input file ends in a non-newline character, its last line is |
---|
| 1126 | called an "incomplete line" because its last character is not a |
---|
| 1127 | newline. All other lines are called "full lines" and end in a newline |
---|
| 1128 | character. Incomplete lines do not match full lines unless differences |
---|
| 1129 | in white space are ignored (*note White Space::.). |
---|
| 1130 | |
---|
| 1131 | An incomplete line is normally distinguished on output from a full |
---|
| 1132 | line by a following line that starts with `\'. However, the RCS format |
---|
| 1133 | (*note RCS::.) outputs the incomplete line as-is, without any trailing |
---|
| 1134 | newline or following line. The side by side format normally represents |
---|
| 1135 | incomplete lines as-is, but in some cases uses a `\' or `/' gutter |
---|
| 1136 | marker; *Note Side by Side::. The if-then-else line format preserves a |
---|
| 1137 | line's incompleteness with `%L', and discards the newline with `%l'; |
---|
| 1138 | *Note Line Formats::. Finally, with the `ed' and forward `ed' output |
---|
| 1139 | formats (*note Output Formats::.) `diff' cannot represent an incomplete |
---|
| 1140 | line, so it pretends there was a newline and reports an error. |
---|
| 1141 | |
---|
| 1142 | For example, suppose `F' and `G' are one-byte files that contain |
---|
| 1143 | just `f' and `g', respectively. Then `diff F G' outputs |
---|
| 1144 | |
---|
| 1145 | 1c1 |
---|
| 1146 | < f |
---|
| 1147 | \ No newline at end of file |
---|
| 1148 | --- |
---|
| 1149 | > g |
---|
| 1150 | \ No newline at end of file |
---|
| 1151 | |
---|
| 1152 | (The exact message may differ in non-English locales.) `diff -n F G' |
---|
| 1153 | outputs the following without a trailing newline: |
---|
| 1154 | |
---|
| 1155 | d1 1 |
---|
| 1156 | a1 1 |
---|
| 1157 | g |
---|
| 1158 | |
---|
| 1159 | `diff -e F G' reports two errors and outputs the following: |
---|
| 1160 | |
---|
| 1161 | 1c |
---|
| 1162 | g |
---|
| 1163 | . |
---|
| 1164 | |
---|
| 1165 | |
---|
| 1166 | File: diff.info, Node: Projects, Next: Concept Index, Prev: Incomplete Lines, Up: Top |
---|
| 1167 | |
---|
| 1168 | Future Projects |
---|
| 1169 | *************** |
---|
| 1170 | |
---|
| 1171 | Here are some ideas for improving GNU `diff' and `patch'. The GNU |
---|
| 1172 | project has identified some improvements as potential programming |
---|
| 1173 | projects for volunteers. You can also help by reporting any bugs that |
---|
| 1174 | you find. |
---|
| 1175 | |
---|
| 1176 | If you are a programmer and would like to contribute something to the |
---|
| 1177 | GNU project, please consider volunteering for one of these projects. If |
---|
| 1178 | you are seriously contemplating work, please write to |
---|
| 1179 | `gnu@prep.ai.mit.edu' to coordinate with other volunteers. |
---|
| 1180 | |
---|
| 1181 | * Menu: |
---|
| 1182 | |
---|
| 1183 | * Shortcomings:: Suggested projects for improvements. |
---|
| 1184 | * Bugs:: Reporting bugs. |
---|
| 1185 | |
---|
| 1186 | |
---|
| 1187 | File: diff.info, Node: Shortcomings, Next: Bugs, Up: Projects |
---|
| 1188 | |
---|
| 1189 | Suggested Projects for Improving GNU `diff' and `patch' |
---|
| 1190 | ======================================================= |
---|
| 1191 | |
---|
| 1192 | One should be able to use GNU `diff' to generate a patch from any |
---|
| 1193 | pair of directory trees, and given the patch and a copy of one such |
---|
| 1194 | tree, use `patch' to generate a faithful copy of the other. |
---|
| 1195 | Unfortunately, some changes to directory trees cannot be expressed using |
---|
| 1196 | current patch formats; also, `patch' does not handle some of the |
---|
| 1197 | existing formats. These shortcomings motivate the following suggested |
---|
| 1198 | projects. |
---|
| 1199 | |
---|
| 1200 | * Menu: |
---|
| 1201 | |
---|
| 1202 | * Changing Structure:: Handling changes to the directory structure. |
---|
| 1203 | * Special Files:: Handling symbolic links, device special files, etc. |
---|
| 1204 | * Unusual File Names:: Handling file names that contain unusual characters. |
---|
| 1205 | * Arbitrary Limits:: Patching non-text files. |
---|
| 1206 | * Large Files:: Handling files that do not fit in memory. |
---|
| 1207 | * Ignoring Changes:: Ignoring certain changes while showing others. |
---|
| 1208 | |
---|
| 1209 | |
---|
| 1210 | File: diff.info, Node: Changing Structure, Next: Special Files, Up: Shortcomings |
---|
| 1211 | |
---|
| 1212 | Handling Changes to the Directory Structure |
---|
| 1213 | ------------------------------------------- |
---|
| 1214 | |
---|
| 1215 | `diff' and `patch' do not handle some changes to directory |
---|
| 1216 | structure. For example, suppose one directory tree contains a directory |
---|
| 1217 | named `D' with some subsidiary files, and another contains a file with |
---|
| 1218 | the same name `D'. `diff -r' does not output enough information for |
---|
| 1219 | `patch' to transform the the directory subtree into the file. |
---|
| 1220 | |
---|
| 1221 | There should be a way to specify that a file has been deleted without |
---|
| 1222 | having to include its entire contents in the patch file. There should |
---|
| 1223 | also be a way to tell `patch' that a file was renamed, even if there is |
---|
| 1224 | no way for `diff' to generate such information. |
---|
| 1225 | |
---|
| 1226 | These problems can be fixed by extending the `diff' output format to |
---|
| 1227 | represent changes in directory structure, and extending `patch' to |
---|
| 1228 | understand these extensions. |
---|
| 1229 | |
---|
| 1230 | |
---|
| 1231 | File: diff.info, Node: Special Files, Next: Unusual File Names, Prev: Changing Structure, Up: Shortcomings |
---|
| 1232 | |
---|
| 1233 | Files that are Neither Directories Nor Regular Files |
---|
| 1234 | ---------------------------------------------------- |
---|
| 1235 | |
---|
| 1236 | Some files are neither directories nor regular files: they are |
---|
| 1237 | unusual files like symbolic links, device special files, named pipes, |
---|
| 1238 | and sockets. Currently, `diff' treats symbolic links like regular |
---|
| 1239 | files; it treats other special files like regular files if they are |
---|
| 1240 | specified at the top level, but simply reports their presence when |
---|
| 1241 | comparing directories. This means that `patch' cannot represent changes |
---|
| 1242 | to such files. For example, if you change which file a symbolic link |
---|
| 1243 | points to, `diff' outputs the difference between the two files, instead |
---|
| 1244 | of the change to the symbolic link. |
---|
| 1245 | |
---|
| 1246 | `diff' should optionally report changes to special files specially, |
---|
| 1247 | and `patch' should be extended to understand these extensions. |
---|
| 1248 | |
---|
| 1249 | |
---|
| 1250 | File: diff.info, Node: Unusual File Names, Next: Arbitrary Limits, Prev: Special Files, Up: Shortcomings |
---|
| 1251 | |
---|
| 1252 | File Names that Contain Unusual Characters |
---|
| 1253 | ------------------------------------------ |
---|
| 1254 | |
---|
| 1255 | When a file name contains an unusual character like a newline or |
---|
| 1256 | white space, `diff -r' generates a patch that `patch' cannot parse. |
---|
| 1257 | The problem is with format of `diff' output, not just with `patch', |
---|
| 1258 | because with odd enough file names one can cause `diff' to generate a |
---|
| 1259 | patch that is syntactically correct but patches the wrong files. The |
---|
| 1260 | format of `diff' output should be extended to handle all possible file |
---|
| 1261 | names. |
---|
| 1262 | |
---|
| 1263 | |
---|
| 1264 | File: diff.info, Node: Arbitrary Limits, Next: Large Files, Prev: Unusual File Names, Up: Shortcomings |
---|
| 1265 | |
---|
| 1266 | Arbitrary Limits |
---|
| 1267 | ---------------- |
---|
| 1268 | |
---|
| 1269 | GNU `diff' can analyze files with arbitrarily long lines and files |
---|
| 1270 | that end in incomplete lines. However, `patch' cannot patch such |
---|
| 1271 | files. The `patch' internal limits on line lengths should be removed, |
---|
| 1272 | and `patch' should be extended to parse `diff' reports of incomplete |
---|
| 1273 | lines. |
---|
| 1274 | |
---|
| 1275 | |
---|
| 1276 | File: diff.info, Node: Large Files, Next: Ignoring Changes, Prev: Arbitrary Limits, Up: Shortcomings |
---|
| 1277 | |
---|
| 1278 | Handling Files that Do Not Fit in Memory |
---|
| 1279 | ---------------------------------------- |
---|
| 1280 | |
---|
| 1281 | `diff' operates by reading both files into memory. This method |
---|
| 1282 | fails if the files are too large, and `diff' should have a fallback. |
---|
| 1283 | |
---|
| 1284 | One way to do this is to scan the files sequentially to compute hash |
---|
| 1285 | codes of the lines and put the lines in equivalence classes based only |
---|
| 1286 | on hash code. Then compare the files normally. This does produce some |
---|
| 1287 | false matches. |
---|
| 1288 | |
---|
| 1289 | Then scan the two files sequentially again, checking each match to |
---|
| 1290 | see whether it is real. When a match is not real, mark both the |
---|
| 1291 | "matching" lines as changed. Then build an edit script as usual. |
---|
| 1292 | |
---|
| 1293 | The output routines would have to be changed to scan the files |
---|
| 1294 | sequentially looking for the text to print. |
---|
| 1295 | |
---|
| 1296 | |
---|
| 1297 | File: diff.info, Node: Ignoring Changes, Prev: Large Files, Up: Shortcomings |
---|
| 1298 | |
---|
| 1299 | Ignoring Certain Changes |
---|
| 1300 | ------------------------ |
---|
| 1301 | |
---|
| 1302 | It would be nice to have a feature for specifying two strings, one in |
---|
| 1303 | FROM-FILE and one in TO-FILE, which should be considered to match. |
---|
| 1304 | Thus, if the two strings are `foo' and `bar', then if two lines differ |
---|
| 1305 | only in that `foo' in file 1 corresponds to `bar' in file 2, the lines |
---|
| 1306 | are treated as identical. |
---|
| 1307 | |
---|
| 1308 | It is not clear how general this feature can or should be, or what |
---|
| 1309 | syntax should be used for it. |
---|
| 1310 | |
---|
| 1311 | |
---|
| 1312 | File: diff.info, Node: Bugs, Prev: Shortcomings, Up: Projects |
---|
| 1313 | |
---|
| 1314 | Reporting Bugs |
---|
| 1315 | ============== |
---|
| 1316 | |
---|
| 1317 | If you think you have found a bug in GNU `cmp', `diff', `diff3', |
---|
| 1318 | `sdiff', or `patch', please report it by electronic mail to |
---|
| 1319 | `bug-gnu-utils@prep.ai.mit.edu'. Send as precise a description of the |
---|
| 1320 | problem as you can, including sample input files that produce the bug, |
---|
| 1321 | if applicable. |
---|
| 1322 | |
---|
| 1323 | Because Larry Wall has not released a new version of `patch' since |
---|
| 1324 | mid 1988 and the GNU version of `patch' has been changed since then, |
---|
| 1325 | please send bug reports for `patch' by electronic mail to both |
---|
| 1326 | `bug-gnu-utils@prep.ai.mit.edu' and `lwall@netlabs.com'. |
---|
| 1327 | |
---|