Step by Step Modifying Bacula Code

Suppose you want to download Bacula source code, build it, make a change, then submit your change to the Bacula developers. What would you do?

More Details

Normally, you will work by creating a branch of the master branch of your repository, make your modifications, then make sure it is up to date, and finally create format-patch patches or push it to the Source Forge repo. Assuming you call the Bacula repository trunk, you might use the following commands:

cd trunk
git checkout master
git pull 
git checkout -b newbranch master
(edit, ...)
git add <file-edited>
git commit -m "<comment about commit>"

When you have completed working on your branch, you will do:

cd trunk
git checkout newbranch  # ensure I am on my branch
git pull                # get latest source code
git rebase master       # merge my code

If you have completed your edits before anyone has modified the repository, the git rebase master will report that there was nothing to do. Otherwise, it will merge the changes that were made in the repository before your changes. If there are any conflicts, Git will tell you. Typically resolving conflicts with Git is relatively easy. You simply make a diff:

git diff

Then edit each file that was listed in the git diff to remove the conflict, which will be indicated by lines of:

<<<<<<< HEAD
other text

where text is what is in the Bacula repository, and other text is what you have changed.

Once you have eliminated the conflict, the git diff will show nothing, and you must do a:

git add <file-with-conflicts-fixed>

Once you have fixed all the files with conflicts in the above manner, you enter:

git rebase --continue

and your rebase will be complete.

If for some reason, before doing the -continue, you want to abort the rebase and return to what you had, you enter:

git rebase --abort

Finally to make a set of patch files

git format-patch -M master

When you see your changes have been integrated and pushed to the main repo, you can delete your branch with:

git checkout master
git branch -D newbranch

Kern Sibbald 2010-08-30