wiki:BazaarWorkflow

Version 2 (modified by Jiri Svoboda, 15 years ago) ( diff )

Structured history

Managing HelenOS source with Bazaar

This should help you to start using our new VCS, Bazaar. Please read this little guide carefully. Inappropriate use of Bazaar WILL make a mess in our repository.

Linear History

If you are doing a simple change (or several simple, unrelated changes) you might try to go for linear history. This will only work if nobody else pushed any changes to the main repository while you were doing your changes. Start by creating your private branch:

$ bzr branch bzr://bzr.helenos.org/head my_branch

This will create a branch (and working copy) under the directory my_branch. Now make some changes and commit them to your private branch:

$ cd my_branch
my_branch$ ...modify some files...
my_branch$ bzr commit -m "Fixed crash when writing zero bytes to FAT."

Now we can try and push back our changes to the main repository:

my_branch$ bzr push --remember bzr+http://jermar@bzr.helenos.org/head

In the command above please replace jermar with your username. Next time you can just use

my_branch$ bzr push

If nobody pushed any changes since the point you branched off, this will work. Otherwise it will fail. If it fails like this:

...

you have two options. Either rebase your changes to the mainline head or switch to structured history workflow.

Rebasing

Structured History

If your branch diverged from the mainline (i.e. somebody pushed to the main repository since you branched off), you cannot push anymore. You must merge the two branches. With merging, the order of arguments is significant. You must always merge your branch into the mainline, never the other way around! How can you do this? With bazaar you can only merge to a local repository (you need to chdir into it), you cannot merge to a remote repository.

Therefore we have to resort to a little trick. Suppose your branch my_branch diverged from the mainline. We thus create a new branch head_clone which will be a clone of the mainline:

$ bzr branch bzr://bzr.helenos.org/head head_clone

Now go to the clone repository and merge your branch into it:

$ cd head_clone
head_clone$ bzr merge ../my_branch

Now we can push from the clone to the main repository:

head_clone$ bzr push bzr+http://jermar@bzr.helenos.org/head

Finally let us sync our branch with the main repository:

head_clone$ cd ../my_branch
my_branch$ bzr pull
Note: See TracWiki for help on using the wiki.