bk resolving(7.3ce) BitKeeper User's Manual bk resolving(7.3ce) NAME bk resolving - help on resolving conflicts DESCRIPTION This section documents the merge process started by the resolve com- mand. See bk resolve for details on using resolve. While in resolve, you can press ENTER to see a summary of the commands. The bk resolve command prompts you on each file that has conflicts. A conflict is defined as two deltas made in parallel in different reposi- tories. If the conflict does not have any overlapping lines, then it may have been automerged, depending if bk resolve was run with the "-a" option. There are other sorts of conflicts besides the typical file content conflicts. BitKeeper manages file names, permissions, flags, and sym- bolic tags in the same way as it manages file contents. That means that you can have a permissions conflict if, for example, one person changed the file to 0755 mode and another changed it to 0777 mode. The resolve process for all conflicts is fairly similar. For each type of conflict on each file, you will be prompted for an action. To view a brief summary of the conflict and a list of available actions, press ENTER (or ? or help). The choices usually include a more detailed explanation of the situation; we try to consistently make this avail- able as the "x" command (as in eXplain). Some of the available actions allow you to diff the files, view file history, and merge using graphical tools, etc. See the command summary for the full list. MULTIPLE USERS Only one user is allowed to run the resolver at any given time. If a second user attempts to run bk resolve, they will get an error message indicating that another user is already running the resolver. It is also possible to have multiple users resolve a set of conflicts. A typical way to do this is to use the bk conflicts command to get a list of files that need manual resolving along with a list of users responsible for the conflicting changes. Then each user takes turns invoking the resolver on the list of files for which they are responsi- ble, checking in the changes as they go. After the conflicts in the individual files have been resolved and checked in, the bk resolve com- mand is run with no arguments in order to finish the process and commit a changeset. The changes for each file will be attributed to the user that committed that particular file. The changeset will be attributed to the user that does the final commit of the changeset. In this context, as well as the single user case, it is sometimes desirable to quit the resolver and restart it at a later time. When the resolver is re-invoked, it will not ask the user to re-merge files that have already been resolved and will continue where the user left off on the previous invocation. This process can be repeated as many times as desired until all conflicts have been resolved. VIEW DIFFERENCES AND HISTORY To see the diffs use the "d" command. For side-by-side diffs, use the "sd" command. You can also diff one or the other branches against the common ancestor using "dr" or "dl". Type "D" to get a graphical, color coded side-by-side diff browser. There are also built-in commands to show the history of the file (see "h", "hl", "hr"). In addition, "p" starts the the graphical file browser which allows you to view the difference between versions by clicking the left button on the earlier rev and the right button on a later rev. The bottom of the screen will show the diffs. If you type Return at the prompt, the three revisions forming the merge are part of the help message. MERGING CONTENTS When in resolve, there are four different files for each merge. They are: local The version of the file in the local repository. remote The version of the file in the other repository. merge The merged file. GCA A common ancestor of the local/remote versions. Your goal is to generate the merge file using one of the methods below. The easiest and most popular merge method is to use the "m" command for cases where there are no overlapping lines. This method performs a three-way diff and merge and warns you when there are overlapping lines. If there are overlaps, you have to edit the merged file (use the "e" command), find the conflict markers which look like "<<<<" or ">>>>", and manually fix the conflicts. This command requires care since non-overlapping lines does not mean that the merge makes semantic sense. If the merge looks complicated, a good approach is to start up the file browser with "p" and then start up a side-by-side filemerge with "f". Then walk through the diffs, picking and choosing with blocks of code to use. If you get confused about who added what, you can go to the history tool browser (bk revtool) and left click on the common ancestor and right click on each of the two tips of the trunk/branch to see who added what. It is also possible to use a combination of graphical tools and the automatic merge. You can type "p" to run the file browser, "D" to run difftool, "m" to do the merge, and then "e" to edit the merged file. The file browser is run in the background so you can look at the vari- ous changes as described above. Warning: if you are running your edi- tor and the file merge program, then both are working on the same out- put file and whichever one writes it last, overwrites any earlier ver- sions. You may also call an external tool to merge changes. When in the resolver, if you say file.c>> !<command> then <command> will be run with the following environment variables set: BK_LOCAL pathname of a temp file containing the local version BK_GCA file containing the common ancestor BK_REMOTE pathname of a temp file containing the remote version BK_MERGE pathname where the merged content should be placed COMMIT The merge process is not complete until you commit the file with the "C" command at the resolve prompt. This means you can merge repeatedly until you are happy with the results. Each time you merge and save, however, you overwrite the previous merge attempt. When you are happy with your merged file, click done in filemerge, exit the file browser, and type "C" at the prompt to commit the file and move on to the next one. SEE ALSO bk conflicts bk fm3tool bk fmtool bk merge bk resolve bk revtool bk smerge CATEGORY Overview Repository BitKeeper Inc 1E1 bk resolving(7.3ce)