table of contents
fmerge(1) | General Commands Manual | fmerge(1) |
NAME¶
fmerge - merge filesSYNOPSIS¶
fmerge [ option... ] basefile fileA fileB fmerge -Help fmerge -VERSionDESCRIPTION¶
The fmerge program is used to compare the changes between two different descendants of a base file, and creates an output file which contains both sets of changes. This is useful when two users both take the same version of a file and make independent edits to it, and then later want to create a file which contains both sets of edits. In such a use, the original file that both sets of edits is derived from is called the base file. The two files containing the edits are called file A and file B. The command:fmerge basefile fileA fileB -o outputfile
produces the output file which contains the edits contained in file A and
file B, based on the base file . If the -Output option
was not used, or if no outputfile is specified, then the merged lines are
typed to the standard output. The order of specifying file A and
file B is usually unimportant.
The fmerge program can also be used to remove earlier edits made to a
module. To do this, make the version containing the edits you want to delete
be the basefile. Make the version previous to the edit you want deleted be
file A. Finally, make the most recent version of the file which contains the
other edits (including the one you want deleted) be file B. Then the result of
merging will be the newest version of the module minus the changes made by the
edit you wanted removed. For example, if three successive versions of some
module have the names edit10, edit11 and edit12, and you
want the changes done by edit11 to be undone, but still want the
changes done by edit12, then you use the command:
fmerge edit11 edit10 edit12 -o outputfile
While merging the two sets of edits, fmerge may discover conflicts. A conflict
occurs when the same line of the base file is changed by both of the two sets
of edits. The change can be due to new lines being inserted, lines being
deleted, or both. When conflicts occur, the output file contains conflict
identification lines, which are lines containing the string
'/−/−/−/'. These lines indicate the region where
the two sets of edits are incompatible. You must then edit the output file and
remove these lines, and in addition correct the conflicts manually in order to
produce the correct result.
OPTIONS¶
The following options are understood:- -Conflicts [ conflictfile ]
-
Since conflicts due to deletions are invisible in the
output file, and inserts do not specify which of the two edits inserted the
lines, there is an alternative output format from the fmerge program.
This output format describes what happens to each line of the base file, so
that conflicts are easier to detect and fix. The command:
Each set of conflicts is flagged by three identification lines. The first line
indicates the beginning of the conflict, and specifies the line numbers for
the base file and two divergent files. The second conflict identification line
separates lines changed by file A from lines changed by file B. The third
conflict identification indicates the end of the conflict.
You can edit this conflict file to remove the conflicts. This involves deleting
the conflict identification lines, and changing the conflicting lines as
necessary to fix the conflict. While doing this, remember to leave three blank
characters at the front of any new lines you insert while correcting the
conflicts. When you are done, there should be no lines which begin with an 'X'
in the file. All other lines can remain. Then you can use the command:
fmerge basefile fileA fileB -c conflictfile
produces the file describing the results of the merge in detail. If the
-Conflicts option is specified without any conflictfile name, then the
conflicts are send to the standard output.
If there are conflicts, and the -Conflicts options is not specified, the
fmerge program will exit with a status of 1.
The conflict file contains lines which contain three characters and then some
text. The first three characters describe what is happening to the base file
at that point. These characters are the following:
- IA
- This line was inserted by file A.
- DA
- This line was deleted by file A.
- IB
- This line was inserted by file B.
- DB
- This line was deleted by file B.
- <blanks>
- This line is unchanged.
- X
- This is a conflict identification line.
- U
- There are unspecified unchanged lines here.
fmerge conflictfile -o outputfile
to create the new output file which has the desired data. Once again, if no
-Output option or outputfile is used, the output is send to the
standard output.- -Unchanged number
-
Besides physical conflicts, there can be logical
conflicts. These are changes made to different lines in the base file such
that the program is no longer correct. Such conflicts cannot be detected by a
program, and so these must be checked manually. In order to make this process
easier, the -Unchanged option can be used to reduce the size of the
conflict file to only include regions near changed lines. This file can then
be examined in order to detect possible logical conflicts. As an example, the
command:
fmerge basefile fileA fileB -c -u 3
will send to the standard output all changes made by either sets of edits, with
only three unchanged lines surrounding each edit.
When using the -Unchanged option, the conflict file will contain lines
starting with 'U'. These represent unchanged lines, and the number following
the letter is the number of unchanged lines. The resulting conflict file
cannot be read to produce an output file because of the missing lines. If this
is attempted, an error will be generated.
It is possible to use both -Output and -Conflicts in the same
command. Thus you can produce the output file which you hope is correct, and
also produce the conflict file which you can use to check for logical
conflicts.- -Verbose [ number ]
-
This option can be specified with any other action, and
outputs status information about the progress of the action. This is useful
for debugging of problems, or just for amusement when the system is slow or a
large file is being processed. It accepts a numeric argument to indicate the
verbosity for output. The levels are as follows:
- 0
- No output at all (except for errors).
- 1
- Single‐line output describing action (default).
- 2
- Detailed status as action proceeds.
- -Failures number
-
- -Help
-
- -Ignore
-
- -Ignore_Identical_Conflicts
-
- -VERSion
-
FILE NAME EXPANSION¶
As a convenience, if a pathname begins with a period and a environment variable exists with that name, then the value of the environment variable will be used as the actual pathname. For example, if a environment variable of .FOO has the value this.is.a.long.name, then the commandfmerge -o .FOO
fmerge -o this.is.a.long.name
fmerge -o ./.FOO
BINARY FILES¶
In general, fmerge can handle all text files you throw at it, even international text with unusual encodings. However, fmerge is unable to cope elegantly with files which contain the NUL character. The fcomp(1) program simply prints a warning, and continues, you need to know that it converts NUL characters into an 0x80 value before performing the comparison. The fmerge(1) program also converts the NUL character to an 0x80 value before merging, after a warning, and any output file will contain this value, rather than the original NUL character. The fhist(1) program, however, generates a fatal error if any input file contains NUL characters. This is intended to protect your source files for unintentional corruption. Use -BINary for files which absolutely must contain NUL characters.EXIT STATUS¶
The fmerge program will exit with a status of 1 on any error. The fmerge program will only exit with a status of 0 if there are no errors.REFERENCES¶
This program is based on the algorithm inAn O(ND) Difference Algorithm and Its Variations,
Eugene W. Myers, TR 85‐6, 10‐April‐1985, Department of
Computer Science, The University of Arizona, Tuscon, Arizona 85721.
See also:
A File Comparison Program, Webb Miller and Eugene
W. Myers, Software Practice and Experience, Volume 15, No. 11, November
1985.
COPYRIGHT¶
fmerge version 1.18.D001AUTHORS¶
Peter Miller | Web: | http://miller.emu.id.au/pmiller/ |
/\/\* | E‐Mail: | pmiller@opensource.org.au |
David I. Bell | Web: | http://www.canb.auug.org.au/~dbell |
E‐Mail: | dbell@canb.auug.org.au |
FHist | Reference Manual |