bk resolve(7.3ce) BitKeeper User's Manual bk resolve(7.3ce)
NAME
bk resolve - merge and/or apply new work after a pull
SYNOPSIS
bk resolve [<options>] [<file> ...]
DESCRIPTION
After a bk pull, use resolve to merge and/or apply new work. Resolve
is automatically run by the bk pull and bk push commands but may be
rerun to finish a previously uncompleted resolve.
In order to preview the new changesets before merging, run bk csets and
that will run csettool on the list of changes (which may be found in
RESYNC/BitKeeper/etc/csets-in).
Resolve traverses all files in the repository (or the specified set of
files), prompting you with a list of files needing to be merged. The
following are the stages when resolving files:
=> create and rename conflicts
=> mode conflicts (file permissions)
=> file flag conflicts
=> file content conflicts
=> symbol "conflicts" (local and remote added the "alpha" symbol to
different deltas)
When there are no conflicts left to be merged, resolve groups any merge
changes into a changeset and moves everything into your repository.
While it is OK to quit out of resolve without finishing, the repository
will be locked and remain locked until you return to resolve and finish
up the merge process.
OPTIONS
-a Automerge. This will run a diff3-like merge of all non-
overlapping lines. If there are overlapping lines in
merged files, the merge will fail and the files will not be
resolved; you have to run resolve again without the "-a"
option to finish the resolve.
-A Auto advance. Normally, when doing an interactive resolve,
the resolution is not complete until you tell the system to
commit the file ("C" in the content resolve menu). This
allows for several false starts on a merge, you can use "m"
to merge, decide that you didn't like it, and use "m" again
to try over. If "-A" is used, any sort of merge which com-
pletes is immediately used and the resolver advances to the
next file.
-c No conflicts. This option tells resolve to complete if and
only if new non-conflicting work appears in the patch.
-l<log> Log operations to <log> (or stderr if no destination is
specified). This option is to provide for audit trails;
support is not yet complete.
-m<merge> Use <merge> as the merge program called when you press "m"
in the content resolver. The merge program takes four file
arguments: the local version of the file, the ancestor ver-
sion of the file, the remote version of the file, and the
merged file. It is the job of the merge program to merge
the changes into the merge file.
-q Be quiet.
-r Re-merge. If you started to resolve, exited the resolver,
and then restarted, files already merged will be skipped.
This options allows you to re-merge files which need help,
yet allows you to skip past the ones you are happy with by
hitting "C" in the resolve menu.
--batch do not do interactive resolve of any conflicts, do only
whatever can be automerged and then exit. (This was the old
-s option). Implies "-a".
-T Text-only. Enables the text-based resolve menu when doing
the final commit instead of using citool.
-x<glob> Exclude (don't resolve) files matching the glob pattern
specified. This option may be specified multiple times.
See RESOLVING SUBSETS section below.
-y<comment> Use <comment> as the changeset check-in message. This
option is typically set by the calling program, i.e.,
bk pull. If <comment> is not present, resolve will prompt
for one at commit time.
RESOLVING SUBSETS
Include and/or exclude patterns may be used to control which files are
resolved. This may be useful when unrelated changes by different engi-
neers are being merged. To see which files will need to be merged run
bk conflicts.
There may be multiple include and/or exclude patterns. The patterns
are a file glob the same as used by bk ignore. Patterns are matched
against the partial pathname from the root of the repository. If the
partial pathname matches any of the exclude patterns then the file is
skipped. If there are one or more include patterns but the partial
pathname does not match any of the include patterns then the file is
skipped. Exclude processing takes precedence over include processing.
If there are renames in the update and files which need renames are
selected then the resolver will force the resolution of those renames
first. Currently, the include/exclude selection process is applied to
the name used after the rename resolution, which can be confusing. It
may be easiest to run the rename resolution passes first with "bk
resolve -12", list the conflicts with bk conflicts, and then rerun
resolve selecting the files to be resolved.
bk resolve must be run without specifying any subset of the files in
order to fully complete.
PASSES
The resolver currently has four passes (phases), each with a different
function. A given pass must be completed before the next pass can be
started. Using options listed below, the user can specify which passes
are to be run on a particular invocation of the resolver. By default,
the resolver attempts to complete all four passes.
The first pass looks through both the incoming and local changes to see
if any files have been renamed. If there are files that have been
renamed, they are marked and put in a special BK-managed namespace
where they await rename processing.
In the second pass, the files marked and saved in pass 1 are inspected
to see if there are any rename conflicts. That is, if a file was
renamed in both the local and remote repositories with a different
pathname in each. If this is the case, the user is prompted to resolve
the conflict. In the other cases, the resolver can infer the correct
pathname and relocates the file out of the special BK-managed namespace
and into the proper place in the resolver working directory (usually
named RESYNC).
The third pass examines all files looking for content conflicts. Con-
tent conflicts arise when either the contents, symbolic link destina-
tion, or file modes have been changed both in the local and remote
repositories. These changes can be automatically resolved without user
input as long as the changes don't overlap. In the case where auto-
matic resolution is unsuccessful, the user is prompted to resolve the
conflict manually.
After all the conflicts have been resolved, the fourth pass attempts to
apply the changes to the local repository by moving the files out of
the resolver working directory and into the local repository. If this
cannot be completed for some reason (permission problems, modified
files in the local repository, etc.), the operation is aborted. Any
changes made to the local repository are removed, and the resolver
working directory is left intact. The user can then fix the problems
that caused the error, then re-run the resolver to apply the changes to
the local repository.
SEE ALSO
bk conflicts
bk csets
bk pull
bk push
bk resolving
CATEGORY
Repository
BitKeeper Inc 1E1 bk resolve(7.3ce)