This document shows you how to use Git, just as you were using SVN in the past. It is to get you guys up and running with git as soon as possible by relying on your SVN knowledge and it is focuses on what you want to do in drools.
This document does not really teach you Git. Git is not just SVN++, it is much more and you should take some time to learn that too.


SVN trunk is renamed to Git master. A branch is still a branch. A tag is still a tag.
Translation note: trunk == master

The SVN central repository is now the reference repository on github, see https://github.com:droolsjbpm/droolsjbpm.

Part 1: Need to know


Full preparation:

Getting the source code locally

First move your old SVN working directory aside, so you’re not confused that you shouldn’t work there any more:
$ cd projects
$ mv drools drools-oldsvn

Now you’re ready to get the sources with git. In SVN this is a svn checkout, but in Git this is called a git clone. Prefer the faster, stabler git protocol over the slower https protocol:
$ git clone git@github.com:droolsjbpm/droolsjbpm.git droolsjbpm
Next go into that directory
$ cd droolsjbpm

So what’s the command git checkout for? To switch to another branch, but in the same working directory. In SVN you also use svn checkout for that.
Translation note: svn checkout == git clone (new repository) OR git checkout (change branch)

Follow the instructions in the README.txt to set up your Eclipse or IntelliJ again.

Getting changes from others

So Mark and Edson changed something in drools-core in the reference repository. How do I get those changes? In SVN this is svn update, but in Git this is a git pull.
$ git pull
Translation note: svn update == git pull

Making changes

While making your changes, do the same as in SVN: git add, git rm (instead of svn delete), git status.
Translation note: svn delete = git rm

After making your changes, you ‘ll want to do a git commit (when you’re done with a changeset) and a git push (to share those changes with the rest of the team). To recap: doing a git commit does not push your changes to the remote repository yet, you also need to do a git push.
$ git commit -m “JBRULES-123 fix testcase”
$ git push
Translation note: svn commit == git commit + git push

Part 2: Tell me more

Extra terminology

What is rebasing? A rebase is an alternative manner of merging: instead of merging your changes with the incoming changes, it takes the incoming changes and applies your changes on top of that. For example:
$ git pull --rebase

What is origin? Because git can work with multiple remote repositories (usually forks of the same project), the default remote repository is known as origin. If you’ve cloned the reference repository, then origin is the reference repository. If you’ve forked the reference repository as A and cloned A, then origin is A.


Usually we’ll have 2 types of branches: release branches and topic branches.
To switch to another branch, just use git checkout:
$ git checkout 5.1.x

To create a branch do:
$ git checkout -b 5.2.x

Release branching

A release branches is copied from the master branch and only receives bug-fixes. It is separated from the master branch so no unstable features or improvements (pushed by other developers) leak in.
For example: $ git checkout 5.1.x

Cherry picking is very interesting to pick bug-fixes from the master branch into the release branch.

Topic branching

A topic branch is copied from the master branch and is eventually merged back into the master branch. Its changes are to disruptive to other team members to be committed to the master immediately.
For example: $ git checkout trueModify

Rebasing is very interesting when you’re working on an experimental feature in a topic branch for the last few weeks and you want to have the latest changes of master(=trunk) in there too (= sync up with master):
// on my the myTopic branch
$ git rebase master

After your topic branch is stable, you’ll merge it into the master branch:
$ git checkout master
$ git merge trueModify

Learn more

Do you want to really learn Git?
Read the Pro Git book (freely available online): http://progit.org/book/
You’ll easily gain the time you spend reading that book, because Git is more than SVN++.
Read that book, especially if you’re going to do branching and merging!
Other references: Hibernate git tricks, SVN crash course, Git for Gnome developers, ...
With kind regards,
Geoffrey De Smet