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