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