> Purpose
>
> 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.
>
> Terminology
>
> 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
>
> Preparation
>
> If:
>
> you’ve done the preparation in the dev list mail
>
> and the correction too, skip to section Getting the
source code locally.
> haven’t done the correction yet, do this first (and
the skip to that
> section):
>
> Step 4 stated:
>
> $ git config --global
user.name
myUsername // WRONG
>
> Correct that by running:
>
> $ git config --global
user.name
"My Name"
> $ git config --global -l
>
> you haven’t done the preparation yet, do it now, as
stated below.
>
> Full preparation:
>
> 1) Install git for your OS
>
> 1a) Linux: Install the package git (and optionally
gitk)
>
> $ sudo apt-get install git
> $ sudo apt-get install gitk
>
> 1b) Windows: Use the icon on the right on
http://git-scm.com
> 1c) Mac OSX: Use the icon on the right on
http://git-scm.com
>
> Optionally install gitx from
http://gitx.frim.nl/
>
> 2) Install git in your IDE
>
> 2b) Eclipse: Install the EGit plugin.
>
> Menu Help, menu item Install new software.
> Work with update site Helios, open Tree item
Collaboration, tree item
> Eclipse EGit.
>
> 2c) IntelliJ: Enable the git plugin (if not enabled):
>
> Menu file, menu item Other Settings, menu item
Configure plugins.
>
> 3) Get a Github account:
https://github.com/signup/free
> 4) Configure git correctly (Github also tells you
this):
>
> $ git --version
> git version 1.7.1
> $ git config --global
user.name
"My Full Name"
> $ git config --global user.email
myAccount@gmail.com
> $ git config --global -l
>
user.name=Geoffrey De Smet
> user.email=ge0ffrey.spam@...
>
> 6) Push your public key to github:
>
> Follow the instructions on
http://github.com/guides/providing-your-ssh-key
>
> 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.
>
> Branching
>
> 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
>