> 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
>