Initial contribution of training and info material

1. Git/Gerrit workshop
Slides and exercises for a Git/Gerrit workshop where participants learn
how to work with EGit and Gerrit.

2. Gerrit and Code Review Best Practices

3. Gerrit and Eclipse
Presentation about the integration of Gerrit in Eclipse with Mylyn and
Egit.

4. Gerrit new features
Presentations about new features in Gerrit

The slides and exercises are based on asciidoc. Slidy is used as
backend for the presentations. Graphviz is used to generate commit
graphs and other graphics.

The build result for each presentation is a self-contained html file.
Exercises can be generated as html or pdf.

All material was used in SAP, references to SAP have been removed from
the slides and have been blackened in the screenshots. The screenshots
will be renewed in another change.

Change-Id: Ia6d6724d9dee7a209e1616137d38b30dae8bb8c3
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..42bef4e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+target/
+.project
+*.html
+*.pdf
diff --git a/README b/README
new file mode 100644
index 0000000..03719dc
--- /dev/null
+++ b/README
@@ -0,0 +1,14 @@
+Building asciidoc presentation:
+- download and install asciidoc (with slidy) and graphviz
+- from the presentations folder run:
+	./makeslides
+
+Open a presentation:
+- open the resulting *.html document in a web browser
+- use the same keys like in PowerPoint to move forward and back
+
+Building exercises:
+- from exercise folder run:
+    make html
+  or
+    make pdf
diff --git a/exercises/GEN-DOC-VERSION b/exercises/GEN-DOC-VERSION
new file mode 100644
index 0000000..973bfa8
--- /dev/null
+++ b/exercises/GEN-DOC-VERSION
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+V=$(git describe HEAD)
+
+case "$V" in
+'')
+	echo >&2 "fatal: no annotated tags, cannot determine version"
+	exit 1
+	;;
+
+*-g*)
+	echo >&2 "fatal: snapshot $V, cannot determine version"
+	exit 1
+	;;
+
+v*)
+	echo "$V" | perl -lne 'print $1 if /^v(\d+\.\d+(?:\.\d+)?)/'
+	;;
+esac
diff --git a/exercises/Makefile-common b/exercises/Makefile-common
new file mode 100644
index 0000000..24911be
--- /dev/null
+++ b/exercises/Makefile-common
@@ -0,0 +1,50 @@
+ASCIIDOC ?= asciidoc
+ASCIIDOC_EXTRA ?=
+
+all: html pdf
+
+ifeq ($(origin VERSION), undefined)
+  VERSION := $(shell ../GEN-DOC-VERSION 2>/dev/null)
+endif
+
+clean:
+	@echo $(VERSION)
+	rm -rf $(TARGET)
+
+DOC_HTML := $(patsubst %.txt,$(TARGET)/%.html,$(wildcard *.txt))
+DOC_PDF := $(patsubst %.txt,$(TARGET)/%.pdf,$(wildcard *.txt))
+COMMIT := $(shell git describe HEAD | sed s/^v//)
+
+ifeq ($(VERSION),)
+  REVISION = $(COMMIT)
+else
+  ifeq ($(VERSION),$(COMMIT))
+    REVISION := $(VERSION)
+  else
+    REVISION := $(VERSION) (from v$(COMMIT))
+  endif
+endif
+
+html: $(DOC_HTML)
+
+$(DOC_HTML): $(TARGET)/%.html : %.txt
+	@mkdir -p $(TARGET)
+	@echo "FORMAT $@"
+	@rm -f $@+ $@
+	@$(ASCIIDOC) -a toc \
+		-a data-uri \
+		-a 'revision=$(REVISION)' \
+		-a 'newline=\n' \
+		-b xhtml11 \
+		-f ../../asciidoc.conf \
+		$(ASCIIDOC_EXTRA) \
+		-o $@+ $<
+	@mv $@+ $@
+
+pdf: $(DOC_PDF)
+
+$(DOC_PDF): $(TARGET)/%.pdf : %.txt
+	@mkdir -p $(TARGET)
+	@echo "FORMAT $@"
+	@rm -f $@+ $@
+	@a2x -f pdf -D $(dir $@) $<
diff --git a/exercises/asciidoc.conf b/exercises/asciidoc.conf
new file mode 100644
index 0000000..48a1d59
--- /dev/null
+++ b/exercises/asciidoc.conf
@@ -0,0 +1,7 @@
+[attributes]
+asterisk=&#42;
+plus=&#43;
+caret=&#94;
+startsb=&#91;
+endsb=&#93;
+tilde=&#126;
diff --git a/exercises/egit/gerrit/Makefile b/exercises/egit/gerrit/Makefile
new file mode 100644
index 0000000..b2e8422
--- /dev/null
+++ b/exercises/egit/gerrit/Makefile
@@ -0,0 +1,2 @@
+TARGET = ../../../target/exercises/egit/gerrit
+include ../../Makefile-common
diff --git a/exercises/egit/gerrit/branch-checkout.png b/exercises/egit/gerrit/branch-checkout.png
new file mode 100644
index 0000000..77a9930
--- /dev/null
+++ b/exercises/egit/gerrit/branch-checkout.png
Binary files differ
diff --git a/exercises/egit/gerrit/change-in-gerrit-2.png b/exercises/egit/gerrit/change-in-gerrit-2.png
new file mode 100644
index 0000000..42a3b2b
--- /dev/null
+++ b/exercises/egit/gerrit/change-in-gerrit-2.png
Binary files differ
diff --git a/exercises/egit/gerrit/change-in-gerrit.png b/exercises/egit/gerrit/change-in-gerrit.png
new file mode 100644
index 0000000..d2044d9
--- /dev/null
+++ b/exercises/egit/gerrit/change-in-gerrit.png
Binary files differ
diff --git a/exercises/egit/gerrit/code-review-voting.png b/exercises/egit/gerrit/code-review-voting.png
new file mode 100644
index 0000000..d1c04dc
--- /dev/null
+++ b/exercises/egit/gerrit/code-review-voting.png
Binary files differ
diff --git a/exercises/egit/gerrit/commit-changes-with-amend.png b/exercises/egit/gerrit/commit-changes-with-amend.png
new file mode 100644
index 0000000..8a1c99f
--- /dev/null
+++ b/exercises/egit/gerrit/commit-changes-with-amend.png
Binary files differ
diff --git a/exercises/egit/gerrit/commit-changes-with-changeid.png b/exercises/egit/gerrit/commit-changes-with-changeid.png
new file mode 100644
index 0000000..9fc72e7
--- /dev/null
+++ b/exercises/egit/gerrit/commit-changes-with-changeid.png
Binary files differ
diff --git a/exercises/egit/gerrit/configure-push-to-gerrit.txt b/exercises/egit/gerrit/configure-push-to-gerrit.txt
new file mode 100644
index 0000000..b0e443c
--- /dev/null
+++ b/exercises/egit/gerrit/configure-push-to-gerrit.txt
@@ -0,0 +1,52 @@
+== Configure Push to Gerrit
+In this exercise you learn how you configure your local repository for
+the work with Gerrit.
+
+=== Preparation
+Clone the example repository as described in the exercise
+link:../git/clone-the-example-repository.html[Clone the Example
+Repository]. Do a fresh clone and do *not* re-use the clone of the
+example repository that was created during the
+link:../git/index.html[Git Exercises]. The reason for this is that the
+work with Gerrit requires the usage of Change-Id's in the commit
+messages and the commits created during the Git exercises do not have
+Change-Id's. To avoid trouble with missing Change-Id's we recommend to
+clone the repository newly for the Gerrit exercises.
+
+=== Configure the Remote
+When you use Gerrit as a server for the central repository you need to
+do some configuration settings on your local repository.
+
+* When working with Gerrit you normally do not directly push into the
+  branch on the remote repository, but into the review queue. Before
+  you push to Gerrit you have to configure once on your local
+  repository that by default all commits should be pushed for code
+  review.
+* A commit can normally only be pushed to Gerrit if the commit message
+  contains a Change-Id. You can configure the local repository so that
+  EGit always creates a Change-Id automatically.
+* You may want to fetch the review notes from Gerrit (More details in
+  another exercise).
+
+==== Gerrit configuration wizard
+
+Open the node 'Remotes' of your repository in the Git Repositories
+View and choose 'Gerrit Configuration...' from the context menu on the
+'origin' repository.
+
+image:gerrit-configuration.png[Gerrit Configuration]
+
+You can keep the default values in this Wizard page and confirm with
+'Finish':
+
+image:gerrit-configuration-2.png[Gerrit Configuration]
+
+=== Resulting Repository Configuration
+You can check the result in the configuration of the local repository.
+Select 'Properties' from the context menu on the repository node in
+the Git Repositories View.
+
+image:gerrit-configuration-3.png[Gerrit Configuration]
+
+
+link:index.html[Gerrit Exercises]
diff --git a/exercises/egit/gerrit/fetch-from-gerrit-2.png b/exercises/egit/gerrit/fetch-from-gerrit-2.png
new file mode 100644
index 0000000..83f2ffa
--- /dev/null
+++ b/exercises/egit/gerrit/fetch-from-gerrit-2.png
Binary files differ
diff --git a/exercises/egit/gerrit/fetch-from-gerrit-3.png b/exercises/egit/gerrit/fetch-from-gerrit-3.png
new file mode 100644
index 0000000..05e144e
--- /dev/null
+++ b/exercises/egit/gerrit/fetch-from-gerrit-3.png
Binary files differ
diff --git a/exercises/egit/gerrit/fetch-from-gerrit-4.png b/exercises/egit/gerrit/fetch-from-gerrit-4.png
new file mode 100644
index 0000000..ad3e5bd
--- /dev/null
+++ b/exercises/egit/gerrit/fetch-from-gerrit-4.png
Binary files differ
diff --git a/exercises/egit/gerrit/fetch-from-gerrit-5.png b/exercises/egit/gerrit/fetch-from-gerrit-5.png
new file mode 100644
index 0000000..6194793
--- /dev/null
+++ b/exercises/egit/gerrit/fetch-from-gerrit-5.png
Binary files differ
diff --git a/exercises/egit/gerrit/fetch-from-gerrit.png b/exercises/egit/gerrit/fetch-from-gerrit.png
new file mode 100644
index 0000000..c622598
--- /dev/null
+++ b/exercises/egit/gerrit/fetch-from-gerrit.png
Binary files differ
diff --git a/exercises/egit/gerrit/fetch-from-upstream.png b/exercises/egit/gerrit/fetch-from-upstream.png
new file mode 100644
index 0000000..8f1cee3
--- /dev/null
+++ b/exercises/egit/gerrit/fetch-from-upstream.png
Binary files differ
diff --git a/exercises/egit/gerrit/file-list-2.png b/exercises/egit/gerrit/file-list-2.png
new file mode 100644
index 0000000..0c89f92
--- /dev/null
+++ b/exercises/egit/gerrit/file-list-2.png
Binary files differ
diff --git a/exercises/egit/gerrit/file-list.png b/exercises/egit/gerrit/file-list.png
new file mode 100644
index 0000000..5503856
--- /dev/null
+++ b/exercises/egit/gerrit/file-list.png
Binary files differ
diff --git a/exercises/egit/gerrit/gerrit-configuration-2.png b/exercises/egit/gerrit/gerrit-configuration-2.png
new file mode 100644
index 0000000..85a810c
--- /dev/null
+++ b/exercises/egit/gerrit/gerrit-configuration-2.png
Binary files differ
diff --git a/exercises/egit/gerrit/gerrit-configuration-3.png b/exercises/egit/gerrit/gerrit-configuration-3.png
new file mode 100644
index 0000000..6fe9af6
--- /dev/null
+++ b/exercises/egit/gerrit/gerrit-configuration-3.png
Binary files differ
diff --git a/exercises/egit/gerrit/gerrit-configuration.png b/exercises/egit/gerrit/gerrit-configuration.png
new file mode 100644
index 0000000..22275a1
--- /dev/null
+++ b/exercises/egit/gerrit/gerrit-configuration.png
Binary files differ
diff --git a/exercises/egit/gerrit/history-view.png b/exercises/egit/gerrit/history-view.png
new file mode 100644
index 0000000..c7b2ff5
--- /dev/null
+++ b/exercises/egit/gerrit/history-view.png
Binary files differ
diff --git a/exercises/egit/gerrit/hudson-voter-voting.png b/exercises/egit/gerrit/hudson-voter-voting.png
new file mode 100644
index 0000000..f554313
--- /dev/null
+++ b/exercises/egit/gerrit/hudson-voter-voting.png
Binary files differ
diff --git a/exercises/egit/gerrit/improve-a-change.txt b/exercises/egit/gerrit/improve-a-change.txt
new file mode 100644
index 0000000..3796d42
--- /dev/null
+++ b/exercises/egit/gerrit/improve-a-change.txt
@@ -0,0 +1,103 @@
+== Improve a Change
+This exercise shows how to improve a change that didn’t pass the code
+review by submitting another patch set. Each (new) patch set is
+another iterative improvement of the change. There could be several
+rounds of improvements (new patch sets) until the change is ready to
+be submitted to the code base.
+
+=== Preparation
+
+* There is a change that was reviewed and needs to be improved.
+* Case-1: you are going to improve your own change.
+* Case-2: you are going to improve a change started by someone else
+  (who is not able to continue working on that change for some
+  reason).
+
+Depending on which case you choose, follow the link:#case-1[Case-1] or
+the link:#case-2[Case-2] exercise. You may also try both exercises.
+
+[[case-1]]
+=== Case-1: Checkout your feature branch from where you pushed the patch set 1
+
+* Make sure that you have a clean working directory. If you have
+  uncommitted changes, commit them or do a hard reset to discard them.
+* Make sure the feature branch is checked-out. If not double click the
+  feature branch to check it out.
++
+image:branch-checkout.png[Branch Checkout]
+
+[[case-2]]
+=== Case-2: Fetch the latest patch set of the change you want to improve
+
+* Make sure that you have a clean working directory. If you have
+  uncommitted changes, commit them or do a hard reset to discard them.
+* To fetch the change that should be improved first note the numerical
+  change ID of it. Look at the URL of the change in the web browser
+  and locate the numerical Change ID:
++
+image:numerical-change-id.png[Numerical Change ID]
++
+In this case it is 127485.
+
+* In Eclipse right-click the Git repository node and choose 'Fetch
+  from Gerrit' from the context menu:
++
+image:fetch-from-gerrit.png[Fetch from Gerrit]
+
+* In the 'Fetch a change from Gerrit' dialog enter the Change ID:
++
+image:fetch-from-gerrit-2.png[Fetch from Gerrit]
++
+Then press 'Ctrl-Space' for auto-completion and choose the first item
+from the list by either pressing 'Enter' or by double clicking the
+item.
++
+image:fetch-from-gerrit-3.png[Fetch from Gerrit]
+
+* Choose the 'Create and checkout a local branch' option and enter a
+  local branch name if you don’t like the default. For example you may
+  name the local branch 'improve-divide-op' if you are going to
+  continue working on the change that provides the divide operation:
++
+image:fetch-from-gerrit-5.png[Fetch from Gerrit]
+
+=== Improving the Change
+
+* From the web browser look at the change and read the comments
+  written by the reviewer(s) and start improving the source code from
+  Eclipse.
+* When done with the improvements, commit the change. Make sure to
+  choose the 'Amend Previous Commit' in the commit dialog:
++
+image:commit-changes-with-amend.png[Commit Changes with Amend]
+
+* *Don’t change* the already existing Change-Id footer! The Change-Id
+  will be used by Gerrit to determine that you are pushing a next
+  patch set for an already existing change.
+* Click 'Commit' to commit your improvement in the local branch.
+
+=== Push the next patch set
+
+* Right-click the Git repository node and select 'Push to Upstream'
+  from the context menu in order to push your commit to Gerrit:
++
+image:push-to-upstream-2.png[Push to Upstream]
+
+* A confirmation dialog pops-up and shows the result of the push:
++
+image:push-confirmation-2.png[Push Confirmation]
+
+* Visit your change in Gerrit Web UI and note that a 'Patch Set 2' was
+  created:
++
+image:patch-set-2.png[Patch Set 2]
+
+* The patch set 2 is ready for code review. Find somebody to review
+  the patch set 2 of your change.
+
+The iterative process of review and providing a next patch set can be
+repeated any number of times until reviewer(s) are satisfied with the
+change and your change achieves highest votes in all voting categories
+('Code-Review' and 'Verified' by default).
+
+link:index.html[Gerrit Exercises]
diff --git a/exercises/egit/gerrit/index.txt b/exercises/egit/gerrit/index.txt
new file mode 100644
index 0000000..0087f8e
--- /dev/null
+++ b/exercises/egit/gerrit/index.txt
@@ -0,0 +1,19 @@
+== Gerrit Exercises
+
+. link:configure-push-to-gerrit.html[Configure Push to Gerrit]
+. link:push-a-change-to-gerrit.html[Push a Change to Gerrit]
+. link:review-a-change.html[Review a Change]
+. link:improve-a-change.html[Improve a Change]
+. link:submit-a-change-to-the-codebase.html[Submit a Change to the
+  Codebase]
+. link:view-gerrit-review-notes.html[View Gerrit Review Notes]
+
+== Gerrit Exercises - PDF Format
+
+. link:configure-push-to-gerrit.pdf[Configure Push to Gerrit]
+. link:push-a-change-to-gerrit.pdf[Push a Change to Gerrit]
+. link:review-a-change.pdf[Review a Change]
+. link:improve-a-change.pdf[Improve a Change]
+. link:submit-a-change-to-the-codebase.pdf[Submit a Change to the
+  Codebase]
+. link:view-gerrit-review-notes.pdf[View Gerrit Review Notes]
diff --git a/exercises/egit/gerrit/inline-comment.png b/exercises/egit/gerrit/inline-comment.png
new file mode 100644
index 0000000..2507b3c
--- /dev/null
+++ b/exercises/egit/gerrit/inline-comment.png
Binary files differ
diff --git a/exercises/egit/gerrit/merged.png b/exercises/egit/gerrit/merged.png
new file mode 100644
index 0000000..cabcef8
--- /dev/null
+++ b/exercises/egit/gerrit/merged.png
Binary files differ
diff --git a/exercises/egit/gerrit/notes.png b/exercises/egit/gerrit/notes.png
new file mode 100644
index 0000000..fb418a3
--- /dev/null
+++ b/exercises/egit/gerrit/notes.png
Binary files differ
diff --git a/exercises/egit/gerrit/numerical-change-id.png b/exercises/egit/gerrit/numerical-change-id.png
new file mode 100644
index 0000000..209f9b7
--- /dev/null
+++ b/exercises/egit/gerrit/numerical-change-id.png
Binary files differ
diff --git a/exercises/egit/gerrit/open-in-commit-viewer.png b/exercises/egit/gerrit/open-in-commit-viewer.png
new file mode 100644
index 0000000..d214420
--- /dev/null
+++ b/exercises/egit/gerrit/open-in-commit-viewer.png
Binary files differ
diff --git a/exercises/egit/gerrit/patch-set-2.png b/exercises/egit/gerrit/patch-set-2.png
new file mode 100644
index 0000000..801fab1
--- /dev/null
+++ b/exercises/egit/gerrit/patch-set-2.png
Binary files differ
diff --git a/exercises/egit/gerrit/publish-comments.png b/exercises/egit/gerrit/publish-comments.png
new file mode 100644
index 0000000..2354140
--- /dev/null
+++ b/exercises/egit/gerrit/publish-comments.png
Binary files differ
diff --git a/exercises/egit/gerrit/push-a-change-to-gerrit.txt b/exercises/egit/gerrit/push-a-change-to-gerrit.txt
new file mode 100644
index 0000000..0c3faed
--- /dev/null
+++ b/exercises/egit/gerrit/push-a-change-to-gerrit.txt
@@ -0,0 +1,62 @@
+== Push a Change to Gerrit
+In this exercise you will learn how to push a change to the Gerrit
+code review system.
+
+=== Preparation
+
+* Make sure you configured the push to Gerrit in your local Git
+  repository as described in the exercise
+  link:configure-push-to-gerrit.html[Configure Push to Gerrit].
+* Create a new local branch starting from the 'origin/master' branch
+  and create one new commit in that branch. Make sure the
+  'Compute Change-Id for Gerrit Code Review' button in the commit
+  dialog is selected when you commit the changes. This will create
+  the 'Change-Id: ...' footer in the commit message which is necessary
+  for the Gerrit Code Review.
++
+image:commit-changes-with-changeid.png[Commit Changes with Change-Id]
++
+'I0000000000000000000000000000000000000000' is just a placeholder for
+the Change-Id. The actual Change-Id will be generated and inserted on
+commit.
++
+image:history-view.png[History View]
+
+=== Pushing to Gerrit
+Right click the Git repository node in the Git Repositories view and
+chose the 'Push to Upstream' command from the context menu:
+
+image:push-to-upstream.png[Push to Upstream]
+
+After the change is pushed the confirmation dialog will appear:
+
+image:push-confirmation.png[Push Confirmation]
+
+From the confirmation dialog we see the URL under which the change is
+exposed in Gerrit. We also see that the numerical ID of the change is
+'127485' in this case.
+
+=== Check your Change in Gerrit
+
+* Copy the link from the confirmation dialog to the clipboard and
+  paste into you web browser
++
+image:change-in-gerrit.png[Change in Gerrit]
+
+* *OR* simply open
+  link:https://<gerrit-host>/#/q/status:open,n,z[Gerrit] in
+  your web browser and find your change in the list of open changes.
+  Usually, it is the one on the top as the entries are sorted by time
+  of last update. Click on the change to get to the change details.
++
+image:change-in-gerrit-2.png[Change in Gerrit]
+
+* Get familiar with the information Gerrit displays on the change
+  page. The change contains one patch set on its creation. A patch set
+  corresponds to one Git commit.
+* Click on a file to see the Side-by-Side diff.
+
+'Q:' Compare the local commit SHA1 and the SHA1 of the Patch Set 1.
+Are they the same?
+
+link:index.html[Gerrit Exercises]
diff --git a/exercises/egit/gerrit/push-confirmation-2.png b/exercises/egit/gerrit/push-confirmation-2.png
new file mode 100644
index 0000000..c5ba07d
--- /dev/null
+++ b/exercises/egit/gerrit/push-confirmation-2.png
Binary files differ
diff --git a/exercises/egit/gerrit/push-confirmation.png b/exercises/egit/gerrit/push-confirmation.png
new file mode 100644
index 0000000..d2ff2b6
--- /dev/null
+++ b/exercises/egit/gerrit/push-confirmation.png
Binary files differ
diff --git a/exercises/egit/gerrit/push-to-upstream-2.png b/exercises/egit/gerrit/push-to-upstream-2.png
new file mode 100644
index 0000000..23db2d2
--- /dev/null
+++ b/exercises/egit/gerrit/push-to-upstream-2.png
Binary files differ
diff --git a/exercises/egit/gerrit/push-to-upstream.png b/exercises/egit/gerrit/push-to-upstream.png
new file mode 100644
index 0000000..2fd650f
--- /dev/null
+++ b/exercises/egit/gerrit/push-to-upstream.png
Binary files differ
diff --git a/exercises/egit/gerrit/review-a-change.txt b/exercises/egit/gerrit/review-a-change.txt
new file mode 100644
index 0000000..f07482c
--- /dev/null
+++ b/exercises/egit/gerrit/review-a-change.txt
@@ -0,0 +1,140 @@
+== Review a Change
+In this exercise you will do a code review in Gerrit.
+
+=== Preparation
+
+* Follow the link:push-a-change-to-gerrit.html[exercise to create an
+  open change in Gerrit].
+
+You can review your own change or a change created by somebody else.
+In practice you will usually review changes of others and others will
+review your changes. Therefore, try to find a change (for
+the 'egit-training' project) not created by you and use it for this
+exercise.
+
+A review of a simple change is usually done only from Gerrit. However,
+for a more complex change you may want to fetch it into your local Git
+repository, build it and look at it from Eclipse.
+
+=== Review the source code changes from Gerrit
+A change consists of one or more patch sets. One patch set corresponds
+to one Git commit. When a change has more than one patch set it is
+only necessary to review the latest patch set! This is an important
+principle in Gerrit to remember.
+
+* Look at the list of files under the latest patch set (patch set 1 in
+  this case). These are the files that were added, modified or deleted
+  within this change.
++
+image:file-list.png[File List]
++
+NOTE: In addition to the files you will also find the
+'Commit Message' in this list. This allows you to
+link:#review-commit-message[comment on the commit message].
+
+* Click the 'Side-by-Side' link of a file to open a page displaying
+  the changes done in this file. The left side shows the old version
+  and the right side shows the new version of the file. The diff is
+  highlighted:
++
+image:side-by-side.png[Side-by-Side]
+
+* Look at every change you see
+* If you want to comment on a source code line just double click it
+  and type in your comment:
++
+image:inline-comment.png[Inline Comment]
+
+* Click on 'Save' in order to save the your comment as draft
++
+NOTE: the comments you create are not yet visible to anybody else but
+you. Only when you publish your comments they will become visible to
+everybody.
+
+* Continue reviewing other files in the same way
+
+[[review-commit-message]]
+=== Review the commit message
+Providing a good commit message is as important as writing good code.
+A good commit message should describe why (the motivation) and not
+what. When months or years later you look at a change in your Git
+history you will easily see what was changed. However, only if the
+commit message was good you will know why this change was made.
+
+Therefore, Gerrit also provides review of the commit message. It is
+done the same way as reviewing a file and the commit message appears
+at the top of the file list:
+
+image:file-list-2.png[File List]
+
+=== Vote and Publish your Comments
+
+* Click on the 'Up to Change' link to go back to the change screen
++
+image:up-to-change.png[Up to Change]
+
+* Click on the 'Review' button
++
+image:review.png[Review]
+
+* Vote in the 'Code Review' category
++
+image:code-review-voting.png[Code Review Voting]
+
+* The voting in the 'Verified' category will be automatically done by
+  the 'HudsonVoter' user, but you may also manually vot ein this
+  category.
++
+image:hudson-voter-voting.png[HudsonVoter Voting]
+
+* Write the cover message and click the on 'Publish Comments' button:
++
+image:publish-comments.png[Publich Comments]
+
+The next chapter shows another possibility which is useful when
+reviewing more complex changes.
+
+=== Fetching the Change into Eclipse
+When a change is more complex you may want to fetch it into your local
+Git repository in order to look at it from Eclispe. In that case you
+may build it locally, debug it etc...
+
+* Make sure that you have a clean working directory. If you have
+  uncommitted changes, commit them or do a hard reset to discard them.
+* To fetch a change first note the numerical change ID of it. Look at
+  the URL of the change in the web browser and locate the numerical
+  Change ID:
++
+image:numerical-change-id.png[Numerical Change ID]
++
+In this case it is 127485.
+
+* In Eclipse right-click the Git repository node and choose 'Fetch
+  from Gerrit' from the context menu:
++
+image:fetch-from-gerrit.png[Fetch from Gerrit]
+
+* In the 'Fetch a change from Gerrit' dialog enter the Change ID:
++
+image:fetch-from-gerrit-2.png[Fetch from Gerrit]
++
+Then press 'Ctrl-Space' for auto-completion and choose the first item
+from the list by either pressing 'Enter' or by double clicking the
+item.
++
+image:fetch-from-gerrit-3.png[Fetch from Gerrit]
+
+* Choose the 'Checkout FETCH_HEAD' option. This will checkout the
+  fetched change but will not create a local branch. This is enough if
+  you are not going to contribute further modifications of the change.
++
+image:fetch-from-gerrit-4.png[Fetch from Gerrit]
+
+Now, you have the change checked out locally and your working tree
+reflects the state the author of the change had when he committed this
+change.
+
+Note that the code review and sharing a change happen before the
+change gets submitted into the main code base.
+
+link:index.html[Gerrit Exercises]
diff --git a/exercises/egit/gerrit/review.png b/exercises/egit/gerrit/review.png
new file mode 100644
index 0000000..af52c9a
--- /dev/null
+++ b/exercises/egit/gerrit/review.png
Binary files differ
diff --git a/exercises/egit/gerrit/side-by-side.png b/exercises/egit/gerrit/side-by-side.png
new file mode 100644
index 0000000..3823bd4
--- /dev/null
+++ b/exercises/egit/gerrit/side-by-side.png
Binary files differ
diff --git a/exercises/egit/gerrit/submit-a-change-to-the-codebase.txt b/exercises/egit/gerrit/submit-a-change-to-the-codebase.txt
new file mode 100644
index 0000000..c09fec3
--- /dev/null
+++ b/exercises/egit/gerrit/submit-a-change-to-the-codebase.txt
@@ -0,0 +1,67 @@
+== Submit a Change to the Codebase
+This exercise shows how to submit a change to the codebase. To be
+submitable a change must have successfully passed the code review,
+which means that:
+
+* it got at least one highest possible vote in all voting categories
+* and that there are no veto votes on any of the voting categories
+
+=== Preparation
+
+* follow the gerrit exercises link:push-a-change-to-gerrit.html[Push a
+  Change to Gerrit] and link:review-a-change.html[Review a Change] to
+  create and review a change
+* you may also complete the gerrit exercise
+  link:improve-a-change.html[Improve a Change], but it is not
+  mandatory
+* make sure your change has highest votes in all review categories and
+  that there are no veto votings in any of the voting categories
+
+=== Submitting the change
+To submit a change click the 'Submit Patch Set n' button on the change
+screen in the Gerrit WebUI:
+
+image:submit.png[Submit]
+
+There are 3 possible outcomes of the Submit action:
+
+==== 1. The change is merged successfully
+If the change merges without any conflicts you will see that the
+status of the change changed to 'Merged'.
+
+image:merged.png[Merged]
+
+==== 2. The change is submitted but the merge is pending
+If the status changed to 'Submitted, Merge Pending' then the change
+depends on another change that is still open (in review). In that case
+the change will be merged automatically once all its dependencies are
+submitted and merged.
+
+==== 3. The submit fails due to merge conflicts
+It may also happen that the submit fails due to merge conflicts. In
+that case you will have to resolve the merge conflicts in your local
+branch and then push another patch set. The steps are:
+
+* Fetch the upstream. This updates the local 'origin/master' branch to
+  its latest state. Follow the git exercise
+  link:../git/fetch-the-latest-state-from-upstream.html[Fetch the
+  Latest State from Upstream].
+* Rebase your feature branch to the 'origin/master'. Follow the git
+  exercise
+  link:../git/merge-rebase-and-resolving-conflicts.html#rebase[
+  Merge, Rebase and Resolving Conflicts (section Rebase)]. You will
+  get conflicts.
+* Follow git exercise
+  link:../git/merge-rebase-and-resolving-conflicts.html#resolve-conflicts[
+  Merge, Rebase and Resolving Conflicts (section Resolve Merge
+  Conflicts)] to resolve the conflicts.
+* Commit using the 'amend' option as described in the gerrit exercise
+  link:improve-a-change.html[Improve a Change].
+* Push to the upstream as described in gerrit exercise
+  link:push-a-change-to-gerrit.html[Push a Change to Gerrit].
+* After that a new patch set is created for this change. The new patch
+  set has again to pass the code review as shown in the gerrit
+  exercise link:review-a-change.html[Review a Change].
+* Submit the change again once it passes the code review
+
+link:index.html[Gerrit Exercises]
diff --git a/exercises/egit/gerrit/submit.png b/exercises/egit/gerrit/submit.png
new file mode 100644
index 0000000..00e55cf
--- /dev/null
+++ b/exercises/egit/gerrit/submit.png
Binary files differ
diff --git a/exercises/egit/gerrit/up-to-change.png b/exercises/egit/gerrit/up-to-change.png
new file mode 100644
index 0000000..989026b
--- /dev/null
+++ b/exercises/egit/gerrit/up-to-change.png
Binary files differ
diff --git a/exercises/egit/gerrit/view-gerrit-review-notes.txt b/exercises/egit/gerrit/view-gerrit-review-notes.txt
new file mode 100644
index 0000000..3a37af3
--- /dev/null
+++ b/exercises/egit/gerrit/view-gerrit-review-notes.txt
@@ -0,0 +1,28 @@
+== View Gerrit Review Notes
+This exercise shows how can view Gerrit review metadata in your local
+Git Repository.
+
+=== Preparation
+You have configured your local Git Repository according to the Gerrit
+exercise link:configure-push-to-gerrit.html[Configure Push to Gerrit].
+This adds a fetch configuration that tells git to fetch the so-called
+git notes when you fetch from upstream.
+
+=== View Review Notes
+
+* Fetch at least once after doing the Gerrit Configuration.
++
+image:fetch-from-upstream.png[Fetch from Upstream]
+
+* Now select 'Open in Commit Viewer' on a commit in the History View.
++
+image:open-in-commit-viewer.png[Open in Commit Viewer]
+
+* In the Commit Viewer you now have an additional tab 'Notes'. Here
+  you see data which was created by Gerrit when the change was
+  submitted:
++
+image:notes.png[Notes]
+
+
+link:index.html[Gerrit Exercises]
diff --git a/exercises/egit/git/Makefile b/exercises/egit/git/Makefile
new file mode 100644
index 0000000..b835b09
--- /dev/null
+++ b/exercises/egit/git/Makefile
@@ -0,0 +1,2 @@
+TARGET = ../../../target/exercises/egit/git
+include ../../Makefile-common
diff --git a/exercises/egit/git/amend-dialog.png b/exercises/egit/git/amend-dialog.png
new file mode 100644
index 0000000..a668c6b
--- /dev/null
+++ b/exercises/egit/git/amend-dialog.png
Binary files differ
diff --git a/exercises/egit/git/annotation-info.png b/exercises/egit/git/annotation-info.png
new file mode 100644
index 0000000..258da44
--- /dev/null
+++ b/exercises/egit/git/annotation-info.png
Binary files differ
diff --git a/exercises/egit/git/annotations.png b/exercises/egit/git/annotations.png
new file mode 100644
index 0000000..e39598c
--- /dev/null
+++ b/exercises/egit/git/annotations.png
Binary files differ
diff --git a/exercises/egit/git/branch-selection.png b/exercises/egit/git/branch-selection.png
new file mode 100644
index 0000000..8f17a3c
--- /dev/null
+++ b/exercises/egit/git/branch-selection.png
Binary files differ
diff --git a/exercises/egit/git/change-a-series-of-commits.txt b/exercises/egit/git/change-a-series-of-commits.txt
new file mode 100644
index 0000000..da4ffa6
--- /dev/null
+++ b/exercises/egit/git/change-a-series-of-commits.txt
@@ -0,0 +1,72 @@
+== Change a series of commits
+In this exercise you learn how you can rewrite the local history
+before you share it with others. After you have committed locally you
+can still change all commits in your local feature branch.
+
+=== Preparation
+Follow the exercise link:merge-rebase-and-resolving-conflicts.html[
+Merge, Rebase and Resolving Conflicts]. After the rebase you end up
+with a branch which is two commits ahead of the remote branch
+'origin/master', it's the local 'master' branch in the screenshot
+below. Now you realize that you want to change the first commit and
+keep the second one on top of the changed commit.
+
+image:history-view-8.png[History View]
+
+=== Change the first commit
+
+* Create a new branch that points to the commit you want to change, in
+  the screenshot below it's the 'Add multiply operation' commit. Use
+  'Create Branch' to create a new branch, e.g. named 'newMaster'.
++
+image:history-view-9.png[History View]
++
+image:history-view-10.png[History View]
+
+* Edit the files in the workspace, e.g. add a class comment for the
+  'Multiply' class.
+* Now create a new commit with the combined changes of your first
+  commit and your current changes:
+** Select your project in the Package Explorer and select
+   'Team > Commit' or click 'Commit' in the Git Toolbar.
+** Press the 'Amend' button as shown below:
++
+image:commit-changes-with-amend-2.png[Commit Changes with Amend]
+
+** Click the Commit button
+
+* Now your history should look like this:
++
+image:history-view-11.png[History View]
++
+Note that the first version of your changed commit is still there, but
+your branch points now to the new one. Git always creates new commits
+when you rewrite history, it does not change old ones (from time to
+time it removes commits which are not reachable by a reference, e.g.
+a branch or a tag).
+
+=== Cherry-pick the rest
+
+* Select 'Cherry Pick' on the other commit. This will add the
+difference of this commit compared to its parent on top of your new
+commit.
++
+image:cherry-pick.png[Cherry Pick]
+
+* You may have to resolve conflicts
++
+image:cherry-pick-conflicts.png[Cherry Pick Conflicts]
++
+In that case, edit the conflicting files, add the changes and commit
+like in the exercise link:merge-rebase-and-resolving-conflicts.html[
+Merge, Rebase and Resolving Conflicts].
+
+* The result should look like this:
++
+image:history-view-12.png[History View]
+
+If you want to change more than one commit in a series git offers the
+powerful tool 'git rebase --interactive'. This is not yet available in
+EGit, but can be used from the Git commandline.
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/change-a-series-of-commits.txt~ b/exercises/egit/git/change-a-series-of-commits.txt~
new file mode 100644
index 0000000..997ea4f
--- /dev/null
+++ b/exercises/egit/git/change-a-series-of-commits.txt~
@@ -0,0 +1,72 @@
+== Change a series of commits
+In this exercise you learn how you can rewrite the local history
+before you share it with others. After you have committed locally you
+can still change all commits in your local feature branch.
+
+=== Preparation
+Follow the exercise link:merge-rebase-and-resolving-conflicts.html[
+Merge, Rebase and Resolving Conflicts]. After the rebase you end up
+with a branch which is two commits ahead of the remote branch
+'origin/master', it's the local 'master' branch in the screenshot
+below. Now you realize that you want to change the first commit and
+keep the second one on top of the changed commit.
+
+image:history-view-8.png[History View]
+
+=== Change the first commit
+
+* Create a new branch that points to the commit you want to change, in
+  the screenshot below it's the 'Add multiply operation' commit. Use
+  'Create Branch' to create a new branch, e.g. named 'newMaster'.
++
+image:history-view-9.png[History View]
++
+image:history-view-10.png[History View]
+
+* Edit the files in the workspace, e.g. add a class comment for the
+  'Multiply' class.
+* Now create a new commit with the combined changes of your first
+  commit and your current changes:
+** Select your project in the Package Explorer and select
+   'Team > Commit' or click 'Commit' in the Git Toolbar.
+** Press the 'Amend' button as shown below:
++
+image:commit-changes-with-amend-2.png[Commit Changes with Amend]
+
+** Click the Commit button
+
+* Now your history should look like this:
++
+image:history-view-11.png[History View]
++
+Note that the first version of your changed commit is still there, but
+your branch points now to the new one. Git always creates new commits
+when you rewrite history, it does not change old ones (from time to
+time it removes commits which are not reachable by a reference, e.g.
+a branch or a tag).
+
+=== Cherry-pick the rest
+
+* Select 'Cherry Pick' on the other commit. This will add the
+difference of this commit compared to its parent on top of your new
+commit.
++
+image:cherry-pick.png[Cherry Pick]
+
+* You may have to resolve conflicts
++
+image:cherry-pick-conflict.png[Cherry Pick Conflict]
++
+In that case, edit the conflicting files, add the changes and commit
+like in the exercise link:merge-rebase-and-resolving-conflicts.html[
+Merge, Rebase and Resolving Conflicts].
+
+* The result should look like this:
++
+image:history-view-12.png[History View]
+
+If you want to change more than one commit in a series git offers the
+powerful tool 'git rebase --interactive'. This is not yet available in
+EGit, but can be used from the Git commandline.
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/cherry-pick-conflicts.png b/exercises/egit/git/cherry-pick-conflicts.png
new file mode 100644
index 0000000..826955a
--- /dev/null
+++ b/exercises/egit/git/cherry-pick-conflicts.png
Binary files differ
diff --git a/exercises/egit/git/cherry-pick.png b/exercises/egit/git/cherry-pick.png
new file mode 100644
index 0000000..8795a5f
--- /dev/null
+++ b/exercises/egit/git/cherry-pick.png
Binary files differ
diff --git a/exercises/egit/git/clone-git-repository.png b/exercises/egit/git/clone-git-repository.png
new file mode 100644
index 0000000..b121119
--- /dev/null
+++ b/exercises/egit/git/clone-git-repository.png
Binary files differ
diff --git a/exercises/egit/git/clone-the-example-repository.txt b/exercises/egit/git/clone-the-example-repository.txt
new file mode 100644
index 0000000..c12c095
--- /dev/null
+++ b/exercises/egit/git/clone-the-example-repository.txt
@@ -0,0 +1,93 @@
+== Clone the example repository and import projects into Eclipse
+
+Open the 'Git Repositories' view:
+'Window > Show View > Other > Git > Git Repositories'
+
+image:git-repositories-view.png[Git repositories view]
+
+Click 'Clone a Git repository' in the git repositories view.
+Enter the following URI in the URI field:
+
+====
+  ssh://<your-user-id>@<gerrit-host>:29418/training/calculator
+====
+
+image:clone-git-repository.png[Clone Git repository]
+
+NOTE: Do not enter anything into the password field, an extra dialog comes up
+if the SSH passphrase is required.
+
+Click 'Next'.
+
+If asked, accept the authenticity of Gerrit host. You will have to
+accept it only once, on the first access.
+
+You should see some branch names in the next dialog. Make sure all shown
+branches are selected:
+
+image:branch-selection.png[Branch selection]
+
+Click 'Next'. In the 'Directory' field, choose a path where to store the local
+repository.
+
+NOTE: The default path can be configured in 'Preferences > Team > Git' in the
+field 'Default Repository folder'
+
+Make sure the 'Import all existing projects after clone finishes' checkbox is
+selected and click 'Finish':
+
+image:finish-clone.png[Finish Git clone]
+
+=== Get Familiar with the Example Project
+
+The example repository contains two projects:
+
+* 'org.eclipse.example.calc' - contains a simple calculator
+* 'org.eclipse.example.calc.test' - contains unit tests
+
+Both projects contain launch configurations. Use them to start the calculator
+or run the unit tests.
+
+NOTE: For Mac there is a specific launch configuration with the 'Mac' in the
+name.
+
+=== Get Familiar with Eclispe EGit
+
+==== EGit Documentation
+The EGit user guide is bundled with the EGit feature, invoke it via 'Help > Help
+Contents > EGit Documentation'.
+
+==== Git Workbench Toolbar and Menu
+In order to simplify usage of the most frequently used Git actions the Git
+Command Group can be activated to show a Git Workbench Toolbar and/or Menu.
+
+* go in the menu to 'Window' > 'Customize perspective...'
+* in the tab 'Command Groups Availability' click 'Git', this will enable both
+  the Git workbench toolbar and menu
+* in the tabs 'Toolbar Visibility and Menu Visibility' you may configure which
+  actions should appear in the Git Workbench toolbar and menu
+
+image:git-workbench-toolbar-menu-1.png[]
+image:git-workbench-toolbar-menu-2.png[]
+
+
+==== Git Repositories View
+To get an overview on your git repositories open the 'Git Repositories View'.
+Select the example project and click 'Show in > Git Repositories'.
+
+image:git-repositories-view-2.png[Git repositories view]
+
+Under 'Remotes > origin' you see the fetch and the just created push
+configuration. To see the details select the URL and click in the context menu
+on 'Show In > Properties'. To see the complete repository configuration, click
+the same menu entry on the repository node.
+
+==== History View
+To browse the history of the repository, open the History View: On the
+repository node in the Git Repositories View click 'Show In > History'. Best you
+arrange the Repositories View and the History View next to each other, as shown
+below.
+
+image:history-view.png[History view]
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/commit-changes-with-amend-2.png b/exercises/egit/git/commit-changes-with-amend-2.png
new file mode 100644
index 0000000..745607a
--- /dev/null
+++ b/exercises/egit/git/commit-changes-with-amend-2.png
Binary files differ
diff --git a/exercises/egit/git/commit-changes-with-amend.png b/exercises/egit/git/commit-changes-with-amend.png
new file mode 100644
index 0000000..e06ca5b
--- /dev/null
+++ b/exercises/egit/git/commit-changes-with-amend.png
Binary files differ
diff --git a/exercises/egit/git/commit-changes.png b/exercises/egit/git/commit-changes.png
new file mode 100644
index 0000000..2c5b43d
--- /dev/null
+++ b/exercises/egit/git/commit-changes.png
Binary files differ
diff --git a/exercises/egit/git/commit-details.png b/exercises/egit/git/commit-details.png
new file mode 100644
index 0000000..88170d8
--- /dev/null
+++ b/exercises/egit/git/commit-details.png
Binary files differ
diff --git a/exercises/egit/git/commit-dialog.png b/exercises/egit/git/commit-dialog.png
new file mode 100644
index 0000000..6925416
--- /dev/null
+++ b/exercises/egit/git/commit-dialog.png
Binary files differ
diff --git a/exercises/egit/git/conflict-markers-2.png b/exercises/egit/git/conflict-markers-2.png
new file mode 100644
index 0000000..2d49dd0
--- /dev/null
+++ b/exercises/egit/git/conflict-markers-2.png
Binary files differ
diff --git a/exercises/egit/git/conflict-markers.png b/exercises/egit/git/conflict-markers.png
new file mode 100644
index 0000000..3b75939
--- /dev/null
+++ b/exercises/egit/git/conflict-markers.png
Binary files differ
diff --git a/exercises/egit/git/conflicts-in-staging-view.png b/exercises/egit/git/conflicts-in-staging-view.png
new file mode 100644
index 0000000..a84eb1d
--- /dev/null
+++ b/exercises/egit/git/conflicts-in-staging-view.png
Binary files differ
diff --git a/exercises/egit/git/create-branch-2.png b/exercises/egit/git/create-branch-2.png
new file mode 100644
index 0000000..b9f4e87
--- /dev/null
+++ b/exercises/egit/git/create-branch-2.png
Binary files differ
diff --git a/exercises/egit/git/create-branch-3.png b/exercises/egit/git/create-branch-3.png
new file mode 100644
index 0000000..1b6eb77
--- /dev/null
+++ b/exercises/egit/git/create-branch-3.png
Binary files differ
diff --git a/exercises/egit/git/create-branch-dialog.png b/exercises/egit/git/create-branch-dialog.png
new file mode 100644
index 0000000..60ab98e
--- /dev/null
+++ b/exercises/egit/git/create-branch-dialog.png
Binary files differ
diff --git a/exercises/egit/git/create-branch-from-history-view.png b/exercises/egit/git/create-branch-from-history-view.png
new file mode 100644
index 0000000..7af4be0
--- /dev/null
+++ b/exercises/egit/git/create-branch-from-history-view.png
Binary files differ
diff --git a/exercises/egit/git/create-branch-from-repositories-view.png b/exercises/egit/git/create-branch-from-repositories-view.png
new file mode 100644
index 0000000..04adbdf
--- /dev/null
+++ b/exercises/egit/git/create-branch-from-repositories-view.png
Binary files differ
diff --git a/exercises/egit/git/create-branch.png b/exercises/egit/git/create-branch.png
new file mode 100644
index 0000000..069900c
--- /dev/null
+++ b/exercises/egit/git/create-branch.png
Binary files differ
diff --git a/exercises/egit/git/develop-a-feature.txt b/exercises/egit/git/develop-a-feature.txt
new file mode 100644
index 0000000..10c5e08
--- /dev/null
+++ b/exercises/egit/git/develop-a-feature.txt
@@ -0,0 +1,79 @@
+== Develop a Feature/Bug Fix
+
+In this exercise you will learn how to develop a new feature using EGit.
+We recommend to use a new local branch for each new change (feature or
+bug fix).
+
+=== Create a local feature branch
+The development of a new feature (or bug-fix) should normally only depend on
+the submitted state of the project (and not depend on pending changes that
+might or might not pass the code review). This is why every new feature or
+bug-fix should be developed in isolation on its own branch which is usually
+created based on the latest state of the master branch available on the server
+(this is the remote tracking branch 'origin/master' in your local clone).
+
+Go to the 'Git Repositories View'
+
+Select the remote tracking branch 'origin/master' under 'repository > Branches
+> Remote Tracking' and click 'Create Branch...'
+
+image:create-branch.png[Create branch]
+
+In the new branch dialog:
+
+* enter a name for the local feature branch into the 'Branch Name' field (this
+  is just a local name that is not exposed to anybody else)
+* set the 'Pull Strategy' to 'Rebase'
+* keep 'Checkout new branch' selected
+* confirm the dialog by clicking on 'Finish'
+
+image:create-branch-dialog.png[Create new branch]
+
+This creates and checks out the new branch:
+
+image:new-branch-checked-out.png[New branch checked out]
+
+=== Develop the feature
+Simply start editing the source code and implement the feature. The example
+project implements a simple calculator, you may want to add an operation.
+Create a new class 'Divide.java' in the package
+'org.eclipse.example.calc.internal.operations' that implements the interface
+'org.eclipse.example.calc.BinaryOperation' and add a corresponding line to
+the 'Calculator.setupDefaultOperations'.
+
+You may also decide to do something else like polish the SWT or Swing UI.
+
+=== Test your feature
+Run the unit tests. To keep the tutorial setup simple there are only unit tests
+for the logic but no UI tests.
+
+=== Commit your changes locally
+Now you want to create a new version of the local repository in your current
+feature branch containing your changes. This is called 'commit'.
+
+There are two ways to perform a commit: with the 'Commit Dialog' or from the
+'Staging View'. In this exercise we will use the commit dialog.  Select your
+project in the 'Package Explorer' and select 'Team > Commit' or click 'Commit'
+in the 'Git Toolbar'
+
+image:team-commit.png[Commit]
+
+
+In the 'Commit Changes' dialog:
+
+* Enter a commit message (explaining why the change was done is more important
+  than what was done since this can anyway be seen from the file diffs)
+* Verify that 'Author' and 'Committer' contain both your full name and your
+  correct e-mail address in the following format: 'John Doe <john.doe@example.org>'
+
+NOTE: If author and committer are not preset correctly you need to change the
+Git configuration parameters 'user.name' and/or 'user.email'. In this case
+cancel the dialog and open 'Preferences > Team > Git > Configuration > User
+Settings' and correct the values for 'user.name' and 'user.email'.
+
+* Select all files that you want to commit
+* Click 'Commit'. As result your changes are committed in your *local* repository
+
+image:commit-dialog.png[Commit dialog]
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/develop-feature-use-staging-view.txt b/exercises/egit/git/develop-feature-use-staging-view.txt
new file mode 100644
index 0000000..87f8402
--- /dev/null
+++ b/exercises/egit/git/develop-feature-use-staging-view.txt
@@ -0,0 +1,58 @@
+== Develop Another Feature and Use Staging View
+In this exercise you learn how work on multiple features in parallel. You will
+also get used to the Git Staging view.
+
+=== Create another local Feature Branch and check it out
+When you develop features/bug-fixes in parallel make sure you develop them in
+different branches. Make sure to set the starting point of these branches
+correctly.  Right-click on your Project and select 'Team > Switch to > New
+branch'. Select as 'Source ref' the remote tracking branch
+'refs/remotes/origin/master' and type into 'Branch name' the name of the new
+branch 'addPower'. Check 'Checkout new branch' and press 'Finish'. This will
+create and checkout a new branch which starts where the remote tracking branch
+'refs/remotes/origin/master' points to.
+
+image:create-branch-2.png[Create branch]
+
+=== Develop the new feature
+Develop a 'Power' class similar to the 'Plus' class in the package
+'org.eclipse.example.calc.internal.operations' in project
+'org.eclipse.example.calc'. Don't forget to register the new class in the
+'Calculator.setupDefaultOperations()'.
+
+=== Do a modification you don't want to commit
+Sometimes you want to locally change a file but don't want this modification to
+be included in the next commit. E.g. certain project modifications are
+important to you but others shouldn't see them. To simulate this right-click on
+your project and select 'Properties > FindBugs' and select the button 'Run
+automatically' (only available if FindBugs is installed in your Eclipse).
+
+=== Open the Git Staging view and inspect the status
+Open the staging view by selecting 'Window > Show View > Other… > Git Staging'.
+This view presents which files you have touched and which files will be in the
+next commit. 'Unstaged Changes' lists those changes which you have done locally
+but which you have not yet added to the index. 'Staged Changes' list those
+changes which you already have added to the index. You can drag and drop files
+from one area to the other.
+
+Git Staging view should list three files '.project', 'Calculator.java' and
+'Power.java'. Drag only 'Calculator.java' and 'Power.java' to 'Staged changes'.
+Double-click on '.project' to inspect which changes you have done.
+
+image:staging-view.png[Staging view]
+
+Drag and drop 'Calculator.java' and 'Power.java' to the 'Staged Changes' area
+to mark that they should be included in the next commit.
+
+image:staging-view-2.png[Staging view]
+
+=== Commit your change
+In Git Staging View enter a commit message in the 'Commit message' field and
+press the 'Commit' button near the top-right corner of the view.
+
+=== Cleanup
+After inspecting your change to '.project' you decide that you don't want this
+change anymore. Revert your change by right-clicking on the '.project' file in
+'Git Staging View' and select 'Replace with File in Git Index'.
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/fast-forward-merge.png b/exercises/egit/git/fast-forward-merge.png
new file mode 100644
index 0000000..0502209
--- /dev/null
+++ b/exercises/egit/git/fast-forward-merge.png
Binary files differ
diff --git a/exercises/egit/git/fetch-from-upstream-in-git-toolbar.png b/exercises/egit/git/fetch-from-upstream-in-git-toolbar.png
new file mode 100644
index 0000000..5aeded3
--- /dev/null
+++ b/exercises/egit/git/fetch-from-upstream-in-git-toolbar.png
Binary files differ
diff --git a/exercises/egit/git/fetch-from-upstream.png b/exercises/egit/git/fetch-from-upstream.png
new file mode 100644
index 0000000..4efe4a9
--- /dev/null
+++ b/exercises/egit/git/fetch-from-upstream.png
Binary files differ
diff --git a/exercises/egit/git/fetch-results-up-to-date.png b/exercises/egit/git/fetch-results-up-to-date.png
new file mode 100644
index 0000000..9b986ed
--- /dev/null
+++ b/exercises/egit/git/fetch-results-up-to-date.png
Binary files differ
diff --git a/exercises/egit/git/fetch-results.png b/exercises/egit/git/fetch-results.png
new file mode 100644
index 0000000..005f9cb
--- /dev/null
+++ b/exercises/egit/git/fetch-results.png
Binary files differ
diff --git a/exercises/egit/git/fetch-the-latest-state-from-upstream.txt b/exercises/egit/git/fetch-the-latest-state-from-upstream.txt
new file mode 100644
index 0000000..db1a6a6
--- /dev/null
+++ b/exercises/egit/git/fetch-the-latest-state-from-upstream.txt
@@ -0,0 +1,38 @@
+== Fetch the latest state from upstream
+In this exercise you will learn how to fetch the latest state from
+upstream. Fetching the latest state will update the remote tracking
+branch(es) in your local repository. It will not try to change any of
+your local branches or your working tree.
+
+Before starting to develop a feature or doing a bug-fix you should
+fetch the latest state from the central repository. This will update
+the remote tracking branch 'origin/master' which will be the base
+for your local changes.
+
+* Go to the Git Repositories View
+* Select your repository and click 'Fetch from Upstream'
++
+image:fetch-from-upstream.png[Fetch from Upstream]
+
+* Alternatively select the project and click on the 'Fetch changes
+  from upstream' button in the Git toolbar.
++
+image:fetch-from-upstream-in-git-toolbar.png[Fetch from Upstream in
+git Toolbar]
+
+* The "Fetch Results" dialog displays the result of the fetch action
+** If new changes have been fetched it looks like this:
++
+image:fetch-results.png[Fetch Results]
+
+** If you already have the latest state available on the server it
+  shows the message "everything up to date" and the list is empty
++
+image:fetch-results-up-to-date.png[Fetch Results up to Date]
+
+* Now, after the remote tracking branch 'origin/master' is up to date
+  it is a good basis for creating a new local feature branch
+* In the History View the (updated) 'origin/master' branch shows the
+  status of the master branch in the remote repository.
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/finish-clone.png b/exercises/egit/git/finish-clone.png
new file mode 100644
index 0000000..fc1e546
--- /dev/null
+++ b/exercises/egit/git/finish-clone.png
Binary files differ
diff --git a/exercises/egit/git/git-repositories-view-2.png b/exercises/egit/git/git-repositories-view-2.png
new file mode 100644
index 0000000..c53df67
--- /dev/null
+++ b/exercises/egit/git/git-repositories-view-2.png
Binary files differ
diff --git a/exercises/egit/git/git-repositories-view.png b/exercises/egit/git/git-repositories-view.png
new file mode 100644
index 0000000..21d9046
--- /dev/null
+++ b/exercises/egit/git/git-repositories-view.png
Binary files differ
diff --git a/exercises/egit/git/git-workbench-toolbar-menu-1.png b/exercises/egit/git/git-workbench-toolbar-menu-1.png
new file mode 100644
index 0000000..3013c23
--- /dev/null
+++ b/exercises/egit/git/git-workbench-toolbar-menu-1.png
Binary files differ
diff --git a/exercises/egit/git/git-workbench-toolbar-menu-2.png b/exercises/egit/git/git-workbench-toolbar-menu-2.png
new file mode 100644
index 0000000..f864b92
--- /dev/null
+++ b/exercises/egit/git/git-workbench-toolbar-menu-2.png
Binary files differ
diff --git a/exercises/egit/git/history-view-10.png b/exercises/egit/git/history-view-10.png
new file mode 100644
index 0000000..2dd9697
--- /dev/null
+++ b/exercises/egit/git/history-view-10.png
Binary files differ
diff --git a/exercises/egit/git/history-view-11.png b/exercises/egit/git/history-view-11.png
new file mode 100644
index 0000000..3f11acc
--- /dev/null
+++ b/exercises/egit/git/history-view-11.png
Binary files differ
diff --git a/exercises/egit/git/history-view-12.png b/exercises/egit/git/history-view-12.png
new file mode 100644
index 0000000..3a6a012
--- /dev/null
+++ b/exercises/egit/git/history-view-12.png
Binary files differ
diff --git a/exercises/egit/git/history-view-2.png b/exercises/egit/git/history-view-2.png
new file mode 100644
index 0000000..68cc36c
--- /dev/null
+++ b/exercises/egit/git/history-view-2.png
Binary files differ
diff --git a/exercises/egit/git/history-view-3.png b/exercises/egit/git/history-view-3.png
new file mode 100644
index 0000000..c5ac7d6
--- /dev/null
+++ b/exercises/egit/git/history-view-3.png
Binary files differ
diff --git a/exercises/egit/git/history-view-4.png b/exercises/egit/git/history-view-4.png
new file mode 100644
index 0000000..592019f
--- /dev/null
+++ b/exercises/egit/git/history-view-4.png
Binary files differ
diff --git a/exercises/egit/git/history-view-5.png b/exercises/egit/git/history-view-5.png
new file mode 100644
index 0000000..86e9b37
--- /dev/null
+++ b/exercises/egit/git/history-view-5.png
Binary files differ
diff --git a/exercises/egit/git/history-view-6.png b/exercises/egit/git/history-view-6.png
new file mode 100644
index 0000000..c13cd3b
--- /dev/null
+++ b/exercises/egit/git/history-view-6.png
Binary files differ
diff --git a/exercises/egit/git/history-view-7.png b/exercises/egit/git/history-view-7.png
new file mode 100644
index 0000000..32c36ba
--- /dev/null
+++ b/exercises/egit/git/history-view-7.png
Binary files differ
diff --git a/exercises/egit/git/history-view-8.png b/exercises/egit/git/history-view-8.png
new file mode 100644
index 0000000..421097e
--- /dev/null
+++ b/exercises/egit/git/history-view-8.png
Binary files differ
diff --git a/exercises/egit/git/history-view-9.png b/exercises/egit/git/history-view-9.png
new file mode 100644
index 0000000..f92d741
--- /dev/null
+++ b/exercises/egit/git/history-view-9.png
Binary files differ
diff --git a/exercises/egit/git/history-view-buttons.png b/exercises/egit/git/history-view-buttons.png
new file mode 100644
index 0000000..14f0f12
--- /dev/null
+++ b/exercises/egit/git/history-view-buttons.png
Binary files differ
diff --git a/exercises/egit/git/history-view.png b/exercises/egit/git/history-view.png
new file mode 100644
index 0000000..dbe124c
--- /dev/null
+++ b/exercises/egit/git/history-view.png
Binary files differ
diff --git a/exercises/egit/git/history-view.txt b/exercises/egit/git/history-view.txt
new file mode 100644
index 0000000..232d5db
--- /dev/null
+++ b/exercises/egit/git/history-view.txt
@@ -0,0 +1,80 @@
+== History View
+In this exercise you will learn how to use the History View to inspect
+the revision history in a repository.
+
+=== Preparation
+Open the History View on your project by right-clicking on your
+project and selecting 'Show In > History'. You should see the revision
+graph of your repository.
+
+=== How to configure History View to your needs
+This history view displays Author, Date, Commit Message and modified
+files of commits. The History View has quite some options to configure
+which commits are displayed.
+
+image:history-view-6.png[History View]
+
+image:history-view-buttons.png[History View Buttons]
+
+Depending on the use case you may want to ...
+
+a. ... show only those commits which are reachable from the current
+   branch. Hide all commits on other topic branches.
+b. ... see only those commits which changed the selected resource
+   (file, project, subfolder) or it’s children. E.g. display only
+   those commits which touched the selected java file. The current
+   selection is shown in the top right corner of the History view.
+c. ... see only those commits which changed anything in the parent
+   folder of the selected resource (file, project, subfolder) or it’s
+   children. E.g. display only those commits which changed the same
+   package as the selected java source.
+d. ... see only those commits which changed anything in the same
+   project as the selected resource or it’s children. Used when you
+   are working in a repository which contains multiple projects.
+e. ... don’t filter at all. Show all commits of the current repository
+
+The ptions b., c. and d. are tied to the currently selected resource.
+Button g. allows that the history view automatically updates when you
+change the selection.
+
+TIP: If you got lost with the different filters and the history
+doesn’t show what you expect, set it back to show everything.
+Therefore make sure that 'Show all branches and tags' (a) is turned on
+and 'Show all changes in repository' (e) is selected.
+
+=== Searching for Commits
+Turn on 'Show Find toolbar' (f) and type in a search string in the
+'Find' field. You can select where to search this string (in author or
+committer name, commit message, ID of the change. The found commits
+are highlighted. You can combine this search with the filters
+explained above.
+
+=== Exercises
+With the help of filters and search find out ...
+* ... which commits have been done to package
+  'org.eclipse.example.calc.internal'
+* ... who has done commit '92f83b4af8ef307e...' and which files have
+  been touched in this commit
+* ... how many branches are known which have commits changing
+  'Calculator.java'
+
+=== Actions on Commits
+If you double-click on a file touched by a commit in the History View
+you will get an editor with the content of that file in that commit.
+If you turn on 'Compare Mode' (h) then a compare view opens which
+compares the state of the file during that commit to the state in the
+previous commit. This tells which lines have been changed by a certain
+commit.
+
+Once you have selected a commit in the History View the context menu
+offers a lot of operations you can do on a commit.
+
+* Create a new branch starting from the commit with id
+  '51101ae160c684...'
+* Compare commit '92f83b4af8e...' with the second last commit on your
+  branch. Which files are different in these two commits?
+* Inspect commit 'a8c0e743721d81072de...' in the Commit Viewer. Get a
+  single list of all modifications done by this commit by switching to
+  the Diff pane in Commit Viewer.
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/index.txt b/exercises/egit/git/index.txt
new file mode 100644
index 0000000..f62cdcd
--- /dev/null
+++ b/exercises/egit/git/index.txt
@@ -0,0 +1,31 @@
+== Git Exercises
+
+. link:clone-the-example-repository.html[Clone the example repository and import projects into Eclipse]
+. link:develop-a-feature.html[Develop a Feature/Bug Fix]
+. link:develop-feature-use-staging-view.html[Develop Another Feature and Use Staging View]
+. link:work-on-branches-in-parallel.html[Work on branches in parallel]
+. link:fetch-the-latest-state-from-upstream.html[Fetch The Latest
+  State From Upstream]
+. link:merge-rebase-and-resolving-conflicts.html[Merge, Rebase and
+  resolving Conflicts]
+. link:history-view.html[History View]
+. link:reset-branch-to-a-previous-state.html[Reset branch to a
+  previous state]
+. link:change-a-series-of-commits.html[Change a series of commits]
+. link:use-the-git-blame-feature.html[Use the 'git blame' feature]
+
+== Git Exercises - PDF Format
+
+. link:clone-the-example-repository.pdf[Clone the example repository and import projects into Eclipse]
+. link:develop-a-feature.pdf[Develop a Feature/Bug Fix]
+. link:develop-feature-use-staging-view.pdf[Develop Another Feature and Use Staging View]
+. link:work-on-branches-in-parallel.pdf[Work on branches in parallel]
+. link:fetch-the-latest-state-from-upstream.pdf[Fetch The Latest
+  State From Upstream]
+. link:merge-rebase-and-resolving-conflicts.pdf[Merge, Rebase and
+  resolving Conflicts]
+. link:history-view.pdf[History View]
+. link:reset-branch-to-a-previous-state.pdf[Reset branch to a
+  previous state]
+. link:change-a-series-of-commits.pdf[Change a series of commits]
+. link:use-the-git-blame-feature.pdf[Use the 'git blame' feature]
diff --git a/exercises/egit/git/merge-2.png b/exercises/egit/git/merge-2.png
new file mode 100644
index 0000000..eedab3d
--- /dev/null
+++ b/exercises/egit/git/merge-2.png
Binary files differ
diff --git a/exercises/egit/git/merge-mode.png b/exercises/egit/git/merge-mode.png
new file mode 100644
index 0000000..e2180c8
--- /dev/null
+++ b/exercises/egit/git/merge-mode.png
Binary files differ
diff --git a/exercises/egit/git/merge-rebase-and-resolving-conflicts.txt b/exercises/egit/git/merge-rebase-and-resolving-conflicts.txt
new file mode 100644
index 0000000..58bbb05
--- /dev/null
+++ b/exercises/egit/git/merge-rebase-and-resolving-conflicts.txt
@@ -0,0 +1,194 @@
+== Merge, Rebase and resolving Conflicts
+In this exercise you will learn how to combine the work done in
+different branches and how to resolve the conflicts which can occur
+during that process.
+
+=== Preparation
+Follow exercise 2, link:develop-a-feature.html[Develop a feature/bug fix],
+to create a commit on a feature branch based on the remote tracking
+branch 'origin/master'.
+
+=== Create a Conflicting commit
+You may skip this step if you have already created conflicting changes
+in the previous exercises. This is the case if you touched exactly the
+same line of the same file in different feature branches. If this is
+not the case please do the following:
+
+* Create a new local branch based on the remote tracking branch
+  'origin/master'
+* You may create the new branch from the History View:
+** Select the project, then click Show 'In > History'
+   (Some views, e.g. in the Java EE-Perspective, do not have this
+   shortcut, in this case use 'Team > Show in History')
+** In the History View click all toggle buttons as shown in the
+   screenshot (Link with Editor and Selection, Show all changes in
+   repository containing the selected resources, Compare Mode,
+   Show all Branches and Tags)
++
+image:history-view-2.png[History View]
+
+** Select 'Create Branch...' from the context menu on the commit where
+   'origin/master' points to
++
+image:create-branch-from-history-view.png[Create Branch from History View]
+
+* Or you may do that from the Repositories View:
++
+Select the remote tracking branch 'origin/master' and click 'Create
+Branch...'.
++
+image:create-branch-from-repositories-view.png[Create Branch from Repositories View]
+
+* Do a different change in the same class on the same line as in the
+  other branch (e.g. you may add a class 'Multiply' and add a
+  corresponding line to method 'setupDefaultOperations' in the
+  'Calculator' class) and commit this change.
++
+image:history-view-4.png[History View]
+
+=== Merge the feature branches
+Now you would like to have both new features in the master branch.
+One possibility to achieve that is to merge the branches into the
+master branch, one after the other. Later in this exercise you will
+learn another way, link:#rebase[rebasing].
+
+==== Trigger the first merge from the history view
+
+* Ensure that you have checked out the branch 'master' where you want
+  to have the merged state, i.e. where the merge commit will be
+  created, either by double clicking in the Repositories View, or by
+  selecting 'Checkout' in the History View, or by using
+  'Team > Switch To > master', or using the 'Checkout' button in the
+  Git tool bar.
+* In the History View, select 'Merge' in the context menu of the
+  'addDivideOperation' branch. This will merge the content of the
+  'addDivdeOperation' branch into the 'master' branch. Since there
+  was no work done on the 'master' branch and 'addDivideOperation'
+  points to a successor commit of the commit in 'master' there is not
+  much to do. Git simply advances the 'master' branch to the same
+  commit as the 'addDivideOperation' branch. Inspect this in the
+  History View.
++
+image:merge.png[Merge]
++
+image:fast-forward-merge.png[Fast Forward Merge]
+
+==== Trigger the second merge
+* In the History View, select 'Merge' in the context menu of the
+  branch which contains the conflicting commit. This will merge the
+  content of this branch into the 'master' branch. This time expect
+  that the merge operation ends with conflicts.
++
+image:merge-2.png[Merge]
++
+image:merge-with-conflicts.png[Merge with Conflicts]
+
+[[resolve-conflicts]]
+==== Resolving merge conflicts
+If a merge generates conflicts the repository is in a special state.
+The conflicts have to be resolved until normal work can go on.
+
+You can find the conflicting files by the conflict decorator in the
+package explorer:
+
+image:conflict-markers.png[Conflict Markers]
+
+If there are many conflicts it may be easier to find them in the Git
+Staging View:
+
+image:conflicts-in-staging-view.png[Conflicts in Staging View]
+
+* If you open the conflicting file in an editor you will find the
+conflict markers there. You can directly edit the file here.
++
+image:conflict-markers-2.png[Conflict Markers]
+
+* You may use the Merge tool to resolve the conflicts:
++
+'Select Team > Merge Tool'. You will see a dialog where you can
+configure the initial state of the left hand side of the editor.
+Which one you choose depends on your preference. In the first case
+you’ll already get the state which was merged by git, in the second
+case you get the version before the merge operation. Thus the first
+option is useful if git could already merge most of the changes
+automatically and only a small number of conflicts is left. With the
+second option will get a better overview of the changes in both
+branches.
++
+image:merge-mode.png[Merge Mode]
++
+image:merge-tool.png[Merge Tool]
++
+Edit the left side until you are happy with the change and save.
++
+image:merge-tool-resolved-conflict.png[Merge Tool with resolved conflict]
+
+* Now in the Package Explorer select 'Team > Add' on the files which
+  had conflicts. When you have done it for all such files the
+  repository state changes from 'Conflicts' to 'Merged'. You can also
+  use the Git Staging View to do this in one step for all files by
+  drag and drop.
+* Select 'Team > Commit' or press the 'Commit' button in the Git
+  Staging View. Note that there is already a commit message proposed
+  by Git. Leave it as it is (if you want to push the commit to Gerrit
+  a Change-Id line must be included into the commit message, not
+  needed for this exercise).
+
+=== Undo merging with Reset
+After you have done a merge as described above assume that you do not
+want the merge commit in your branch anymore. You can easily undo the
+merge with the Reset operation. (The same can also be done if the
+merge is not finished but your repository is in state 'Conflicting'
+or 'Merged').
+
+* Select 'Reset > Hard' on the commit where the branch pointed to
+  before you did the second merge.
++
+image:reset.png[Reset]
+
+* In case you do that when you have an unfinished merge the screenshot
+  looks like this:
++
+image:reset-2.png[Reset]
+
+[[rebase]]
+=== Rebase
+Now do a rebase of the conflicting commit instead of a merge.
+
+* In the History View, select 'Rebase on Top of' on the second feature
+  branch (the first one is checked out):
++
+image:rebase.png[Rebase]
+
+* The rebase stops because of a conflict. You see a dialog:
++
+image:rebase-with-conflicts.png[Rebase with Conflicts]
+
+* Click 'OK' to start the merge tool.
+* Click 'OK' to start conflict resolution (using pre-merged option).
++
+image:merge-mode.png[Merge Mode]
++
+image:merge-tool-2.png[Merge Tool]
+
+* Edit the left side until you are happy with the change and save
++
+image:merge-tool-resolved-conflict-2.png[Merge Tool with resolved conflict]
+
+* Now select 'Team > Add' on the files which had conflicts. You can
+  also use the Git Staging View to do this in one step by drag and
+  drop
+* In the Repositories View select your repository and click
+  'Rebase > Continue'
++
+image:rebase-continue.png[Rebase Continue]
+
+* Now the version graph should look like this:
++
+image:history-view-5.png[History View]
++
+Note that there is a reference 'ORIG_HEAD' pointing to the commit
+which was checked out before the rebase operation. You may revert the
+rebase operation with reset as described above.
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/merge-tool-2.png b/exercises/egit/git/merge-tool-2.png
new file mode 100644
index 0000000..46aca77
--- /dev/null
+++ b/exercises/egit/git/merge-tool-2.png
Binary files differ
diff --git a/exercises/egit/git/merge-tool-resolved-conflict-2.png b/exercises/egit/git/merge-tool-resolved-conflict-2.png
new file mode 100644
index 0000000..8b05224
--- /dev/null
+++ b/exercises/egit/git/merge-tool-resolved-conflict-2.png
Binary files differ
diff --git a/exercises/egit/git/merge-tool-resolved-conflict.png b/exercises/egit/git/merge-tool-resolved-conflict.png
new file mode 100644
index 0000000..7640bf7
--- /dev/null
+++ b/exercises/egit/git/merge-tool-resolved-conflict.png
Binary files differ
diff --git a/exercises/egit/git/merge-tool.png b/exercises/egit/git/merge-tool.png
new file mode 100644
index 0000000..6036449
--- /dev/null
+++ b/exercises/egit/git/merge-tool.png
Binary files differ
diff --git a/exercises/egit/git/merge-with-conflicts.png b/exercises/egit/git/merge-with-conflicts.png
new file mode 100644
index 0000000..1a4915b
--- /dev/null
+++ b/exercises/egit/git/merge-with-conflicts.png
Binary files differ
diff --git a/exercises/egit/git/merge.png b/exercises/egit/git/merge.png
new file mode 100644
index 0000000..803bacb
--- /dev/null
+++ b/exercises/egit/git/merge.png
Binary files differ
diff --git a/exercises/egit/git/new-branch-checked-out.png b/exercises/egit/git/new-branch-checked-out.png
new file mode 100644
index 0000000..3f3e07f
--- /dev/null
+++ b/exercises/egit/git/new-branch-checked-out.png
Binary files differ
diff --git a/exercises/egit/git/rebase-continue.png b/exercises/egit/git/rebase-continue.png
new file mode 100644
index 0000000..9244c10
--- /dev/null
+++ b/exercises/egit/git/rebase-continue.png
Binary files differ
diff --git a/exercises/egit/git/rebase-with-conflicts.png b/exercises/egit/git/rebase-with-conflicts.png
new file mode 100644
index 0000000..4a6b2c4
--- /dev/null
+++ b/exercises/egit/git/rebase-with-conflicts.png
Binary files differ
diff --git a/exercises/egit/git/rebase.png b/exercises/egit/git/rebase.png
new file mode 100644
index 0000000..c1844d3
--- /dev/null
+++ b/exercises/egit/git/rebase.png
Binary files differ
diff --git a/exercises/egit/git/reset-2.png b/exercises/egit/git/reset-2.png
new file mode 100644
index 0000000..6dc8be2
--- /dev/null
+++ b/exercises/egit/git/reset-2.png
Binary files differ
diff --git a/exercises/egit/git/reset-branch-to-a-previous-state.txt b/exercises/egit/git/reset-branch-to-a-previous-state.txt
new file mode 100644
index 0000000..35c6b3e
--- /dev/null
+++ b/exercises/egit/git/reset-branch-to-a-previous-state.txt
@@ -0,0 +1,44 @@
+== Reset branch to a previous state
+Accidentally committing changes in a wrong branch can happen. For
+example you may switch between several branches, forget to checkout
+the branch in which you plan to continue your work and then commit in
+a wrong branch. Resetting the wrongly updated branch to its previous
+state is the topic of this exercise.
+
+Suppose you want to fix the warning for the unused 'serialVersionUID'
+field in the SWT 'CalculatorUI' class
+('org.eclipse.example.calc.internal.ui.swt.CalculatorUI'). You create
+a new local branch for this purpose 'fixWarnings'. However, let’s
+pretend that you forgot to checkout the 'fixWarnings' branch.
+Instead you are on the 'addDivideOperation'.
+
+* Checkout the 'addDivideOperation' branch
+* Create a new branch called 'fixWarnings' based on the
+  'origin/master' branch but make sure the 'checkout new branch'
+  checkbox is deselected. The new branch gets created but the
+  'addDivideOperation' branch is still checked out.
++
+image:create-branch-3.png[Create Branch]
+
+* Remove the field 'serialVersionUID' from
+  'org.eclipse.example.calc.internal.ui.swt.CalculatorUI'. Commit the
+  changes. This updated the 'addDivideOperation' branch.
+* Realize that you committed changes in a wrong branch. Don’t panic.
+* Reset the 'addDivideOperation' branch back to its previous state but
+  keep the changes in the working tree:
+** Using the History View find the parent commit of the tip of the
+  'addDivideOperation' branch and select 'Reset > Mixed' from the
+   context menu:
++
+image:history-view-7.png[History View]
+
+** The 'addDivideOperation' branch is reset back to its previous state
+   and doesn’t contain the commit that fixed the warning anymore.
+** However, the fix for the warning is still in the working tree!
+* Checkout the correct branch, the 'fixWarnings' branch
+* The changes are still in the working tree. Commit the changes.
+
+'Q:' What if you realized that you are on a wrong branch before
+committing the changes in the wrong branch?
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/reset.png b/exercises/egit/git/reset.png
new file mode 100644
index 0000000..6e05876
--- /dev/null
+++ b/exercises/egit/git/reset.png
Binary files differ
diff --git a/exercises/egit/git/show-annotations.png b/exercises/egit/git/show-annotations.png
new file mode 100644
index 0000000..931b4a0
--- /dev/null
+++ b/exercises/egit/git/show-annotations.png
Binary files differ
diff --git a/exercises/egit/git/show-author.png b/exercises/egit/git/show-author.png
new file mode 100644
index 0000000..834185e
--- /dev/null
+++ b/exercises/egit/git/show-author.png
Binary files differ
diff --git a/exercises/egit/git/staging-view-2.png b/exercises/egit/git/staging-view-2.png
new file mode 100644
index 0000000..0cbdeb5
--- /dev/null
+++ b/exercises/egit/git/staging-view-2.png
Binary files differ
diff --git a/exercises/egit/git/staging-view.png b/exercises/egit/git/staging-view.png
new file mode 100644
index 0000000..93e41a9
--- /dev/null
+++ b/exercises/egit/git/staging-view.png
Binary files differ
diff --git a/exercises/egit/git/team-commit.png b/exercises/egit/git/team-commit.png
new file mode 100644
index 0000000..c5e5e2a
--- /dev/null
+++ b/exercises/egit/git/team-commit.png
Binary files differ
diff --git a/exercises/egit/git/use-the-git-blame-feature.txt b/exercises/egit/git/use-the-git-blame-feature.txt
new file mode 100644
index 0000000..b6f3ab5
--- /dev/null
+++ b/exercises/egit/git/use-the-git-blame-feature.txt
@@ -0,0 +1,38 @@
+== Use the 'git blame' feature
+Using the History View and filtering the history is a useful tool for
+inspecting the project history. However, if you look at a particular
+file and find a bug in a particular line of code you would like to
+instantly know who was the last person who changed this line of code.
+Additionally, you would like to know why the developer did that i.e.
+locate the commit in which the change was done.
+
+In Git, this feature is called 'git blame' or 'git annotate'.
+
+* In Eclipse open a file for which you would like to see the Git
+  annotations. For example, open the 'Calculator.java' from the
+  example project.
+* Right-click the left margin in the editor and choose
+  'Show Annotations'
++
+image:show-annotations.png[Show Annotations]
+
+* A new 'annotations' column appears in the editor window
+* Right click the 'annotations' column and choose 'Revisions > Show
+  Author'
++
+image:show-author.png[Show Author]
++
+image:annotations.png[Annotations]
+
+* Now, for each line of the code you know who last changed it
+* Keep the mouse over an annotation for a couple of seconds. A window
+  pops up showing the info about the commit in which this line was
+  changed.
++
+image:annotation-info.png[Annotation Info]
+
+* Click on the commit-id in order to see full details of the commit.
++
+image:commit-details.png[Commit Details]
+
+link:index.html[Git Exercises]
diff --git a/exercises/egit/git/work-on-branches-in-parallel.txt b/exercises/egit/git/work-on-branches-in-parallel.txt
new file mode 100644
index 0000000..74b29a4
--- /dev/null
+++ b/exercises/egit/git/work-on-branches-in-parallel.txt
@@ -0,0 +1,115 @@
+== Work on branches in parallel
+In this exercise you will learn how to change commits using the amend
+functionality. This is for example useful if you work in different
+branches in parallel and you want to temporarily save your work. You
+will commit an unfinished change and later on replace this commit with
+a new, refined commit using the amend feature of git.
+
+=== Preparation
+Follow exercise 2, link:develop-a-feature.html[Develop a feature/bug fix],
+to create a commit on a feature branch based on the remote tracking
+branch 'origin/master'.
+
+=== Start working on another feature
+
+* Create a new local branch based on the remote tracking branch
+  'origin/master'
+* You may create the new branch from the History View:
+** Select the project, then click Show 'In > History'
+   (Some views, e.g. in the Java EE-Perspective, do not have this
+   shortcut, in this case use 'Team > Show in History')
+** In the History View click all toggle buttons as shown in the
+   screenshot (Link with Editor and Selection, Show all changes in
+   repository containing the selected resources, Compare Mode,
+   Show all Branches and Tags)
++
+image:history-view-2.png[History View]
+
+** Select 'Create Branch...' from the context menu on the commit where
+   'origin/master' points to
++
+image:create-branch-from-history-view.png[Create Branch from History View]
+
+* Or you may do that from the Repositories View:
++
+Select the remote tracking branch 'origin/master' and click 'Create
+Branch...'.
++
+image:create-branch-from-repositories-view.png[Create Branch from Repositories View]
+
+* Enter "addMultiplyOperation" as the name of the new branch, make sure
+  the 'checkout new branch' checkbox is selected and click on 'Finish'
+* Check that now you don’t see the changes of the first exercise
+  anymore in your workspace.
+* Start working on a change, e.g. add a 'Multiply' operation, do not
+  commit yet, first read on.
+
+=== Switch branches
+Now you want to switch to another branch but you want to continue
+working at your new feature later on. The easiest thing to do is to
+just commit your work in progress and change that commit later on.
+
+* Select your project in the Package Explorer and select
+  'Team > Commit' or click 'Commit' in the Git Toolbar
+* In the commit dialog enter a preliminary message, e.g.
+  "[Unfinished] Add multiply operation", select the files to be
+  committed and click on 'Commit'
++
+image:commit-changes.png[Commit Changes]
+
+* Now you can switch to the first feature branch "addDivideOperation",
+  either by double clicking on the branch node in the Git Repositories
+  View, by selecting 'Team > Switch To > addDivideOperation' or by
+  selecting 'Checkout' from the context menu on the
+  "addDivideOperation" branch in the History View.
+* Check that your workspace contains the changes you committed in your
+  first feature (implementing divide) branch. You could now continue
+  working here. For example: you may want to fix the division by zero
+  issue if it is not already handled. If you do any changes in the
+  "addDivideOperation" branch don’t forget to commit them with amend
+  before the next step
+* Switch back to the "addMultiplyOperation" branch
+
+=== Continue working on the branch adding Multiply
+* Do another change in the workspace improving Multiply.
+* Compare your changed project with the first, preliminary commit by
+  selecting 'Compare With > HEAD revision'. This will show you the
+  changes you will add on top of the first commit.
+* Compare your changed project with the parent commit of your first,
+  preliminary commit by selecting 'Compare With > Previous revision'.
+  This will show you the changes you will have in your new commit after
+  the next step.
+* Create a new commit with the combined changes of your first,
+  preliminary commit and your current changes
+** Select your project in the Package Explorer and select
+   'Team > Commit' or click 'Commit' in the Git Toolbar.
+** Press the 'Amend' button as shown below.
++
+image:commit-changes-with-amend.png[Commit Changes with Amend]
+
+** Now you see again the commit message of the last commit you made in
+   this branch. Change it to something meaningful and click the
+   'Commit' button.
+** In the History View you can now see that your first, preliminary
+   commit was replaced by the new one.
++
+image:history-view-3.png[History View]
+
+=== Fixing the commit message
+The amend feature is often used to fix the commit message of what you
+just committed.
+
+* In order to change the commit message of the last commit:
++
+Select your project in the Package Explorer and select 'Team > Commit'
+or click 'Commit in' the Git Toolbar.
+
+* Because there are no changes to commit EGit asks you if you want to
+  amend the last commit:
++
+image:amend-dialog.png[Amend Dialog]
+
+* Click 'Yes'.
+* Change the commit message and click on the 'Commit' button.
+
+link:index.html[Git Exercises]
diff --git a/img/EGit-Download.png b/img/EGit-Download.png
new file mode 100644
index 0000000..88fbf01
--- /dev/null
+++ b/img/EGit-Download.png
Binary files differ
diff --git a/img/Eclipse-Downloads.png b/img/Eclipse-Downloads.png
new file mode 100644
index 0000000..43ec918
--- /dev/null
+++ b/img/Eclipse-Downloads.png
Binary files differ
diff --git a/img/access-rights-configuration.png b/img/access-rights-configuration.png
new file mode 100644
index 0000000..4b86684
--- /dev/null
+++ b/img/access-rights-configuration.png
Binary files differ
diff --git a/img/access-rights-in-git.png b/img/access-rights-in-git.png
new file mode 100644
index 0000000..eb1daa9
--- /dev/null
+++ b/img/access-rights-in-git.png
Binary files differ
diff --git a/img/access-rights-save-for-review-2.png b/img/access-rights-save-for-review-2.png
new file mode 100644
index 0000000..41047a3
--- /dev/null
+++ b/img/access-rights-save-for-review-2.png
Binary files differ
diff --git a/img/access-rights-save-for-review-3.png b/img/access-rights-save-for-review-3.png
new file mode 100644
index 0000000..9ca7deb
--- /dev/null
+++ b/img/access-rights-save-for-review-3.png
Binary files differ
diff --git a/img/access-rights-save-for-review.png b/img/access-rights-save-for-review.png
new file mode 100644
index 0000000..2b670e8
--- /dev/null
+++ b/img/access-rights-save-for-review.png
Binary files differ
diff --git a/img/access-rights-screen.png b/img/access-rights-screen.png
new file mode 100644
index 0000000..d7e1381
--- /dev/null
+++ b/img/access-rights-screen.png
Binary files differ
diff --git a/img/add-comment-2.png b/img/add-comment-2.png
new file mode 100644
index 0000000..1124c9c
--- /dev/null
+++ b/img/add-comment-2.png
Binary files differ
diff --git a/img/add-comment-3.png b/img/add-comment-3.png
new file mode 100644
index 0000000..9170d17
--- /dev/null
+++ b/img/add-comment-3.png
Binary files differ
diff --git a/img/add-comment-4.png b/img/add-comment-4.png
new file mode 100644
index 0000000..66de5c5
--- /dev/null
+++ b/img/add-comment-4.png
Binary files differ
diff --git a/img/add-comment.png b/img/add-comment.png
new file mode 100644
index 0000000..205d3c7
--- /dev/null
+++ b/img/add-comment.png
Binary files differ
diff --git a/img/add-gerrit-server-2.png b/img/add-gerrit-server-2.png
new file mode 100644
index 0000000..68987c7
--- /dev/null
+++ b/img/add-gerrit-server-2.png
Binary files differ
diff --git a/img/add-gerrit-server-3.png b/img/add-gerrit-server-3.png
new file mode 100644
index 0000000..dffa21b
--- /dev/null
+++ b/img/add-gerrit-server-3.png
Binary files differ
diff --git a/img/add-gerrit-server-4.png b/img/add-gerrit-server-4.png
new file mode 100644
index 0000000..d41f9d6
--- /dev/null
+++ b/img/add-gerrit-server-4.png
Binary files differ
diff --git a/img/add-gerrit-server-5.png b/img/add-gerrit-server-5.png
new file mode 100644
index 0000000..38e7df3
--- /dev/null
+++ b/img/add-gerrit-server-5.png
Binary files differ
diff --git a/img/add-gerrit-server.png b/img/add-gerrit-server.png
new file mode 100644
index 0000000..322a678
--- /dev/null
+++ b/img/add-gerrit-server.png
Binary files differ
diff --git a/img/add-group-as-reviewer.png b/img/add-group-as-reviewer.png
new file mode 100644
index 0000000..0523f72
--- /dev/null
+++ b/img/add-group-as-reviewer.png
Binary files differ
diff --git a/img/android-logo.png b/img/android-logo.png
new file mode 100644
index 0000000..6d26e07
--- /dev/null
+++ b/img/android-logo.png
Binary files differ
diff --git a/img/automatically-resolve-conflicts.png b/img/automatically-resolve-conflicts.png
new file mode 100644
index 0000000..9de2927
--- /dev/null
+++ b/img/automatically-resolve-conflicts.png
Binary files differ
diff --git a/img/bad-commit-message.png b/img/bad-commit-message.png
new file mode 100644
index 0000000..d41442f
--- /dev/null
+++ b/img/bad-commit-message.png
Binary files differ
diff --git a/img/calculator.png b/img/calculator.png
new file mode 100644
index 0000000..3e3b41c
--- /dev/null
+++ b/img/calculator.png
Binary files differ
diff --git a/img/centralized-vcs-concept.png b/img/centralized-vcs-concept.png
new file mode 100644
index 0000000..ee19115
--- /dev/null
+++ b/img/centralized-vcs-concept.png
Binary files differ
diff --git a/img/change-2.png b/img/change-2.png
new file mode 100644
index 0000000..b261dd7
--- /dev/null
+++ b/img/change-2.png
Binary files differ
diff --git a/img/change-3.png b/img/change-3.png
new file mode 100644
index 0000000..dfbbb57
--- /dev/null
+++ b/img/change-3.png
Binary files differ
diff --git a/img/change-4.png b/img/change-4.png
new file mode 100644
index 0000000..13a2480
--- /dev/null
+++ b/img/change-4.png
Binary files differ
diff --git a/img/change-query.png b/img/change-query.png
new file mode 100644
index 0000000..d042062
--- /dev/null
+++ b/img/change-query.png
Binary files differ
diff --git a/img/change-screen-2.4.png b/img/change-screen-2.4.png
new file mode 100644
index 0000000..408af5d
--- /dev/null
+++ b/img/change-screen-2.4.png
Binary files differ
diff --git a/img/change-screen-2.5.png b/img/change-screen-2.5.png
new file mode 100644
index 0000000..990a3e3
--- /dev/null
+++ b/img/change-screen-2.5.png
Binary files differ
diff --git a/img/change.png b/img/change.png
new file mode 100644
index 0000000..6894241
--- /dev/null
+++ b/img/change.png
Binary files differ
diff --git a/img/clone-repository-2.png b/img/clone-repository-2.png
new file mode 100644
index 0000000..d52be27
--- /dev/null
+++ b/img/clone-repository-2.png
Binary files differ
diff --git a/img/clone-repository-3.png b/img/clone-repository-3.png
new file mode 100644
index 0000000..a5b99c5
--- /dev/null
+++ b/img/clone-repository-3.png
Binary files differ
diff --git a/img/clone-repository-4.png b/img/clone-repository-4.png
new file mode 100644
index 0000000..2290f89
--- /dev/null
+++ b/img/clone-repository-4.png
Binary files differ
diff --git a/img/clone-repository-5.png b/img/clone-repository-5.png
new file mode 100644
index 0000000..953d64f
--- /dev/null
+++ b/img/clone-repository-5.png
Binary files differ
diff --git a/img/clone-repository-6.png b/img/clone-repository-6.png
new file mode 100644
index 0000000..d110114
--- /dev/null
+++ b/img/clone-repository-6.png
Binary files differ
diff --git a/img/clone-repository-7.png b/img/clone-repository-7.png
new file mode 100644
index 0000000..f70d265
--- /dev/null
+++ b/img/clone-repository-7.png
Binary files differ
diff --git a/img/clone-repository-8.png b/img/clone-repository-8.png
new file mode 100644
index 0000000..0aeb771
--- /dev/null
+++ b/img/clone-repository-8.png
Binary files differ
diff --git a/img/clone-repository.png b/img/clone-repository.png
new file mode 100644
index 0000000..c3df69e
--- /dev/null
+++ b/img/clone-repository.png
Binary files differ
diff --git a/img/compare-patch-sets-1.png b/img/compare-patch-sets-1.png
new file mode 100644
index 0000000..7e211e8
--- /dev/null
+++ b/img/compare-patch-sets-1.png
Binary files differ
diff --git a/img/compare-patch-sets-2.png b/img/compare-patch-sets-2.png
new file mode 100644
index 0000000..cc2bc07
--- /dev/null
+++ b/img/compare-patch-sets-2.png
Binary files differ
diff --git a/img/compare-patch-sets-old.png b/img/compare-patch-sets-old.png
new file mode 100644
index 0000000..423935c
--- /dev/null
+++ b/img/compare-patch-sets-old.png
Binary files differ
diff --git a/img/compare-patch-sets.png b/img/compare-patch-sets.png
new file mode 100644
index 0000000..c72bac1
--- /dev/null
+++ b/img/compare-patch-sets.png
Binary files differ
diff --git a/img/create-branch-2.png b/img/create-branch-2.png
new file mode 100644
index 0000000..abd379d
--- /dev/null
+++ b/img/create-branch-2.png
Binary files differ
diff --git a/img/create-branch.png b/img/create-branch.png
new file mode 100644
index 0000000..e940462
--- /dev/null
+++ b/img/create-branch.png
Binary files differ
diff --git a/img/custom-dashboard.png b/img/custom-dashboard.png
new file mode 100644
index 0000000..7b7a2dc
--- /dev/null
+++ b/img/custom-dashboard.png
Binary files differ
diff --git a/img/dependencies.png b/img/dependencies.png
new file mode 100644
index 0000000..6426902
--- /dev/null
+++ b/img/dependencies.png
Binary files differ
diff --git a/img/diff.png b/img/diff.png
new file mode 100644
index 0000000..331b0b3
--- /dev/null
+++ b/img/diff.png
Binary files differ
diff --git a/img/disappeared-download-command.png b/img/disappeared-download-command.png
new file mode 100644
index 0000000..1ae0840
--- /dev/null
+++ b/img/disappeared-download-command.png
Binary files differ
diff --git a/img/distributed-vcs-concept.png b/img/distributed-vcs-concept.png
new file mode 100644
index 0000000..14e69f4
--- /dev/null
+++ b/img/distributed-vcs-concept.png
Binary files differ
diff --git a/img/docu-change.png b/img/docu-change.png
new file mode 100644
index 0000000..ca660a5
--- /dev/null
+++ b/img/docu-change.png
Binary files differ
diff --git a/img/done.png b/img/done.png
new file mode 100644
index 0000000..b9498b1
--- /dev/null
+++ b/img/done.png
Binary files differ
diff --git a/img/download-command.png b/img/download-command.png
new file mode 100644
index 0000000..176982f
--- /dev/null
+++ b/img/download-command.png
Binary files differ
diff --git a/img/draft-1.png b/img/draft-1.png
new file mode 100644
index 0000000..4f61205
--- /dev/null
+++ b/img/draft-1.png
Binary files differ
diff --git a/img/draft-2.png b/img/draft-2.png
new file mode 100644
index 0000000..9ab26e6
--- /dev/null
+++ b/img/draft-2.png
Binary files differ
diff --git a/img/draft-3.png b/img/draft-3.png
new file mode 100644
index 0000000..6a688ec
--- /dev/null
+++ b/img/draft-3.png
Binary files differ
diff --git a/img/eclipse-logo.png b/img/eclipse-logo.png
new file mode 100644
index 0000000..23226ae
--- /dev/null
+++ b/img/eclipse-logo.png
Binary files differ
diff --git a/img/egit-installation.png b/img/egit-installation.png
new file mode 100644
index 0000000..fef4973
--- /dev/null
+++ b/img/egit-installation.png
Binary files differ
diff --git a/img/email-unified-diff.png b/img/email-unified-diff.png
new file mode 100644
index 0000000..56c4df2
--- /dev/null
+++ b/img/email-unified-diff.png
Binary files differ
diff --git a/img/exercise-landscape.png b/img/exercise-landscape.png
new file mode 100644
index 0000000..81be33a
--- /dev/null
+++ b/img/exercise-landscape.png
Binary files differ
diff --git a/img/expand-context.png b/img/expand-context.png
new file mode 100644
index 0000000..4947077
--- /dev/null
+++ b/img/expand-context.png
Binary files differ
diff --git a/img/fast-forward-submit-failure.png b/img/fast-forward-submit-failure.png
new file mode 100644
index 0000000..8948a7d
--- /dev/null
+++ b/img/fast-forward-submit-failure.png
Binary files differ
diff --git a/img/fetch-2.png b/img/fetch-2.png
new file mode 100644
index 0000000..8958bf8
--- /dev/null
+++ b/img/fetch-2.png
Binary files differ
diff --git a/img/fetch-change-1.png b/img/fetch-change-1.png
new file mode 100644
index 0000000..e0fca72
--- /dev/null
+++ b/img/fetch-change-1.png
Binary files differ
diff --git a/img/fetch-change-2.png b/img/fetch-change-2.png
new file mode 100644
index 0000000..29007d8
--- /dev/null
+++ b/img/fetch-change-2.png
Binary files differ
diff --git a/img/fetch-open-change-2.png b/img/fetch-open-change-2.png
new file mode 100644
index 0000000..25165a3
--- /dev/null
+++ b/img/fetch-open-change-2.png
Binary files differ
diff --git a/img/fetch-open-change-3.png b/img/fetch-open-change-3.png
new file mode 100644
index 0000000..ccd58f5
--- /dev/null
+++ b/img/fetch-open-change-3.png
Binary files differ
diff --git a/img/fetch-open-change.png b/img/fetch-open-change.png
new file mode 100644
index 0000000..b90875d
--- /dev/null
+++ b/img/fetch-open-change.png
Binary files differ
diff --git a/img/fetch-updates-2.png b/img/fetch-updates-2.png
new file mode 100644
index 0000000..6d0af3d
--- /dev/null
+++ b/img/fetch-updates-2.png
Binary files differ
diff --git a/img/fetch-updates.png b/img/fetch-updates.png
new file mode 100644
index 0000000..e56dafa
--- /dev/null
+++ b/img/fetch-updates.png
Binary files differ
diff --git a/img/fetch.png b/img/fetch.png
new file mode 100644
index 0000000..30f8f51
--- /dev/null
+++ b/img/fetch.png
Binary files differ
diff --git a/img/gerrit-1.png b/img/gerrit-1.png
new file mode 100644
index 0000000..2365765
--- /dev/null
+++ b/img/gerrit-1.png
Binary files differ
diff --git a/img/gerrit-2.png b/img/gerrit-2.png
new file mode 100644
index 0000000..8942480
--- /dev/null
+++ b/img/gerrit-2.png
Binary files differ
diff --git a/img/gerrit-3.png b/img/gerrit-3.png
new file mode 100644
index 0000000..3ce1f54
--- /dev/null
+++ b/img/gerrit-3.png
Binary files differ
diff --git a/img/gerrit-4.png b/img/gerrit-4.png
new file mode 100644
index 0000000..ea3008e
--- /dev/null
+++ b/img/gerrit-4.png
Binary files differ
diff --git a/img/gerrit-5.png b/img/gerrit-5.png
new file mode 100644
index 0000000..dac4422
--- /dev/null
+++ b/img/gerrit-5.png
Binary files differ
diff --git a/img/gerrit-6.png b/img/gerrit-6.png
new file mode 100644
index 0000000..4cd8c6f
--- /dev/null
+++ b/img/gerrit-6.png
Binary files differ
diff --git a/img/gerrit-7.png b/img/gerrit-7.png
new file mode 100644
index 0000000..6be999f
--- /dev/null
+++ b/img/gerrit-7.png
Binary files differ
diff --git a/img/gerrit-8.png b/img/gerrit-8.png
new file mode 100644
index 0000000..a2c30b1
--- /dev/null
+++ b/img/gerrit-8.png
Binary files differ
diff --git a/img/gerrit-9.png b/img/gerrit-9.png
new file mode 100644
index 0000000..54aa2dc
--- /dev/null
+++ b/img/gerrit-9.png
Binary files differ
diff --git a/img/gerrit-configuration-2.png b/img/gerrit-configuration-2.png
new file mode 100644
index 0000000..4a7d394
--- /dev/null
+++ b/img/gerrit-configuration-2.png
Binary files differ
diff --git a/img/gerrit-configuration-3.png b/img/gerrit-configuration-3.png
new file mode 100644
index 0000000..b293ac4
--- /dev/null
+++ b/img/gerrit-configuration-3.png
Binary files differ
diff --git a/img/gerrit-configuration.png b/img/gerrit-configuration.png
new file mode 100644
index 0000000..f742575
--- /dev/null
+++ b/img/gerrit-configuration.png
Binary files differ
diff --git a/img/gerrit-error-documentation.png b/img/gerrit-error-documentation.png
new file mode 100644
index 0000000..73a0c7b
--- /dev/null
+++ b/img/gerrit-error-documentation.png
Binary files differ
diff --git a/img/gerrit-overview-workflow-1.png b/img/gerrit-overview-workflow-1.png
new file mode 100644
index 0000000..b8237cd
--- /dev/null
+++ b/img/gerrit-overview-workflow-1.png
Binary files differ
diff --git a/img/gerrit-overview-workflow-2.png b/img/gerrit-overview-workflow-2.png
new file mode 100644
index 0000000..b684e2f
--- /dev/null
+++ b/img/gerrit-overview-workflow-2.png
Binary files differ
diff --git a/img/gerrit-search-documentation.png b/img/gerrit-search-documentation.png
new file mode 100644
index 0000000..f429c4d
--- /dev/null
+++ b/img/gerrit-search-documentation.png
Binary files differ
diff --git a/img/git-commit-after-reset.png b/img/git-commit-after-reset.png
new file mode 100644
index 0000000..adaef0b
--- /dev/null
+++ b/img/git-commit-after-reset.png
Binary files differ
diff --git a/img/git-commit-graph-concept.png b/img/git-commit-graph-concept.png
new file mode 100644
index 0000000..370e69d
--- /dev/null
+++ b/img/git-commit-graph-concept.png
Binary files differ
diff --git a/img/git-commit.png b/img/git-commit.png
new file mode 100644
index 0000000..f4f1051
--- /dev/null
+++ b/img/git-commit.png
Binary files differ
diff --git a/img/git-config-eclipse-prefs.png b/img/git-config-eclipse-prefs.png
new file mode 100644
index 0000000..360a112
--- /dev/null
+++ b/img/git-config-eclipse-prefs.png
Binary files differ
diff --git a/img/git-fs-layout.png b/img/git-fs-layout.png
new file mode 100644
index 0000000..1070de2
--- /dev/null
+++ b/img/git-fs-layout.png
Binary files differ
diff --git a/img/git-log-oneline.png b/img/git-log-oneline.png
new file mode 100644
index 0000000..b241fea
--- /dev/null
+++ b/img/git-log-oneline.png
Binary files differ
diff --git a/img/git-repositories-view.png b/img/git-repositories-view.png
new file mode 100644
index 0000000..49e9ef0
--- /dev/null
+++ b/img/git-repositories-view.png
Binary files differ
diff --git a/img/github-logo.png b/img/github-logo.png
new file mode 100644
index 0000000..b4658a0
--- /dev/null
+++ b/img/github-logo.png
Binary files differ
diff --git a/img/good-commit-message.png b/img/good-commit-message.png
new file mode 100644
index 0000000..3237378
--- /dev/null
+++ b/img/good-commit-message.png
Binary files differ
diff --git a/img/history-2.png b/img/history-2.png
new file mode 100644
index 0000000..05db605
--- /dev/null
+++ b/img/history-2.png
Binary files differ
diff --git a/img/history.png b/img/history.png
new file mode 100644
index 0000000..0f3eb44
--- /dev/null
+++ b/img/history.png
Binary files differ
diff --git a/img/hudsonvoter-as-reviewer.png b/img/hudsonvoter-as-reviewer.png
new file mode 100644
index 0000000..cf34fb6
--- /dev/null
+++ b/img/hudsonvoter-as-reviewer.png
Binary files differ
diff --git a/img/hudsonvoter-comments.png b/img/hudsonvoter-comments.png
new file mode 100644
index 0000000..d6c360f
--- /dev/null
+++ b/img/hudsonvoter-comments.png
Binary files differ
diff --git a/img/huge-change.png b/img/huge-change.png
new file mode 100644
index 0000000..89f026d
--- /dev/null
+++ b/img/huge-change.png
Binary files differ
diff --git a/img/improvement.png b/img/improvement.png
new file mode 100644
index 0000000..2cc9e61
--- /dev/null
+++ b/img/improvement.png
Binary files differ
diff --git a/img/jenkins-voter-1.png b/img/jenkins-voter-1.png
new file mode 100644
index 0000000..0fd549c
--- /dev/null
+++ b/img/jenkins-voter-1.png
Binary files differ
diff --git a/img/jenkins-voter-2.png b/img/jenkins-voter-2.png
new file mode 100644
index 0000000..91e8524
--- /dev/null
+++ b/img/jenkins-voter-2.png
Binary files differ
diff --git a/img/line-endings.png b/img/line-endings.png
new file mode 100644
index 0000000..6183d8b
--- /dev/null
+++ b/img/line-endings.png
Binary files differ
diff --git a/img/line-numbers-2.4.png b/img/line-numbers-2.4.png
new file mode 100644
index 0000000..674c80e
--- /dev/null
+++ b/img/line-numbers-2.4.png
Binary files differ
diff --git a/img/line-numbers-2.5.png b/img/line-numbers-2.5.png
new file mode 100644
index 0000000..cc30987
--- /dev/null
+++ b/img/line-numbers-2.5.png
Binary files differ
diff --git a/img/linux-logo.png b/img/linux-logo.png
new file mode 100644
index 0000000..e8795c4
--- /dev/null
+++ b/img/linux-logo.png
Binary files differ
diff --git a/img/manual-review.png b/img/manual-review.png
new file mode 100644
index 0000000..1e7a4da
--- /dev/null
+++ b/img/manual-review.png
Binary files differ
diff --git a/img/mark-as-reviewed-keys.png b/img/mark-as-reviewed-keys.png
new file mode 100644
index 0000000..4020508
--- /dev/null
+++ b/img/mark-as-reviewed-keys.png
Binary files differ
diff --git a/img/merge-commit.png b/img/merge-commit.png
new file mode 100644
index 0000000..0ba382a
--- /dev/null
+++ b/img/merge-commit.png
Binary files differ
diff --git a/img/missing-documentation.png b/img/missing-documentation.png
new file mode 100644
index 0000000..55dbd90
--- /dev/null
+++ b/img/missing-documentation.png
Binary files differ
diff --git a/img/mylyn-Downloads.png b/img/mylyn-Downloads.png
new file mode 100644
index 0000000..e199009
--- /dev/null
+++ b/img/mylyn-Downloads.png
Binary files differ
diff --git a/img/mylyn-installation.png b/img/mylyn-installation.png
new file mode 100644
index 0000000..0c04928
--- /dev/null
+++ b/img/mylyn-installation.png
Binary files differ
diff --git a/img/need-non-author-code-review.png b/img/need-non-author-code-review.png
new file mode 100644
index 0000000..1f92b37
--- /dev/null
+++ b/img/need-non-author-code-review.png
Binary files differ
diff --git a/img/nit-comment.png b/img/nit-comment.png
new file mode 100644
index 0000000..8b6394f
--- /dev/null
+++ b/img/nit-comment.png
Binary files differ
diff --git a/img/no-motivation.png b/img/no-motivation.png
new file mode 100644
index 0000000..951aa50
--- /dev/null
+++ b/img/no-motivation.png
Binary files differ
diff --git a/img/not-found.png b/img/not-found.png
new file mode 100644
index 0000000..95c01b9
--- /dev/null
+++ b/img/not-found.png
Binary files differ
diff --git a/img/notifications.png b/img/notifications.png
new file mode 100644
index 0000000..a35cad1
--- /dev/null
+++ b/img/notifications.png
Binary files differ
diff --git a/img/optional-comment.png b/img/optional-comment.png
new file mode 100644
index 0000000..bdbd25d
--- /dev/null
+++ b/img/optional-comment.png
Binary files differ
diff --git a/img/outdated-dependency.png b/img/outdated-dependency.png
new file mode 100644
index 0000000..e513282
--- /dev/null
+++ b/img/outdated-dependency.png
Binary files differ
diff --git a/img/owner-self.png b/img/owner-self.png
new file mode 100644
index 0000000..e539d7d
--- /dev/null
+++ b/img/owner-self.png
Binary files differ
diff --git a/img/patch-screen-top-level-menus.png b/img/patch-screen-top-level-menus.png
new file mode 100644
index 0000000..b5ef6aa
--- /dev/null
+++ b/img/patch-screen-top-level-menus.png
Binary files differ
diff --git a/img/path-conflict.png b/img/path-conflict.png
new file mode 100644
index 0000000..ada746a
--- /dev/null
+++ b/img/path-conflict.png
Binary files differ
diff --git a/img/plugins.png b/img/plugins.png
new file mode 100644
index 0000000..16efd9d
--- /dev/null
+++ b/img/plugins.png
Binary files differ
diff --git a/img/project-repo-browser.png b/img/project-repo-browser.png
new file mode 100644
index 0000000..77e0b53
--- /dev/null
+++ b/img/project-repo-browser.png
Binary files differ
diff --git a/img/project-states.png b/img/project-states.png
new file mode 100644
index 0000000..c26b2f1
--- /dev/null
+++ b/img/project-states.png
Binary files differ
diff --git a/img/project-watches.png b/img/project-watches.png
new file mode 100644
index 0000000..6290ead
--- /dev/null
+++ b/img/project-watches.png
Binary files differ
diff --git a/img/publish-2.png b/img/publish-2.png
new file mode 100644
index 0000000..9327636
--- /dev/null
+++ b/img/publish-2.png
Binary files differ
diff --git a/img/publish-comments.png b/img/publish-comments.png
new file mode 100644
index 0000000..806c786
--- /dev/null
+++ b/img/publish-comments.png
Binary files differ
diff --git a/img/publish.png b/img/publish.png
new file mode 100644
index 0000000..c083260
--- /dev/null
+++ b/img/publish.png
Binary files differ
diff --git a/img/push-to-gerrit-2.png b/img/push-to-gerrit-2.png
new file mode 100644
index 0000000..1ec03ed
--- /dev/null
+++ b/img/push-to-gerrit-2.png
Binary files differ
diff --git a/img/push-to-gerrit-3.png b/img/push-to-gerrit-3.png
new file mode 100644
index 0000000..ecced8d
--- /dev/null
+++ b/img/push-to-gerrit-3.png
Binary files differ
diff --git a/img/push-to-gerrit-4.png b/img/push-to-gerrit-4.png
new file mode 100644
index 0000000..e8b2eb2
--- /dev/null
+++ b/img/push-to-gerrit-4.png
Binary files differ
diff --git a/img/push-to-gerrit.png b/img/push-to-gerrit.png
new file mode 100644
index 0000000..dbc649c
--- /dev/null
+++ b/img/push-to-gerrit.png
Binary files differ
diff --git a/img/query-2.png b/img/query-2.png
new file mode 100644
index 0000000..12adaad
--- /dev/null
+++ b/img/query-2.png
Binary files differ
diff --git a/img/query-3.png b/img/query-3.png
new file mode 100644
index 0000000..2335e38
--- /dev/null
+++ b/img/query-3.png
Binary files differ
diff --git a/img/query.png b/img/query.png
new file mode 100644
index 0000000..dff1bbe
--- /dev/null
+++ b/img/query.png
Binary files differ
diff --git a/img/rebase-2.png b/img/rebase-2.png
new file mode 100644
index 0000000..b4a3c7d
--- /dev/null
+++ b/img/rebase-2.png
Binary files differ
diff --git a/img/rebase-3.png b/img/rebase-3.png
new file mode 100644
index 0000000..0eaf5b5
--- /dev/null
+++ b/img/rebase-3.png
Binary files differ
diff --git a/img/rebase-4.png b/img/rebase-4.png
new file mode 100644
index 0000000..1c89571
--- /dev/null
+++ b/img/rebase-4.png
Binary files differ
diff --git a/img/rebase-5.png b/img/rebase-5.png
new file mode 100644
index 0000000..1def9e1
--- /dev/null
+++ b/img/rebase-5.png
Binary files differ
diff --git a/img/rebase-change.png b/img/rebase-change.png
new file mode 100644
index 0000000..5f9aa03
--- /dev/null
+++ b/img/rebase-change.png
Binary files differ
diff --git a/img/rebase.png b/img/rebase.png
new file mode 100644
index 0000000..dc60bd8
--- /dev/null
+++ b/img/rebase.png
Binary files differ
diff --git a/img/reply.png b/img/reply.png
new file mode 100644
index 0000000..9739802
--- /dev/null
+++ b/img/reply.png
Binary files differ
diff --git a/img/rest-list-projects.png b/img/rest-list-projects.png
new file mode 100644
index 0000000..eccc3fd
--- /dev/null
+++ b/img/rest-list-projects.png
Binary files differ
diff --git a/img/rest-query-changes.png b/img/rest-query-changes.png
new file mode 100644
index 0000000..852a7b3
--- /dev/null
+++ b/img/rest-query-changes.png
Binary files differ
diff --git a/img/review-notes-2.png b/img/review-notes-2.png
new file mode 100644
index 0000000..735cb7d
--- /dev/null
+++ b/img/review-notes-2.png
Binary files differ
diff --git a/img/review-notes-3.png b/img/review-notes-3.png
new file mode 100644
index 0000000..d4d3bb6
--- /dev/null
+++ b/img/review-notes-3.png
Binary files differ
diff --git a/img/review-notes.png b/img/review-notes.png
new file mode 100644
index 0000000..738e295
--- /dev/null
+++ b/img/review-notes.png
Binary files differ
diff --git a/img/reviewed-markers.png b/img/reviewed-markers.png
new file mode 100644
index 0000000..727d8fa
--- /dev/null
+++ b/img/reviewed-markers.png
Binary files differ
diff --git a/img/reviewer-table.png b/img/reviewer-table.png
new file mode 100644
index 0000000..96f06dd
--- /dev/null
+++ b/img/reviewer-table.png
Binary files differ
diff --git a/img/rfc.png b/img/rfc.png
new file mode 100644
index 0000000..15901ed
--- /dev/null
+++ b/img/rfc.png
Binary files differ
diff --git a/img/screenshot-attached.png b/img/screenshot-attached.png
new file mode 100644
index 0000000..9c6ec17
--- /dev/null
+++ b/img/screenshot-attached.png
Binary files differ
diff --git a/img/search-completion.png b/img/search-completion.png
new file mode 100644
index 0000000..ff701bf
--- /dev/null
+++ b/img/search-completion.png
Binary files differ
diff --git a/img/session-cookie-not-available.png b/img/session-cookie-not-available.png
new file mode 100644
index 0000000..44d5e74
--- /dev/null
+++ b/img/session-cookie-not-available.png
Binary files differ
diff --git a/img/session-expired.png b/img/session-expired.png
new file mode 100644
index 0000000..27fbf38
--- /dev/null
+++ b/img/session-expired.png
Binary files differ
diff --git a/img/sign-in.png b/img/sign-in.png
new file mode 100644
index 0000000..6569cbc
--- /dev/null
+++ b/img/sign-in.png
Binary files differ
diff --git a/img/small-change-1.png b/img/small-change-1.png
new file mode 100644
index 0000000..752318a
--- /dev/null
+++ b/img/small-change-1.png
Binary files differ
diff --git a/img/small-change-2.png b/img/small-change-2.png
new file mode 100644
index 0000000..3380e3f
--- /dev/null
+++ b/img/small-change-2.png
Binary files differ
diff --git a/img/stage-2.png b/img/stage-2.png
new file mode 100644
index 0000000..0b1bf87
--- /dev/null
+++ b/img/stage-2.png
Binary files differ
diff --git a/img/stage.png b/img/stage.png
new file mode 100644
index 0000000..607cb12
--- /dev/null
+++ b/img/stage.png
Binary files differ
diff --git a/img/streamlined-review-workflow.png b/img/streamlined-review-workflow.png
new file mode 100644
index 0000000..c9d45fe
--- /dev/null
+++ b/img/streamlined-review-workflow.png
Binary files differ
diff --git a/img/submit-type.png b/img/submit-type.png
new file mode 100644
index 0000000..ea59679
--- /dev/null
+++ b/img/submit-type.png
Binary files differ
diff --git a/img/top-level-menu-admin.png b/img/top-level-menu-admin.png
new file mode 100644
index 0000000..d0fdcdc
--- /dev/null
+++ b/img/top-level-menu-admin.png
Binary files differ
diff --git a/img/top-level-menu-groups.png b/img/top-level-menu-groups.png
new file mode 100644
index 0000000..83d9700
--- /dev/null
+++ b/img/top-level-menu-groups.png
Binary files differ
diff --git a/img/top-level-menu-projects.png b/img/top-level-menu-projects.png
new file mode 100644
index 0000000..31fd439
--- /dev/null
+++ b/img/top-level-menu-projects.png
Binary files differ
diff --git a/img/topic.png b/img/topic.png
new file mode 100644
index 0000000..edecc04
--- /dev/null
+++ b/img/topic.png
Binary files differ
diff --git a/img/voting.png b/img/voting.png
new file mode 100644
index 0000000..9b2eafe
--- /dev/null
+++ b/img/voting.png
Binary files differ
diff --git a/presentations/.gitignore b/presentations/.gitignore
new file mode 100644
index 0000000..e33609d
--- /dev/null
+++ b/presentations/.gitignore
@@ -0,0 +1 @@
+*.png
diff --git a/presentations/eclipse-and-gerrit/eclipse-and-gerrit.txt b/presentations/eclipse-and-gerrit/eclipse-and-gerrit.txt
new file mode 100644
index 0000000..010d71d
--- /dev/null
+++ b/presentations/eclipse-and-gerrit/eclipse-and-gerrit.txt
@@ -0,0 +1,416 @@
+= Eclipse and Gerrit
+:backend: slidy
+:max-width: 70em
+:data-uri:
+
+[[title-page]]
+== Eclipse and Gerrit
+
+== Eclipse and Gerrit
+
+<<<
+[[agenda-item]]
+=== 1. EGit
+
+<<<
+[[agenda-item]]
+=== 2. Mylyn
+
+
+[[title-page]]
+== EGit
+
+== EGit Installation
+
+* Install EGit from
++
+http://www.eclipse.org/egit/download/
++
+image:../../img/egit-download.png[EGit Download]
+
+== EGit Installation
+
+* Install EGit from:
++
+http://www.eclipse.org/egit/download/
++
+image:../../img/egit-installation.png[EGit Installation]
+
+== EGit
+
+* Clone a Git Repository
+
+image:../../img/clone-repository.png[Clone a Git Repository]
+
+== EGit
+
+* Clone a Git Repository
+
+image:../../img/clone-repository-2.png[Clone a Git Repository]
+
+== EGit
+
+* Clone a Git Repository
+
+image:../../img/clone-repository-3.png[Clone a Git Repository]
+
+== EGit
+
+* Clone a Git Repository
+
+image:../../img/clone-repository-4.png[Clone a Git Repository]
+
+== EGit
+
+image:../../img/git-repositories-view.png[Git Repositories View]
+
+== EGit
+
+* configure the Repository for Gerrit
+
+image:../../img/gerrit-configuration.png[Gerrit Configuration]
+
+== EGit
+
+* configure the Repository for Gerrit
+
+image:../../img/gerrit-configuration-2.png[Gerrit Configuration]
+
+== EGit
+
+* configure the Repository for Gerrit
+** automatically generate Change-Id's
+** fetch Gerrit review notes
+** push to `refs/for/master`
+
+image:../../img/gerrit-configuration-3.png[Gerrit Configuration]
+
+== EGit
+
+* commit via Staging View
+
+image:../../img/stage.png[Staging View]
+
+== EGit
+
+* commit via Staging View
+** stage by drap-and-drop
+** type commit message +
+   (placeholder for Change-Id is automatically inserted)
+** commit
+
+image:../../img/stage-2.png[Staging View]
+
+== EGit
+
+* inspect commit in History View
+
+image:../../img/history.png[History View]
+
+== EGit
+
+* inspect commit in History View
+
+image:../../img/history-2.png[History View]
+
+== EGit
+
+* Push to Gerrit
+
+image:../../img/push-to-gerrit.png[Push to Gerrit]
+
+== EGit
+
+* Push to Gerrit
+
+image:../../img/push-to-gerrit-2.png[Push to Gerrit]
+
+== EGit
+
+* Push for specific branch in Gerrit
+
+image:../../img/push-to-gerrit-3.png[Push to Gerrit]
+
+== EGit
+
+* Push for specific branch in Gerrit
+
+image:../../img/push-to-gerrit-4.png[Push to Gerrit]
+
+== EGit
+
+* Fetch Updates
+
+image:../../img/fetch-updates.png[Fetch Updates]
+
+== EGit
+
+* Fetch Updates
+
+image:../../img/fetch-updates-2.png[Fetch Updates]
+
+== EGit
+
+* Fetch Open Change from Gerrit
+
+image:../../img/fetch-open-change.png[Fetch Open Change]
+
+== EGit
+
+* Fetch Open Change from Gerrit
+** use content completion to select change
+
+image:../../img/fetch-open-change-2.png[Fetch Open Change]
+
+== EGit
+
+* Fetch Open Change from Gerrit
+
+image:../../img/fetch-open-change-3.png[Fetch Open Change]
+
+== EGit
+
+* Rebase
+
+image:../../img/rebase.png[Rebase]
+
+== EGit
+
+* Rebase
+
+image:../../img/rebase-2.png[Rebase]
+
+== EGit
+
+* Rebase
+** there may be conflicts
+
+image:../../img/rebase-3.png[Rebase]
+
+== EGit
+
+* Rebase
+** stage conflict resolution
+
+image:../../img/rebase-4.png[Rebase]
+
+== EGit
+
+* Rebase
+** continue rebase
+
+image:../../img/rebase-5.png[Rebase]
+
+== EGit
+
+* View Gerrit Code Review Notes
+** Open commit in Commit Viewer
+
+image:../../img/review-notes.png[Review Notes]
+
+== EGit
+
+* View Gerrit Code Review Notes
+** Open the `Notes` tab
+
+image:../../img/review-notes-2.png[Review Notes]
+
+== EGit
+
+* View Gerrit Code Review Notes
+
+image:../../img/review-notes-3.png[Review Notes]
+
+[[title-page]]
+== Mylyn
+
+== Mylyn - Installation
+
+* Install Gerrit Mylyn Connector from
++
+http://www.eclipse.org/mylyn/downloads/
++
+image:../../img/mylyn-downloads.png[Mylyn Download]
+
+== Mylyn - Installation
+
+* Install Gerrit Mylyn Connector from
++
+http://www.eclipse.org/egit/download/
++
+image:../../img/mylyn-installation.png[Mylyn Installation]
+
+== Mylyn
+
+* Add Gerrit Server
+
+image:../../img/add-gerrit-server.png[Add Gerrit Server]
+
+== Mylyn
+
+* Add Gerrit Server
+
+image:../../img/add-gerrit-server-2.png[Add Gerrit Server]
+
+== Mylyn
+
+* Add Gerrit Server
+
+image:../../img/add-gerrit-server-3.png[Add Gerrit Server]
+
+== Mylyn
+
+* The Gerrit Server at Eclipse is already preconfigured
+
+image:../../img/add-gerrit-server-4.png[Add Gerrit Server]
+
+== Mylyn
+
+* The Gerrit Server at Eclipse is already preconfigured
+
+image:../../img/add-gerrit-server-5.png[Add Gerrit Server]
+
+== Mylyn
+
+* Clone a Git Repository
+
+image:../../img/clone-repository-5.png[Clone a Git Repository]
+
+== Mylyn
+
+* Clone a Git Repository
+
+image:../../img/clone-repository-6.png[Clone a Git Repository]
+
+== Mylyn
+
+* Clone a Git Repository
+
+image:../../img/clone-repository-7.png[Clone a Git Repository]
+
+== Mylyn
+
+* Clone a Git Repository
+
+image:../../img/clone-repository-8.png[Clone a Git Repository]
+
+== Mylyn
+
+* Add a query
+
+image:../../img/query.png[Add Query]
+
+== Mylyn
+
+* Add a query
+
+image:../../img/query-2.png[Add Query]
+
+== Mylyn
+
+* Add a query
+
+image:../../img/query-3.png[Add Query]
+
+== Mylyn
+
+* Get notifications about changes
+
+image:../../img/notifications.png[Notifications]
+
+== Mylyn
+
+* Inspect Change
+
+image:../../img/change.png[Change]
+
+== Mylyn
+
+* Inspect Change
+
+image:../../img/change-2.png[Change]
+
+== Mylyn
+
+* Inspect Change
+
+image:../../img/change-3.png[Change]
+
+== Mylyn
+
+* Inspect Change
+
+image:../../img/change-4.png[Change]
+
+== Mylyn
+
+* Inspect Change
+
+image:../../img/diff.png[Diff]
+
+== Mylyn
+
+* Add Comment
+
+image:../../img/add-comment.png[Add Comment]
+
+== Mylyn
+
+* Add Comment
+
+image:../../img/add-comment-2.png[Add Comment]
+
+== Mylyn
+
+* Add Comment
+
+image:../../img/add-comment-3.png[Add Comment]
+
+== Mylyn
+
+* Add Comment
+
+image:../../img/add-comment-4.png[Add Comment]
+
+== Mylyn
+
+* Fetch Change
+
+image:../../img/fetch.png[Fetch]
+
+== Mylyn
+
+* Fetch Change
+
+image:../../img/fetch-2.png[Fetch]
+
+== Mylyn
+
+* Fetch Change
+
+image:../../img/publish.png[Publish]
+
+== Mylyn
+
+* Fetch Change
+
+image:../../img/publish-2.png[Publish]
+
+[[title-page]]
+== THE END
+
+++++
+<style type="text/css">
+#title-page {
+  border-bottom: 0;
+  text-align: center;
+  position: relative;
+  top: 30%;
+  font-size: 60px;
+}
+#agenda-item {
+  border-bottom: 0;
+}
+</style>
+++++
+
diff --git a/presentations/eclipse-and-gerrit/makeslides b/presentations/eclipse-and-gerrit/makeslides
new file mode 100755
index 0000000..1687949
--- /dev/null
+++ b/presentations/eclipse-and-gerrit/makeslides
@@ -0,0 +1 @@
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons eclipse-and-gerrit.txt
diff --git a/presentations/gerrit-and-code-review-best-practices/gerrit-and-code-review-best-practices-slides.txt b/presentations/gerrit-and-code-review-best-practices/gerrit-and-code-review-best-practices-slides.txt
new file mode 100644
index 0000000..983a07f
--- /dev/null
+++ b/presentations/gerrit-and-code-review-best-practices/gerrit-and-code-review-best-practices-slides.txt
@@ -0,0 +1,398 @@
+[[title-page]]
+== Gerrit and Code Review Best Practices
+
+== Gerrit and Code Review Best Practices
+
+<<<
+[[agenda-item]]
+=== 1. Best Practices - Making Changes
+
+<<<
+[[agenda-item]]
+=== 2. Best Practices - Reviewing Changes
+
+<<<
+[[agenda-item]]
+=== 3. Best Practices - Project Setup
+
+[[title-page]]
+== Best Practices - Making Changes
+
+== Making Changes
+each change should add something *usable*
+
+[role="incremental"]
+--
+----
+  change = complete feature
+----
+
+*or*
+
+----
+  change = bug-fix
+----
+--
+
+[role="incremental"]
+=> Have a releasable state after every change.
+
+== Making Changes
+each change should focus on only *one thing*
+
+[role="incremental"]
+* do not mix features, bug-fixes
+
+[role="incremental"]
+****
+`Q:` Why is this bad?
+
+[role="incremental"]
+`A:`
+[role="incremental"]
+* You need the bug-fix in another branch. +
+  -> `git cherry-pick` is not easy
+* The feature broke something. +
+  -> `git revert` cannot be used
+* It's more difficult to review.
+****
+
+== Making Changes
+push only changes that are *ready*
+
+[role="incremental"]
+****
+`Q:` Who wants to merge unfinished changes?
+****
+
+[role="incremental"]
+****
+`Q:` Who wants to review unfinished changes?
+[role="incremental"]
+--
+`A:` It is unclear for reviewers
+
+* what is an issue and
+* what is simply not done yet
+--
+****
+
+== Making Changes
+mark *unfinished and experimental changes* as `[RFC]` (Request For
+Comments), +
+but tell reviewers which feedback you expect
+
+image:../../img/rfc.png[RFC]
+
+Examples:
+
+* https://gerrit-review.googlesource.com/#/c/24202/
+* https://gerrit-review.googlesource.com/#/c/24064/
+
+== Making Changes
+write *good commit message*
+
+[role="incremental"]
+* make the change attractive to reviewers
+
+[role="incremental"]
+****
+`Q:` Who wants to review this change?
+
+image:../../img/bad-commit-message.png[Bad Commit Message]
+****
+
+== Making Changes
+write *good commit message*
+
+* make the change attractive to reviewers
+
+****
+`Q:` This one looks more interesting, doesn't it?
+image:../../img/good-commit-message.png[Good Commit Message]
+****
+
+== Making Changes
+write *good commit message*
+
+* have precise subjects
++
+image:../../img/git-log-oneline.png[git log --onoline]
+
+== Making Changes
+explain the *motivation* for the change
+
+[role="incremental"]
+* what was changed can be seen from the diff
+
+[role="incremental"]
+****
+`Q:` Why is this commit message bad?
+
+image:../../img/no-motivation.png[Commit Message without motivation]
+[role="incremental"]
+`A:` No info about *why* this had to be disabled. +
+&#160;&#160;&#160;&#160;&#160;&#160;`git blame` gets less useful.
+****
+
+== Making Changes
+prefer *small* changes
+
+[role="incremental"]
+****
+`Q:` Who wants to review this change?
+
+image:../../img/huge-change.png[Huge Change]
+****
+
+== Making Changes
+make big features as *series of small changes*
+
+[role="incremental"]
+* each change adds something *usable*
+* mark the change series as a *topic*
+
+[role="incremental"]
+--
+Example:
+
+image:../../img/topic.png[Topic]
+
+https://gerrit-review.googlesource.com/#/q/status:merged+project:gerrit+branch:master+topic:ssh-list-groups,n,z
+--
+
+== Making Changes
+split refactoring from feature
+
+[role="incremental"]
+* makes change *smaller*
+* the refactoring change is *"easier"* to review
+** even without knowing anything about the change, +
+one can check if the old and new code do the same
+
+== Making Changes
+provide *screenshots* for UI changes
+
+image:../../img/screenshot-attached.png[Screenshot Attached]
+
+Example:
+
+https://gerrit-review.googlesource.com/#/c/36460/
+
+== Making Changes
+reply to *every* comment
+
+[role="incremental"]
+* use `Reply Done` if issue was addressed
++
+image:../../img/done.png[Done Comment]
+
+* write reply why comment was ignored
++
+image:../../img/reply.png[Comment Reply]
+
+== Making Changes - Summary
+
+****
+Better *one developer* invests time to polish a change +
+than *n reviewers* waste time on review.
+****
+
+[[title-page]]
+== Best Practices - Reviewing Changes
+
+== Reviewing Changes
+review *each* change
+
+[role="incremental"]
+--
+`Q:` Looks good!?
+
+image:../../img/small-change-1.png[Small Change]
+--
+
+== Reviewing Changes
+review *each* change
+
+--
+`Q:` And now?
+
+image:../../img/small-change-2.png[Small Change]
+--
+
+== Reviewing Changes
+*everyone* should do reviews
+
+[role="incremental"]
+* helps to distribute knowledge
+* share the review effort
+
+[role="incremental"]
+*follow reviews* of others
+
+[role="incremental"]
+* learn from it
+
+== Reviewing Changes
+*cooperate* to find best solution
+
+[role="incremental"]
+* no fault finding, no finger pointing
+* propose improvements
++
+image:../../img/improvement.png[Improvement]
+
+== Reviewing Changes
+mark *optional* comments as `[optional]`
+
+image:../../img/optional-comment.png[Optional Comment]
+
+[role="incremental"]
+--
+comment on *nits*
+
+image:../../img/nit-comment.png[Nit Comment]
+--
+
+== Reviewing Changes
+*try out* changes
+
+[role="incremental"]
+* fetch the change
+* try to break the feature
+* if something doesn't work, +
+  find the error in the code and +
+  *comment inline*
+* vote in *Verified*
+
+== Reviewing Changes
+issue in *merged code*
+
+[role="incremental"]
+* upload a change that fixes the issue
+* find the change that introduced the issue +
+  and comment on it
+* report the issue in the issue tracker system
+
+== Reviewing Changes
+*Code Review* Voting
+
+[role="incremental"]
+* +2: fully understood, all correct, looks good
+* +1: looks good, don't see anything wrong
+* 0: optional comment, just a question
+* -1: feature is good, but there are issues that should be fixed
+* -2: veto, must not be merged
+
+== Reviewing Changes
+do *not* self approve changes
+
+[role="incremental"]
+* 4-eyes principle
+* may be enforced via
+  link:https://gerrit-review.googlesource.com/Documentation/prolog-cookbook.html#_example_8_make_change_submittable_only_if_tt_code_review_2_tt_is_given_by_a_non_author[
+  Prolog submit rule]
++
+image:../../img/need-non-author-code-review.png[Need Non Author Code Review]
+
+== Reviewing Changes
+review takes *time*
+
+[role="incremental"]
+* days, weeks or even months
+* merge changes only when they are ready
+* some changes may never be merged
+
+== Reviewing Changes - Summary
+
+****
+Being a good reviewer is a different *qualification* than being a good
+developer.
+****
+
+[role="incremental"]
+****
+Code Review works!
+
+https://gerrit-review.googlesource.com/#/c/30171/
+****
+
+[[title-page]]
+== Best Practices - Project Setup
+
+== Project Setup
+*automate* verification
+
+[role="incremental"]
+* link:https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger[
+  Gerrit Trigger] Plugin for Jenkins
++
+image:../../img/jenkins-voter-1.png[Jenkins Voter]
++
+image:../../img/jenkins-voter-2.png[Jenkins Voter]
+
+== Project Setup
+* define *code styles*
+* agree on line endings
+* have a *contributor guide*
++
+https://gerrit-review.googlesource.com/Documentation/dev-contributing.html
+
+== Project Setup
+not everyone needs *submit* privileges
+
+[role="incremental"]
+* committer vs. contributor
+* committer election process
+
+== Project Setup
+use *text format* for documentation
+
+[role="incremental"]
+* e.g. link:http://www.methods.co.nz/asciidoc/userguide.html[ASCIIDOC]
+* makes documentation changes reviewable
+* version documentation together with the code
++
+image:../../img/docu-change.png[Documentation Change]
+
+* vote `-1` if documentation is missing
++
+image:../../img/missing-documentation.png[Missing Documentation]
+
+== Project Setup
+customize *submit rules* via
+link:https://gerrit-review.googlesource.com/Documentation/prolog-cookbook.html[
+Prolog]
+
+== Project Setup
+choose right *submit type*
+
+[role="incremental"]
+* merge/rebase effort vs. risk to break main build
+* enable `Automatically resolve conflicts`
++
+image:../../img/automatically-resolve-conflicts.png[Automatically Resolve
+Conflicts]
+
+== Project Setup
+do *not* version large binaries
+
+[role="incremental"]
+* results in bad performance
+* use Maven repo, Nexus to store build artefacts
+* link:https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#receive.maxObjectSizeLimit[
+  configure max object size] to make push fail
+
+[role="incremental"]
+find *right granularity* for the repositories
+
+[role="incremental"]
+* avoid too big repositories
+* version together what needs to be released together
+
+== Project Setup
+*learn* Git/Gerrit tooling and workflow
+
+[role="incremental"]
+* offer Git/Gerrit trainings
+* offer support via mailing list
diff --git a/presentations/gerrit-and-code-review-best-practices/gerrit-and-code-review-best-practices.txt b/presentations/gerrit-and-code-review-best-practices/gerrit-and-code-review-best-practices.txt
new file mode 100644
index 0000000..43c3d39
--- /dev/null
+++ b/presentations/gerrit-and-code-review-best-practices/gerrit-and-code-review-best-practices.txt
@@ -0,0 +1,22 @@
+= Gerrit and Code Review Best Practices
+:backend: slidy
+:max-width: 70em
+:data-uri:
+
+include::gerrit-and-code-review-best-practices-slides.txt[]
+
+++++
+<style type="text/css">
+#title-page {
+  border-bottom: 0;
+  text-align: center;
+  position: relative;
+  top: 30%;
+  font-size: 60px;
+}
+#agenda-item {
+  border-bottom: 0;
+}
+</style>
+++++
+
diff --git a/presentations/gerrit-and-code-review-best-practices/makeslides b/presentations/gerrit-and-code-review-best-practices/makeslides
new file mode 100755
index 0000000..3425a3d
--- /dev/null
+++ b/presentations/gerrit-and-code-review-best-practices/makeslides
@@ -0,0 +1 @@
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons gerrit-and-code-review-best-practices.txt
diff --git a/presentations/gerrit-new-features-2.1.8-to-2.4/gerrit-new-features-2.1.8-to-2.4.txt b/presentations/gerrit-new-features-2.1.8-to-2.4/gerrit-new-features-2.1.8-to-2.4.txt
new file mode 100644
index 0000000..d4b92c0
--- /dev/null
+++ b/presentations/gerrit-new-features-2.1.8-to-2.4/gerrit-new-features-2.1.8-to-2.4.txt
@@ -0,0 +1,183 @@
+= New Gerrit Features 2.1.8 -> 2.4
+:backend: slidy
+:max-width: 70em
+:data-uri:
+
+== New Gerrit Features 2.1.8 -> 2.4
+An upgrade of Gerrit from version 2.1.8 to version 2.4 makes a lot of
+new features available.  This presentation explains those new features
+which are most interesting to end users.
+
+For the complete list of new features and bug-fixes please consult the
+official link:http://gerrit-documentation.googlecode.com/svn/ReleaseNotes/index.html[
+release notes].
+
+[[title-page]]
+== WebUI
+
+== `Rebase Change` Button on the Change Screen
+There is a new button on the change screen that allows you to do a
+trivial rebase directly in the WebUI.  It will automatically rebase
+the change and create a new patch set.  If the rebase results in
+conflicts the operation fails and the rebase has to be done in the
+local repository as usual.
+
+image:../../img/rebase-change.png[Rebase Change]
+
+== Support for expanding the Context for a Diff
+When doing reviews there is often a need to see additional context
+around the changed lines. The context can now be extended by a single
+click:
+
+image:../../img/expand-context.png["Expand Context",width=1400]
+
+== Highlight Outdated Dependencies on Change Screen
+If a change depends on an old patch set of another change it cannot
+get merged.  This outdated dependency is now highlighted in red on the
+change screen.
+
+image:../../img/outdated-dependency.png[Outdated Dependency]
+
+== Top Level Menu on the Patch Screen
+On the Patch Screen there is now a top level menu that allows you to
+
+* switch between the Side-by-Side diff and the Unified Diff
+* to change the compared patch sets
+* to see additional change information (commit message, file list)
+* to change the user preferences
+
+image:../../img/patch-screen-top-level-menus.png[Top Level Menus]
+
+== Display Merge Commits as Differences from Automatic Merge Result
+This allows you to do code review for merge commits.
+
+image:../../img/merge-commit.png[Merge Commit]
+
+== Adding Groups as Reviewer
+Groups can now be added as reviewer on a change.  On adding the group
+will be expanded so that every member of the group is added as
+reviewer to the change.
+
+image:../../img/add-group-as-reviewer.png[Add Group as Reviewer]
+
+== Case insensitive login to Gerrit WebUI
+For LDAP the login to the Gerrit WebUI can now be configured to be
+case insensitive.
+
+[[title-page]]
+== Access Rights
+
+== Refinement of the Access Rights
+The access rights were reworked and are now more fine-grained.  In the
+Gerrit documentation a
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.4/access-control.html#conversion_table[
+conversion table] for the access rights is available.  The new access
+rights are all
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.4/access-control.html#access_category[
+documented] in details.
+
+== New Screen for editing the Access Rights
+
+image:../../img/access-rights-screen.png[Access Rights Screen]
+
+== Access Rights stored in the Git Repository
+The access rights for a project are now stored directly in the
+project's git repository in a special branch called
+`refs/meta/config`.  By this, changes to the access rights are now
+versioned.  When changing the access rights a commit message can be
+provided.  From the history of the `refs/meta/config` branch you can
+see who changed which permission.
+
+image:../../img/access-rights-in-git.png[Access Rights in Git]
+
+== Support blocking Access Rights
+Access rights can now be blocked.  This feature is used to globally
+disallow deletion and changing of tags (which would break build
+reproducability).  With this feature it is now again possible for
+project owners to assign force push on branches.
+
+== Documentation of Example Access Rights for Typical Roles
+In the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.4/access-control.html#_examples_of_typical_roles_in_a_project[
+Gerrit access right documentation] it is now explained for typical
+roles which access rights should normally be assigned.
+
+== Permissions for Administrative Actions can now be assigned on a Fine-Grained Level
+The system capabilities that can be assigned are explained in the
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.4/access-control.html#_system_capabilities[
+Gerrit access rights documentation].
+
+[[title-page]]
+== Other
+
+== Support for custom Submit Rules on Project Level
+It is now possible to write a submit rule in Prolog and to configure
+it for a project.  A submit rule defines when a change is submittable.
+E.g. it's possible to implement a submit rule that makes the change
+only submittable if at least 2 reviewers gave a positive voting.
+
+== Support for Draft Patch Sets
+Patch sets can now be uploaded as drafts.  A draft patch set is only
+visible to the author.  Only after explicitly publishing it, it gets
+visible to other users.  Draft patch sets can be deleted by the
+author.  A draft patch set may be shared with other users by explictly
+adding them as reviewer on the change.  With this you might get
+feedback on your draft patch set from certain reviewers without
+exposing it to all users.
+
+To push a commit as draft, it has to be pushed to
+`refs/drafts/<target-branch>`.
+
+image:../../img/draft-1.png[Draft]
+
+image:../../img/draft-2.png[Draft]
+
+image:../../img/draft-3.png[Draft]
+
+WARNING: The Gerrit Trigger Plugin is not aware of draft patch sets
+yet.  If you publish a draft patch set the Gerrit Trigger Plugin does
+*NOT* trigger a build for this patch set, but you have to trigger the
+build manually as described
+link:https://wiki/wiki/display/LeanDI/Git+Gerrit+-+FAQ#GitGerrit-FAQ-HowcanIrepeatthebuildandHudsonvotingforapendingGerritchange%3F[here].
+
+== Support for Project States
+Projects can now be set to different states:
+
+* `Active`:
++
+A regular project that is active (default value)
+
+* `Read Only`:
++
+Users can see the project if `Read` permission is granted, but all
+modification operations are disabled
+
+* `Hidden`:
++
+The project is not visible for those who are not project owners
+
+image:../../img/project-states.png[Project States]
+
+== Documentation
+
+=== A quick Introduction to Gerrit
+http://gerrit-documentation.googlecode.com/svn/Documentation/2.4/intro-quick.html
+
+=== Quick Get Started Guide
+In addition to the detailed
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.4/install.html[
+installation instructions] there is now a
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.4/install-quick.html[
+quick get started guide].
+
+++++
+<style type="text/css">
+#title-page {
+  border-bottom: 0;
+  text-align: center;
+  position: relative;
+  top: 30%;
+  font-size: 100px;
+}
+</style>
+++++
+
diff --git a/presentations/gerrit-new-features-2.1.8-to-2.4/makeslides b/presentations/gerrit-new-features-2.1.8-to-2.4/makeslides
new file mode 100755
index 0000000..db9ec31
--- /dev/null
+++ b/presentations/gerrit-new-features-2.1.8-to-2.4/makeslides
@@ -0,0 +1 @@
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons gerrit-new-features-2.1.8-to-2.4.txt
diff --git a/presentations/gerrit-new-features-2.5/gerrit-new-features-2.5.txt b/presentations/gerrit-new-features-2.5/gerrit-new-features-2.5.txt
new file mode 100644
index 0000000..dae5be5
--- /dev/null
+++ b/presentations/gerrit-new-features-2.5/gerrit-new-features-2.5.txt
@@ -0,0 +1,270 @@
+= What's new in Gerrit 2.5
+:backend: slidy
+:max-width: 70em
+:data-uri:
+
+[[title-page]]
+== What's new in Gerrit 2.5
+
+== What's new in Gerrit 2.5
+* link:http://gerrit-documentation.googlecode.com/svn/ReleaseNotes/ReleaseNotes-2.5.html[
+Release Notes]
+
+* Statistics
++
+[width="50%",cols=">s,^m,^m",options="header"]
+|==========================
+|                |Gerrit 2.5 |Gerrit 2.4
+|commits         |790        |181
+|resolved issues
+|link:http://code.google.com/p/gerrit/issues/list?can=1&q=FixedIn-2.5&colspec=ID+Type+Stars+Milestone+Status+Priority+Owner+Summary&cells=tiles[51]
+|http://code.google.com/p/gerrit/issues/list?can=1&q=FixedIn-2.4&colspec=ID+Type+Stars+Milestone+Status+Priority+Owner+Summary&cells=tiles[35]
+|contributors    |34         |22
+|==========================
+
+== Selection of Patch Sets from Patch Header
+There is a new header on the Patch Screen that allows to quickly
+select the patch sets to be compared.
+
+.Side-by-Side:
+image:../../img/compare-patch-sets.png[Compare Patch Sets]
+
+.Unified-Diff:
+image:../../img/compare-patch-sets-2.png[Compare Patch Sets]
+
+.Gerrit 2.4:
+image:../../img/compare-patch-sets-old.png[Compare Patch Sets]
+
+== Preference to show Line Endings
+There is a new user preference that allows to display Windows
+EOL/CR-LF.
+
+image:../../img/line-endings.png[Line Endings]
+
+== Streamlined Review Workflow
+Which files were reviewed can be seen in the file list of the patch.
+
+image:../../img/reviewed-markers.png[Reviewed Markers]
+
+A link was added next to the `Reviewed` checkbox that marks the
+current patch as reviewed +
+and goes to the next unreviewed patch.
+
+image:../../img/streamlined-review-workflow.png[Streamlined Review Workflow]
+
+
+=== Manual Review
+This works best if in the preferences `Manual Review` was chosen so
+that the +
+`Reviewed` checkbox is not automatically selected.
+
+image:../../img/manual-review.png[Manual Review]
+
+=== Key Commands
+There are key commands
+
+* to toggle the reviewed flag for a patch (`m`) and
+* to mark the patch as reviewed and navigate to the next unreviewed
+  patch (`M`).
+
+image:../../img/mark-as-reviewed-keys.png[Marks as Reviewed Keys]
+
+== Change Screen Cleanup
+The commit message on the Change Screen is now placed in a box with
+a title and emphasis on the commit summary.  The star icon and the
+permalink are displayed in the box header.  The header from the change
+screen is removed as it only held duplicate information.
+
+.Gerrit 2.5:
+image:../../img/change-screen-2.5.png[Change Screen 2.5]
+
+.Gerrit 2.4:
+image:../../img/change-screen-2.4.png[Change Screen 2.4]
+
+== Visually less distracting Line Numbers in Side-by-Side Diff Viewer
+
+.Gerrit 2.5:
+image:../../img/line-numbers-2.5.png[Line Numbers 2.5]
+
+.Gerrit 2.4:
+image:../../img/line-numbers-2.4.png[Line Numbers 2.4]
+
+== Approval Table on the Publish Comments Screen
+The approval table that shows the reviewers and their current votes
+is now shown on the Publish Comments Screen.  This allows the reviewer
+to see all existing votes and reviewers when doing the own voting
+and publishing of comments.  Seeing the existing votes helps the
+reviewer in understanding which votes are still required before the
+change can be submitted.
+
+image:../../img/publish-comments.png[Publish Comments]
+
+== Dependency Table Improvements
+
+* Open the dependency section automatically when the change is needed
+  by an open change
+* Only show a change as needed by if its current patch set depends on
+  the change
+* Only show draft change dependency if the current user is owner or
+  reviewer of the draft change
+
+image:../../img/dependencies.png[Dependency Table]
+
+== Offer Suggestions for the Search Operators in the Search Panel
+When typing a query, auto completion is now offered for the
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-search.html#_search_operators[
+search operators].
+
+image:../../img/search-completion.png[Search Completion]
+
+== Support alias `self` in Queries
+Some link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-search.html#_search_operators[
+search operators] which can be used in queries expect a user as
+argument, e.g. `owner:'USER'`, `reviewer:'USER'`, `starredby:'USER'`
+etc. Instead of a user you can now provide the alias `self` which will
+be resolved to the username of the caller. E.g. the query
+`owner:self status:open` will return all changes that the caller owns
+and that are still open.
+
+With the `self` alias it's possible to define queries in a generic
+way. The URL's for generic queries can be shared between team members
+without need to adapt them individually.
+
+image:../../img/owner-self.png[owner:self]
+
+== Support for Custom Dashboards
+Results for user-defined queries can now be displayed in
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-custom-dashboards.html[
+custom dashboards].
+
+image:../../img/custom-dashboard.png[Custom Dashboard]
+
+== Allow to propose Changes to Access Rights through Code Review
+Users [1] can now propose changes to the access rights of a project.
+This will create an open change in the review queue of the project.
+The project owners are automatically added as reviewer and can accept
+the modification to the access rights by approving and submitting this
+change.
+
+image:../../img/access-rights-save-for-review.png[Access Rights - Save for Review]
+
+image:../../img/access-rights-save-for-review-2.png[Access Rights - Open Change]
+
+image:../../img/access-rights-save-for-review-3.png[Access Rights - project.config diff]
+
+[1] users who can read the `refs/meta/config` branch in which the
+access rights are persisted
+
+== Add Unified Diff to `newchange` Mail Template
+The unified diff for a change can now be included into the e-mail
+notifications:
+
+image:../../img/email-unified-diff.png[E-Mail Unified Diff]
+
+== Move the Admin Menu Items to the top level Menu
+The new `Projects` and `Groups` top level menus replace the `Admin`
+top level menu.
+
+.Gerrit 2.5:
+image:../../img/top-level-menu-projects.png[Top Level Menu Projects]
+
+image:../../img/top-level-menu-groups.png[Top Level Menu Groups]
+
+.Gerrit 2.4:
+image:../../img/top-level-menu-admin.png[Top Level Menu Admin]
+
+== Show for each Project in the Project List a Link to the Repository Browser (e.g. GitWeb)
+
+image:../../img/project-repo-browser.png[Project Repo Browser]
+
+== Plugins
+The Gerrit server functionality can now be extended by installing
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html[
+plugins].
+
+image:../../img/plugins.png[Plugins]
+
+== Cookbook for Prolog Submit Rules
+Projects can define custome submit rules in Prolog. A submit rule
+decides when a change becomes submittable. In the Gerrit documentation
+there is now a
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/prolog-cookbook.html[
+cookbook] that explains how to write such submit rules in Prolog.
+
+E.g. it is possible to implement a
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/prolog-cookbook.html#_example_8_make_change_submittable_only_if_tt_code_review_2_tt_is_given_by_a_non_author[
+Prolog rule that makes the change only submittable if the is a +2 Code
+Review vote from a non author.]
+
+image:../../img/need-non-author-code-review.png[Need Non Author Code Review]
+
+Developing submit rules in Prolog is now eased by an
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-test-submit-rule.html[
+SSH command that allows to test submit rules].
+
+== REST API
+Gerrit now supports a
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html[REST
+like API] available over HTTP.
+
+The API is suitable for automated tools to build upon, as well as
+supporting some ad-hoc scripting use cases.
+
+.List Projects:
+image:../../img/rest-list-projects.png[REST List Projects]
+
+.Query Changes:
+image:../../img/rest-query-changes.png[REST Query Changes]
+
+== Ask user to sign in if change is not found
+
+.Gerrit 2.5:
+image:../../img/session-expired.png[Session Expired]
+
+.Gerrit 2.4:
+image:../../img/not-found.png[Not Found]
+
+== Do not show "Session cookie not available" on sign in
+
+.Gerrit 2.5:
+image:../../img/sign-in.png[Sign In]
+
+.Gerrit 2.4:
+image:../../img/session-cookie-not-available.png[Session Cookie Not Available]
+
+==  Fix disappearance of download command in Firefox
+
+.Gerrit 2.5:
+image:../../img/download-command.png[Download Command]
+
+.Gerrit 2.4:
+image:../../img/disappeared-download-command.png[Disappeared Download Command]
+
+== Other important fixes
+
+* link:http://code.google.com/p/gerrit/issues/detail?id=1548[Create a
+  ref for the patch set that is created when a change is
+  cherry-picked]
+
+* Fix reject message if bypassing code review is not allowed
++
+now it's "prohibited by Gerrit" instead of "can not update the
+reference as a fast forward"
+
+* link:http://code.google.com/p/gerrit/issues/detail?id=1554[Fix
+  cloning of new projects from slave servers]
+
+* link:http://code.google.com/p/gerrit/issues/detail?id=1491[Fix
+  nested submodule updates]
+
+++++
+<style type="text/css">
+#title-page {
+  border-bottom: 0;
+  text-align: center;
+  position: relative;
+  top: 30%;
+  font-size: 60px;
+}
+</style>
+++++
diff --git a/presentations/gerrit-new-features-2.5/makeslides b/presentations/gerrit-new-features-2.5/makeslides
new file mode 100755
index 0000000..6643849
--- /dev/null
+++ b/presentations/gerrit-new-features-2.5/makeslides
@@ -0,0 +1 @@
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons gerrit-new-features-2.5.txt
diff --git a/presentations/git-gerrit-workshop/abstract.txt b/presentations/git-gerrit-workshop/abstract.txt
new file mode 100644
index 0000000..b8079b1
--- /dev/null
+++ b/presentations/git-gerrit-workshop/abstract.txt
@@ -0,0 +1,63 @@
+= Git/Gerrit Training
+
+[width="30%",cols="s,^m"]
+|=======
+|Target Audience |Git/Gerrit Beginners
+|Duration |1 day
+|Language |English
+|Type |hand-on workshop
+|=======
+
+== Abstract
+
+The Git/Gerrit training is a hands-on workshop where participants learn
+how to work with EGit and Gerrit. +
+There are exercises so that everybody can get familiar with the tools
+and the workflows. +
+The basic Git and Gerrit concepts will be explained in details. +
+Additionally background information about code review and best
+practices will be provided.
+
+== Training preparation
+
+To attend the training every participant has to
+link:workshop-preparations.html[setup the local environment] *before*
+the training.
+
+== Content
+
+* link:git-gerrit-workshop.html#git-info[General information about Git]
+* link:git-gerrit-workshop.html#git-concepts[Git Concepts]:
+** link:git-gerrit-workshop.html#git-structure[Repository Structure]
+** link:git-gerrit-workshop.html#checkout[Checkout]
+** link:git-gerrit-workshop.html#commit[Committing Changes]
+** link:git-gerrit-workshop.html#branches[Branches]
+** link:git-gerrit-workshop.html#clone[Clone] &
+   link:git-gerrit-workshop.html#fetch[Fetch]
+** link:git-gerrit-workshop.html#merge[Merge],
+   link:git-gerrit-workshop.html#cherry-pick[Cherry-Pick],
+   link:git-gerrit-workshop.html#rebase[Rebase]
+** link:git-gerrit-workshop.html#push[Push]
+* link:git-gerrit-workshop.html#gerrit-intro[Gerrit Introduction]
+* link:git-gerrit-workshop.html#code-review[Code Review]
+* link:git-gerrit-workshop.html#gerrit-concepts[Gerrit Concepts]:
+** link:git-gerrit-workshop.html#push-for-review[Push for Code Review]
+** link:git-gerrit-workshop.html#change[Change]
+** link:git-gerrit-workshop.html#review-and-vote[Review and Voting]
+** link:git-gerrit-workshop.html#refine-change[Refining a Change]
+** link:git-gerrit-workshop.html#fetch-open-change[Fetch Open Changes]
+** link:git-gerrit-workshop.html#submit[Submit]
+** link:git-gerrit-workshop.html#path-conflict[Path Conflicts]
+** link:git-gerrit-workshop.html#cip[Continuous Integration Builds]
+* link:git-gerrit-workshop.html#best-practices[Best Practices]
+* link:exercises/git/index.html[Git Exercises]
+* link:exercises/gerrit/index.html[Gerrit Exercises]
+
+== Training Material
+
+* link:git-gerrit-workshop.html[Slides]
+* link:../../exercises/egit/git/index.html[Git Exercises]
+* link:../../exercises/egit/gerrit/index.html[Gerrit Exercises]
+
+WARNING: To watch the training material we recommand to use a browser
+different than Internet Explorer.
diff --git a/presentations/git-gerrit-workshop/access-rights.txt b/presentations/git-gerrit-workshop/access-rights.txt
new file mode 100644
index 0000000..5c79b13
--- /dev/null
+++ b/presentations/git-gerrit-workshop/access-rights.txt
@@ -0,0 +1,8 @@
+Access Rights
+-------------
+
+Decentralized access rights configuration
+
+* Every team is responsible for the access rights of their own projects.
+
+image:../../img/access-rights-configuration.png[]
diff --git a/presentations/git-gerrit-workshop/basic-git-concepts.txt b/presentations/git-gerrit-workshop/basic-git-concepts.txt
new file mode 100644
index 0000000..c2041b8
--- /dev/null
+++ b/presentations/git-gerrit-workshop/basic-git-concepts.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Basic Git Concepts
+------------------
diff --git a/presentations/git-gerrit-workshop/branches-definition-1.txt b/presentations/git-gerrit-workshop/branches-definition-1.txt
new file mode 100644
index 0000000..57f6040
--- /dev/null
+++ b/presentations/git-gerrit-workshop/branches-definition-1.txt
@@ -0,0 +1,30 @@
+Branches
+--------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  C -> B -> A
+
+  D [style=invis]
+  D -> C [style=invis]
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master; C }
+
+  master -> C
+
+}
+----
+
+Branch is a named pointer to a commit
+
+* example: `master`
+* full name: `refs/heads/master`
+[role="incremental"]
+--
+* 'Q:' what happens when a new changes is committed?
+--
diff --git a/presentations/git-gerrit-workshop/branches-definition-2.txt b/presentations/git-gerrit-workshop/branches-definition-2.txt
new file mode 100644
index 0000000..226235b
--- /dev/null
+++ b/presentations/git-gerrit-workshop/branches-definition-2.txt
@@ -0,0 +1,28 @@
+Branches
+--------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  D [style=filled, fillcolor=coral1, color=red]
+  D -> C [color=red]
+  C -> B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+  master [color=red, fontcolor=red, label=master]
+  master -> D [color=red]
+  { rank=same; master; D }
+
+  master_old [style=dashed, label=master, color=grey, fontcolor=grey]
+  master_old -> C [style=dashed, color=grey]
+  { rank=same; master_old; C }
+
+}
+----
+
+New commit `D` gets created and the branch is moved
diff --git a/presentations/git-gerrit-workshop/branches-many.txt b/presentations/git-gerrit-workshop/branches-many.txt
new file mode 100644
index 0000000..47246d2
--- /dev/null
+++ b/presentations/git-gerrit-workshop/branches-many.txt
@@ -0,0 +1,38 @@
+Branches
+--------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  F -> E -> B -> A
+  D -> C -> B
+  G -> B
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+  bugfix15 -> F
+  "origin/master" -> E
+  "origin/master" [fillcolor=lightskyblue]
+  feature1 -> D
+  feature2 [style=dashed, color=grey, fontcolor=grey]
+  feature2 -> G [style=dashed, color=grey]
+
+  { rank=same; F; D bugfix15; feature1 }
+  { rank=same; "origin/master"; E; C; G; feature2 }
+
+  D -> F [style=invis]
+  G -> E [style=invis]
+}
+----
+
+Usualy there are many branches in a Git repository
+
+* branch can also be deleted
+[role="incremental"]
+--
+* 'Q:' how does Git know which branch to update on next commit operation?
+--
diff --git a/presentations/git-gerrit-workshop/branches-reset.txt b/presentations/git-gerrit-workshop/branches-reset.txt
new file mode 100644
index 0000000..2509439
--- /dev/null
+++ b/presentations/git-gerrit-workshop/branches-reset.txt
@@ -0,0 +1,112 @@
+Resetting Branches
+------------------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  D -> C -> B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+	HEAD [fillcolor="#555555", fontcolor=white]
+  HEAD -> master -> D
+  { rank=same; HEAD; master; D }
+
+}
+----
+
+Branch can also be moved "manually"
+
+[role="incremental"]
+--
+* 'Q:' what happens when we reset branch `master` to commit `B`
++
+----
+git reset B
+----
+--
+
+Resetting Branches
+------------------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  D -> C -> B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+	HEAD [fillcolor="#555555", fontcolor=white]
+  master [color=red, fontcolor=red]
+  HEAD -> master -> B [color=red]
+  { rank=same; HEAD; master; B }
+
+  master_old [style=dashed, label=master, color=grey, fontcolor=grey]
+  master_old -> D [style=dashed, color=grey]
+  { rank=same; master_old; D }
+}
+----
+
+Branch now points to commit `B`
+
+[role="incremental"]
+* 'Q:' what happens to the 'working tree' and 'index' on branch reset?
+** 'soft', 'mixed' and 'hard' reset
+
+Resetting Branches - Soft, Mixed and Hard
+-----------------------------------------
+
+[grid="rows", format="csv"]
+[options="header"]
+|==============================
+Reset,working tree,index,branch
+soft,[green]#No#,[green]#No#,*Yes*
+mixed,[green]#No#,*Yes*,*Yes*
+hard,[red]#Yes#,*Yes*,*Yes*
+|==============================
+
+Branches - Next Commit After Reset
+----------------------------------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+
+  D -> C -> B -> A
+  E [style=filled, color=red, fillcolor=coral1]
+  E -> B [weight=0, color=red]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master [color=red, fontcolor=red]
+  master [label=master, color=red, fontcolor=red]
+
+	HEAD [fillcolor="#555555", fontcolor=white]
+  HEAD -> master -> E [color=red, weight=0]
+
+  { rank=same; HEAD; master; E; C}
+
+  master_old [style=dashed, label=master, color=grey, fontcolor=grey]
+  master_old -> B [style=dashed, color=grey]
+
+  { rank=same; master_old; B }
+
+}
+----
+
+Commit after reset
+
+* new commit `E`, a successor of `B`, gets created
+* `C` and `D` continue to exist but they are not in the history of the master
+  branch
diff --git a/presentations/git-gerrit-workshop/bypassing-code-review.txt b/presentations/git-gerrit-workshop/bypassing-code-review.txt
new file mode 100644
index 0000000..d322bb8
--- /dev/null
+++ b/presentations/git-gerrit-workshop/bypassing-code-review.txt
@@ -0,0 +1,8 @@
+Bypassing Code Review
+---------------------
+
+CAUTION: NOT RECOMMENDED!!!
+
+But yes, it is possible.
+
+Simply assign `PUSH BRANCH` access right on `refs/heads/*`
diff --git a/presentations/git-gerrit-workshop/change-in-remote-after-clone.txt b/presentations/git-gerrit-workshop/change-in-remote-after-clone.txt
new file mode 100644
index 0000000..71f4042
--- /dev/null
+++ b/presentations/git-gerrit-workshop/change-in-remote-after-clone.txt
@@ -0,0 +1,78 @@
+Remote Branch Moves
+-------------------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  G [style=filled, fillcolor=coral1, color=red]
+  G -> F [color=red]
+  F -> E
+  E -> B [weight=0]
+  D -> C -> B -> A
+
+  L[style=invis] R[style=invis]
+  A1[label=A]
+  B1[label=B]
+  C1[label=C]
+  D1[label=D]
+  E1[label=E]
+  F1[label=F]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [fillcolor="#555555", fontcolor=white]
+
+  HEAD -> master -> D
+  "release1.0" [color=red, fontcolor=red]
+  "release1.0" -> G [weight=0, color=red]
+  { rank=same; G; "release1.0" }
+
+  { rank=same; F; D; master; release_old }
+  { rank=same; E; C }
+
+  release_old [label="release1.0", style=dashed, color=grey, fontcolor=grey]
+  F -> release_old [dir=back, style=dashed, color=grey]
+
+  D -> F [style=invis]
+  release_old -> L [style=invis]
+
+  L [style=invis] R [style=invis] L -> R [label=clone, style=invis, penwidth=2,
+    arrowhead=vee, color=red, fontname=arial, fontsize=30]
+  { rank=same; A; L; R; A1 }
+
+	edge [arrowhead=none]
+
+  F1 -> E1
+  E1 -> B1 [weight=0]
+  D1 -> C1 -> B1 -> A1
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD1 [label=HEAD, fillcolor="#555555", fontcolor=white]
+  master1 [label="master"]
+  "origin/master" [fillcolor=lightskyblue]
+  "origin/release1.0" [fillcolor=lightskyblue]
+
+  HEAD1 -> master1 -> D1
+  "origin/release1.0" -> F1
+  { rank=same; F1; D1; master1; "origin/release1.0" }
+  "origin/master" -> D1
+
+  D1 -> F1 [style=invis]
+  master1 -> R [style=invis]
+
+
+  remote [label="remote 'origin' repo", style=none, color=none]
+  A -> remote [style=invis]
+  local [label="local repo", style=none, color=none]
+  A1 -> local [style=invis]
+}
+----
+
+[role="incremental"]
+--
+* 'Q:' how to bring changes done in the remote repo into the local repo?
+--
diff --git a/presentations/git-gerrit-workshop/change-states.txt b/presentations/git-gerrit-workshop/change-states.txt
new file mode 100644
index 0000000..f1e5380
--- /dev/null
+++ b/presentations/git-gerrit-workshop/change-states.txt
@@ -0,0 +1,31 @@
+Change States
+-------------
+
+[graphviz]
+----
+digraph {
+  node [style=filled, shape=box, fillcolor=lightgrey, color=black,
+        fontname=arial, fontsize=30, height=1, width=3]
+  edge [style=bold, color="#385d8a", arrowhead=vee, fontname=arial, 
+        fontsize=20]
+  Draft [fillcolor=cornflowerblue, color=blue4]
+  Deleted [style=dashed]
+  InReview [label="In Review", fillcolor=darkseagreen1, color=green]
+  Submitted [label="Submitted,\nMerge Pending", fillcolor=darkseagreen1, color=green]
+
+  Draft -> InReview [label="publish"]
+  Draft -> Deleted [label="delete"]
+  InReview -> Submitted [label="submit"]
+  InReview -> Abandoned [label="abandon   "]
+  Abandoned -> InReview [label="restore"]
+  Submitted -> Merged [label="merge"]
+
+  { rank=same; Draft; Deleted}
+  { rank=same; InReview; Submitted}
+  { rank=same; Abandoned; Merged}
+
+  // formatting
+  Deleted -> Submitted [style=invis]
+  Abandoned -> Merged [label="evenlongerspacing", style=invis]
+}
+----
diff --git a/presentations/git-gerrit-workshop/change.txt b/presentations/git-gerrit-workshop/change.txt
new file mode 100644
index 0000000..557af9d
--- /dev/null
+++ b/presentations/git-gerrit-workshop/change.txt
@@ -0,0 +1,13 @@
+Change
+------
+
+Change consists of
+
+* Change-Id (important!)
+* metadata (owner, project, etc..)
+* one or more patch-sets
+* comments
+* votes
+
+Patch Set represents a Git Commit
+
diff --git a/presentations/git-gerrit-workshop/checkout-to-workingtree.txt b/presentations/git-gerrit-workshop/checkout-to-workingtree.txt
new file mode 100644
index 0000000..80771c8
--- /dev/null
+++ b/presentations/git-gerrit-workshop/checkout-to-workingtree.txt
@@ -0,0 +1,28 @@
+Checkout
+--------
+
+[graphviz]
+----
+digraph {
+  edge [style=bold, arrowhead=none, fontname=arial, fontsize=24]
+  node [style=bold, shape=folder, fontname=arial, fontsize=24, height=1, width=2]
+  wtree [shape=plaintext, label="<working tree>"]
+  p1 [label="", width=0, height=0]
+  p2 [label="", width=0, height=0]
+  git [label=".git", width=2]
+
+  Calculator -> p1
+  p1 -> git
+  { rank=same; p1; git }
+
+  p1 -> p2
+  p2 -> wtree
+  { rank=same; p2; wtree }
+
+  git -> wtree [color=red, arrowhead=normal, label=" git checkout", fontcolor=red]
+}
+----
+
+Checkout
+
+* populate the working tree with the commit you want to start working from
diff --git a/presentations/git-gerrit-workshop/cherry-pick-concept-1.txt b/presentations/git-gerrit-workshop/cherry-pick-concept-1.txt
new file mode 100644
index 0000000..fb6aa92
--- /dev/null
+++ b/presentations/git-gerrit-workshop/cherry-pick-concept-1.txt
@@ -0,0 +1,37 @@
+Cherry Pick
+-----------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none, fontname=arial, fontsize=16]
+  G [style=invis]
+
+  G -> D [style=invis]
+  D -> C -> B -> A
+  F -> E [label=" diff-2", fontcolor=red, labelfloat]
+  E -> B [weight=0, label=" diff-1", fontcolor=red, labelfloat]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+
+  HEAD -> master
+  master -> D
+  feature1 -> F [weight=0]
+
+  { rank=same; D; F; HEAD; master; feature1 }
+  { rank=same; C; E }
+
+  node [shape=circle]
+  L [style=invis]
+  L -> A [style=invis]
+  { rank=same; L; A }
+  HEAD -> L [style=invis]
+
+}
+----
+
+* 'Q:' what if we need to bring only the changes done in commit `F` into
+  the master branch?
diff --git a/presentations/git-gerrit-workshop/cherry-pick-concept-2.txt b/presentations/git-gerrit-workshop/cherry-pick-concept-2.txt
new file mode 100644
index 0000000..a090f98
--- /dev/null
+++ b/presentations/git-gerrit-workshop/cherry-pick-concept-2.txt
@@ -0,0 +1,44 @@
+Cherry Pick
+-----------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none, fontname=arial, fontsize=16]
+  G [style=filled, fillcolor=coral1, color=red]
+
+  G -> D [color=red, label=" diff-2", fontcolor=red, labelfloat]
+  D -> C -> B -> A
+  F -> E [label=" diff-2", fontcolor=red, labelfloat]
+  E -> B [weight=0, label=" diff-1", fontcolor=red, labelfloat]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [color=red, fontcolor=red]
+
+  HEAD -> master
+  master -> G [color=red]
+  feature1 -> F [weight=0]
+
+  old_master [label=master, style=dashed, color=grey, fontcolor=grey]
+  old_master -> D [style=dashed, color=grey]
+  { rank=same; old_master; D }
+
+  { rank=same; G; HEAD; master }
+  { rank=same; D; F; feature1 }
+  { rank=same; C; E }
+
+  L [style=invis]
+  old_master -> L [style=invis]
+  L -> A [style=invis]
+  { rank=same; L; A }
+}
+----
+
+  git cherry-pick feature1
+
+[role="incremental"]
+* applies only changes done by `F`, means the 'diff-2'
+* no parent realtion to `F`
diff --git a/presentations/git-gerrit-workshop/clone-remote-repo.txt b/presentations/git-gerrit-workshop/clone-remote-repo.txt
new file mode 100644
index 0000000..0631500
--- /dev/null
+++ b/presentations/git-gerrit-workshop/clone-remote-repo.txt
@@ -0,0 +1,77 @@
+Cloning Remote Repository
+-------------------------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  G [style=invis]
+  G -> F [style=invis]
+  F -> E
+  E -> B [weight=0]
+  D -> C -> B -> A
+
+  L[style=invis] R[style=invis]
+  A1[label=A]
+  B1[label=B]
+  C1[label=C]
+  D1[label=D]
+  E1[label=E]
+  F1[label=F]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [fillcolor="#555555", fontcolor=white]
+
+  HEAD -> master -> D
+  "release1.0" -> F
+
+  { rank=same; F; D; master; "release1.0" }
+  { rank=same; E; C }
+
+  D -> F [style=invis]
+  "release1.0" -> L [style=invis]
+
+  L [style=invis] R [style=invis] L -> R [label=clone, style=dotted, penwidth=2,
+    arrowhead=vee, color=red, fontname=arial, fontsize=30]
+  { rank=same; A; L; R; A1 }
+
+	edge [arrowhead=none]
+
+  F1 -> E1
+  E1 -> B1 [weight=0]
+  D1 -> C1 -> B1 -> A1
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD1 [label=HEAD, fillcolor="#555555", fontcolor=white]
+  master1 [label="master"]
+  "origin/master" [fillcolor=lightskyblue]
+  "origin/release1.0" [fillcolor=lightskyblue]
+
+  HEAD1 -> master1 -> D1
+  "origin/release1.0" -> F1
+  { rank=same; F1; D1; master1; "origin/release1.0" }
+  "origin/master" -> D1
+
+  D1 -> F1 [style=invis]
+  master1 -> R [style=invis]
+
+
+  remote [label="remote 'origin' repo", style=none, color=none]
+  A -> remote [style=invis]
+  local [label="local repo", style=none, color=none]
+  A1 -> local [style=invis]
+}
+----
+
+* complete repository cloned
+* cloned repository gets symbolic name `origin`, by default.
+* `.git/config` file will contain:
+
+  [remote "origin"]
+    url = <remote-repository-URL>
+
+* 'Remote Tracking Branches' are created in the local repository
diff --git a/presentations/git-gerrit-workshop/cloning-and-fetching-title.txt b/presentations/git-gerrit-workshop/cloning-and-fetching-title.txt
new file mode 100644
index 0000000..55d53e2
--- /dev/null
+++ b/presentations/git-gerrit-workshop/cloning-and-fetching-title.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Cloning and Fetching
+--------------------
diff --git a/presentations/git-gerrit-workshop/code-review-benefits.txt b/presentations/git-gerrit-workshop/code-review-benefits.txt
new file mode 100644
index 0000000..baf3eec
--- /dev/null
+++ b/presentations/git-gerrit-workshop/code-review-benefits.txt
@@ -0,0 +1,14 @@
+Code Review - Benefits
+----------------------
+
+[role="incremental"]
+* Four eyes catch more bugs
+** Catch bugs early to save hours of debugging
+* Mentoring of new developers / contributors
+** Learn from mistakes without breaking stuff
+* Establish trust relationships 
+** Prepare for more delegation
+* Good alternative to pair programming
+** asynchronous and across locations
+* Coding standards
+** Keep overall readability & code quality high
diff --git a/presentations/git-gerrit-workshop/code-review.txt b/presentations/git-gerrit-workshop/code-review.txt
new file mode 100644
index 0000000..52f8085
--- /dev/null
+++ b/presentations/git-gerrit-workshop/code-review.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Code-Review
+-----------
diff --git a/presentations/git-gerrit-workshop/commit-knows-parents.txt b/presentations/git-gerrit-workshop/commit-knows-parents.txt
new file mode 100644
index 0000000..947c457
--- /dev/null
+++ b/presentations/git-gerrit-workshop/commit-knows-parents.txt
@@ -0,0 +1,32 @@
+Commits know their Parent
+-------------------------
+
+[graphviz]
+----
+digraph {
+  node [shape=box, style=filled, fillcolor="#ABFFBB", fontname=arial, fontsize=18]
+
+  L [label="", shape=box, width=0, height=0]
+  R [label="", shape=box, width=0, height=0]
+  {rank=source; L; R}
+  commit1 [fillcolor="#FFAAA1", label="Commit 1"]
+  commit2 [fillcolor="#FFAAA1", label="Commit 2"]
+  commit3 [fillcolor="#FFAAA1", label="Commit 3"]
+
+  snapshot1 [fillcolor=grey, label="Snapshot 1"]
+  snapshot2 [fillcolor=grey, label="Snapshot 2"]
+  snapshot3 [fillcolor=grey, label="Snapshot 3"]
+  commit1 -> snapshot1
+  commit2 -> snapshot2
+  commit3 -> snapshot3
+
+  commit1 -> commit2 -> commit3 [dir=back]
+  {rank=same; commit1; commit2; commit3 }
+  L -> commit1 [style=invis]
+  R -> commit3 [style=invis]
+  L -> R [label=time, arrowhead=normal, fontsize=20, fontname=arial]
+}
+----
+
+[role="incremental"]
+* each commit knows its parent
diff --git a/presentations/git-gerrit-workshop/commit-message.txt b/presentations/git-gerrit-workshop/commit-message.txt
new file mode 100644
index 0000000..c2da077
--- /dev/null
+++ b/presentations/git-gerrit-workshop/commit-message.txt
@@ -0,0 +1,22 @@
+Commit Message
+--------------
+
+----
+First line is header, shall be shorter than 70 chars
+
+Separate the body from the header by an empty line. The commit message
+should describe why you are doing the change. That's what typically helps
+best to understand what the change is all about. The details of what you
+changed are visible from the file diffs.
+
+Body can be as many paragraphs as you want, shouldn't exceed width of 80
+chars. This helps command line tools to render it nicely. Paragraphs are
+separated by empty lines.
+
+Bug: NGP-123 is rendered as a hyperlink to jtrack
+----
+
+[role="incremental"]
+* first line is header
+* separated by a blank line follows the body
+* last paragraph is for meta dat in the `key: value` format
diff --git a/presentations/git-gerrit-workshop/commit-object.txt b/presentations/git-gerrit-workshop/commit-object.txt
new file mode 100644
index 0000000..1e78b0a
--- /dev/null
+++ b/presentations/git-gerrit-workshop/commit-object.txt
@@ -0,0 +1,21 @@
+Commit Object Structure
+-----------------------
+
+[graphviz]
+----
+digraph {
+  rankdir=LR
+  node [shape=record, style=filled, fillcolor="#FFAAA1", fontname=arial, fontsize=18]
+  commit [label="commit|<f1> tree: 9ce23|Author: John Doe|Committer: John Doe|Initial commit of my project\n\n..."]
+
+  snapshot1 [fillcolor=grey, label="Snapshot 1"]
+  commit:f1 -> snapshot1
+}
+----
+
+[role="incremental"]
+* 'SHA1' - globally unique commit ID
+* 'SHA1' is function of the commit object content
+** 40-digit hexadecimal number
+** seen in `git log` output, git history view etc...
+** examples: `1590b5c...`, `97aff7a...`, `c0ffee...`
diff --git a/presentations/git-gerrit-workshop/commits-are-snapshots.txt b/presentations/git-gerrit-workshop/commits-are-snapshots.txt
new file mode 100644
index 0000000..1266d37
--- /dev/null
+++ b/presentations/git-gerrit-workshop/commits-are-snapshots.txt
@@ -0,0 +1,38 @@
+Commits are Complete Snapshots
+------------------------------
+
+[graphviz]
+----
+digraph {
+    node [shape=box, style=filled, fillcolor="#ABFFBB", fontname=arial, fontsize=18]
+    edge [arrowhead=none]
+
+    L [label="", shape=box, width=0, height=0]
+    R [label="", shape=box, width=0, height=0]
+    {rank=source; L; R}
+    commit1 [fillcolor="#FFAAA1", label="Commit 1"]
+    commit1 -> A -> B -> C
+
+    commit2 [fillcolor="#FFAAA1", label="Commit 2"]
+    link1B [label="B", style=dashed]
+    commit2 -> A1 -> link1B -> C1
+
+    commit3 [fillcolor="#FFAAA1", label="Commit 3"]
+    link2B [label="B", style=dashed]
+    link1A1 [label="A1", style=dashed]
+    commit3 -> link1A1 -> link2B -> C2
+
+    commit1 -> commit2 -> commit3 [style=invis]
+    {rank=same; commit1; commit2; commit3 }
+    L -> commit1 [style=invis]
+    R -> commit3 [style=invis]
+    L -> R [label=time, arrowhead=normal, fontsize=20, fontname=arial]
+}
+----
+
+[role="incremental"]
+* imagine our project contains 3 files: `A`, `B` and `C`
+* every time we commit changes a new commit is created: `Commit 1`, `Commit 2`
+  and `Commit 3`
+* every commit is a 'full snapshot' of the whole project
+* Git optimizes storage, will not create copies of non-modified files
diff --git a/presentations/git-gerrit-workshop/commits.txt b/presentations/git-gerrit-workshop/commits.txt
new file mode 100644
index 0000000..214d83b
--- /dev/null
+++ b/presentations/git-gerrit-workshop/commits.txt
@@ -0,0 +1,17 @@
+Commits
+-------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  C -> B -> A
+}
+----
+
+Commit history
+
+* `C` is successor of `B`
+* `B` is successor of `A`
diff --git a/presentations/git-gerrit-workshop/committing-changes.txt b/presentations/git-gerrit-workshop/committing-changes.txt
new file mode 100644
index 0000000..315d751
--- /dev/null
+++ b/presentations/git-gerrit-workshop/committing-changes.txt
@@ -0,0 +1,25 @@
+Committing Changes
+------------------
+
+[graphviz]
+----
+digraph {
+  edge [style=bold, fontname=arial, fontsize=24]
+  node [style=bold, shape=folder, fontname=arial, fontsize=24, height=1, width=2]
+  wtree [shape=plaintext, label="<working tree>"]
+
+  subgraph cluster_git {
+    label = ".git"
+    fontsize=24
+    fontname=arial
+    objects [color=red, fontcolor=red]
+    index -> objects [label=" git commit ", color=red, fontcolor=red]
+    {rank=same; index; objects}
+  }
+
+  index -> wtree [dir=back, label=" git add <file>"]
+}
+----
+
+* `git commit` commits 'staged' changes only - the 'index'
+* there could be non-staged changes still in the working tree
diff --git a/presentations/git-gerrit-workshop/comparing-patch-sets.txt b/presentations/git-gerrit-workshop/comparing-patch-sets.txt
new file mode 100644
index 0000000..7e40b05
--- /dev/null
+++ b/presentations/git-gerrit-workshop/comparing-patch-sets.txt
@@ -0,0 +1,10 @@
+Comparing Patch Sets
+--------------------
+
+image:../../img/compare-patch-sets-1.png[]
+
+Comparing Patch Sets
+--------------------
+
+image:../../img/compare-patch-sets-2.png[]
+
diff --git a/presentations/git-gerrit-workshop/continuous-integration-builds.txt b/presentations/git-gerrit-workshop/continuous-integration-builds.txt
new file mode 100644
index 0000000..317cb03
--- /dev/null
+++ b/presentations/git-gerrit-workshop/continuous-integration-builds.txt
@@ -0,0 +1,11 @@
+Continuous Integration Builds
+-----------------------------
+
+* Use Jenkins/Hudson to build and test each merged change
+* Gerrit Trigger plugin: +
+automatically build and test every uploaded patch set +
+-> votes on the change in Gerrit +
++
+image:../../img/hudsonvoter-as-reviewer.png[]
++
+image:../../img/hudsonvoter-comments.png[]
diff --git a/presentations/git-gerrit-workshop/detached-head-commit.txt b/presentations/git-gerrit-workshop/detached-head-commit.txt
new file mode 100644
index 0000000..1fa6e39
--- /dev/null
+++ b/presentations/git-gerrit-workshop/detached-head-commit.txt
@@ -0,0 +1,74 @@
+Detached HEAD - Committing Changes
+----------------------------------
+
+* it is possible to commit changes even when HEAD is detached
+* however, no branch will be updated
+* `HEAD` is updated - and stays detached
+
+[[graph-left0]]
+--
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  F -> E
+  E -> B [weight=0]
+  D -> C -> B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [fillcolor="#555555", fontcolor=white]
+  "origin/release1.0" [fillcolor=lightskyblue]
+  "origin/master" [fillcolor=lightskyblue]
+  HEAD
+
+  HEAD -> F
+  master -> D
+  "origin/release1.0" -> F
+  "origin/master" -> D
+
+  { rank=same; F; D; master; "origin/release1.0" }
+  { rank=same; E; C }
+  { ranke=same; "origin/master"; HEAD }
+
+  D -> F [style=invis]
+  C -> E [style=invis]
+}
+----
+--
+
+[[graph-right]]
+--
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+  G [style=filled, fillcolor=coral1, color=red]
+
+  G -> F -> E
+  E -> B [weight=0]
+  D -> C -> B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [fillcolor="#555555", fontcolor=white]
+  "origin/release1.0" [fillcolor=lightskyblue]
+  "origin/master" [fillcolor=lightskyblue]
+  HEAD [color=red, fillcolor=red]
+
+  HEAD -> G [color=red]
+  master -> D
+  "origin/release1.0" -> F
+  "origin/master" -> D
+
+  { rank=same; F; D; master; "origin/release1.0" }
+  { rank=same; E; C }
+
+  D -> F [style=invis]
+  C -> E [style=invis]
+}
+----
+--
diff --git a/presentations/git-gerrit-workshop/distributed-versioning-systems-1.txt b/presentations/git-gerrit-workshop/distributed-versioning-systems-1.txt
new file mode 100644
index 0000000..5c34d09
--- /dev/null
+++ b/presentations/git-gerrit-workshop/distributed-versioning-systems-1.txt
@@ -0,0 +1,11 @@
+Distributed Versioning Systems
+------------------------------
+Distributed means no central repository
+
+* each developer has a complete, local repository
+* easy offline usage
+* easy to branch a project
+
+Popular Examples: Git, Mercurial, Bazaar
+
+Git: created 2005 for Linux Kernel Development
diff --git a/presentations/git-gerrit-workshop/distributed-versioning-systems-2.txt b/presentations/git-gerrit-workshop/distributed-versioning-systems-2.txt
new file mode 100644
index 0000000..bd8d7df
--- /dev/null
+++ b/presentations/git-gerrit-workshop/distributed-versioning-systems-2.txt
@@ -0,0 +1,29 @@
+Distributed Versioning Systems
+------------------------------
+
+[[centralized]]
+--
+Centralized
+
+image:../../img/centralized-vcs-concept.png[]
+--
+
+[[distributed]]
+--
+Distributed
+
+image:../../img/distributed-vcs-concept.png[]
+--
+
+++++
+<style type="text/css">
+#centralized {
+  float: left;
+  text-align: center;
+}
+#distributed {
+  left-margin: 50;
+  text-align: center;
+}
+</style>
+++++
diff --git a/presentations/git-gerrit-workshop/exercises-landscape.txt b/presentations/git-gerrit-workshop/exercises-landscape.txt
new file mode 100644
index 0000000..74c2d4c
--- /dev/null
+++ b/presentations/git-gerrit-workshop/exercises-landscape.txt
@@ -0,0 +1,4 @@
+Exercises Landscape
+-------------------
+
+image::../../img/exercise-landscape.png[]
diff --git a/presentations/git-gerrit-workshop/exercises-title.txt b/presentations/git-gerrit-workshop/exercises-title.txt
new file mode 100644
index 0000000..ccba645
--- /dev/null
+++ b/presentations/git-gerrit-workshop/exercises-title.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Exercises
+---------
diff --git a/presentations/git-gerrit-workshop/exercises1-list.txt b/presentations/git-gerrit-workshop/exercises1-list.txt
new file mode 100644
index 0000000..cef75a1
--- /dev/null
+++ b/presentations/git-gerrit-workshop/exercises1-list.txt
@@ -0,0 +1,8 @@
+Exercises
+---------
+
+. Clone the example repository
+. Develop a feature
+. Develop another feature and use staging view
+. Work on branches in parallel
+. Fetch the latest state
diff --git a/presentations/git-gerrit-workshop/exercises2-list.txt b/presentations/git-gerrit-workshop/exercises2-list.txt
new file mode 100644
index 0000000..4830409
--- /dev/null
+++ b/presentations/git-gerrit-workshop/exercises2-list.txt
@@ -0,0 +1,9 @@
+Exercises
+---------
+
+[start=6]
+. Merging, Rebasing, Resolving Conflicts
+. History View
+. Reset Branch to Previous State
+. Change a Series of Commits
+. Git Blame
diff --git a/presentations/git-gerrit-workshop/fetch-facts.txt b/presentations/git-gerrit-workshop/fetch-facts.txt
new file mode 100644
index 0000000..f71dfc1
--- /dev/null
+++ b/presentations/git-gerrit-workshop/fetch-facts.txt
@@ -0,0 +1,7 @@
+Fetch
+-----
+
+* Always safe to do
+* Updates only remote tracking branches
+* Does never change local branches
+* Never changes your working tree
diff --git a/presentations/git-gerrit-workshop/fetch-open-change-locally.txt b/presentations/git-gerrit-workshop/fetch-open-change-locally.txt
new file mode 100644
index 0000000..7f9971e
--- /dev/null
+++ b/presentations/git-gerrit-workshop/fetch-open-change-locally.txt
@@ -0,0 +1,11 @@
+Fetch Open Change locally
+-------------------------
+
+* Use `git fetch` to fetch it locally if you want to play with it
+* Gerrit creates fetch command for you
++
+image:../../img/fetch-change-1.png[]
+
+* In EGit use "Fetch from Gerrit..."
++
+image:../../img/fetch-change-2.png[]
diff --git a/presentations/git-gerrit-workshop/fetch-updates-remote-tracking-branches.txt b/presentations/git-gerrit-workshop/fetch-updates-remote-tracking-branches.txt
new file mode 100644
index 0000000..ddac062
--- /dev/null
+++ b/presentations/git-gerrit-workshop/fetch-updates-remote-tracking-branches.txt
@@ -0,0 +1,82 @@
+Fetch
+-----
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  G [style=filled, fillcolor=coral1, color=red]
+  G -> F [color=red]
+  F -> E
+  E -> B [weight=0]
+  D -> C -> B -> A
+
+  L[style=invis] R[style=invis]
+  A1[label=A]
+  B1[label=B]
+  C1[label=C]
+  D1[label=D]
+  E1[label=E]
+  F1[label=F]
+  G1[label=G]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [fillcolor="#555555", fontcolor=white]
+
+  HEAD -> master -> D
+  "release1.0" [color=red, fontcolor=red]
+  "release1.0" -> G [weight=0, color=red]
+  { rank=same; G; "release1.0" }
+
+  { rank=same; F; D; master; release_old }
+  { rank=same; E; C }
+
+  release_old [label="release1.0", style=dashed, color=grey, fontcolor=grey]
+  F -> release_old [dir=back, style=dashed, color=grey]
+
+  D -> F [style=invis]
+  release_old -> L [style=invis]
+
+  L [style=invis] R [style=invis] L -> R [label=fetch, style=dotted, penwidth=2,
+    arrowhead=vee, color=red, fontname=arial, fontsize=30]
+  { rank=same; A; L; R; A1 }
+
+	edge [arrowhead=none]
+
+  G1 [style=filled, fillcolor=coral1, color=red]
+  G1 -> F1 [color=red]
+  F1 -> E1
+  E1 -> B1 [weight=0]
+  D1 -> C1 -> B1 -> A1
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD1 [label=HEAD, fillcolor="#555555", fontcolor=white]
+  master1 [label="master"]
+  "origin/master" [fillcolor=lightskyblue]
+  "origin/release1.0" [fillcolor=lightskyblue]
+
+  HEAD1 -> master1 -> D1
+  "origin/release1.0" -> G1 [weight=0]
+  { rank=same; G1; "origin/release1.0" }
+  { rank=same; F1; D1; master1; release1_old }
+  "origin/master" -> D1
+
+  release1_old [label="origin/release1.0", style=dashed, color=grey, fontcolor=grey]
+  F1 -> release1_old [dir=back, style=dashed, color=grey]
+
+  D1 -> F1 [style=invis]
+  master1 -> R [style=invis]
+
+  remote [label="remote 'origin' repo", style=none, color=none]
+  A -> remote [style=invis]
+  local [label="local repo", style=none, color=none]
+  A1 -> local [style=invis]
+}
+----
+
+* `fetch` updates the remote tracking branches to bring the changes done in
+  the remote branches
diff --git a/presentations/git-gerrit-workshop/gerrit-0.txt b/presentations/git-gerrit-workshop/gerrit-0.txt
new file mode 100644
index 0000000..34b6b76
--- /dev/null
+++ b/presentations/git-gerrit-workshop/gerrit-0.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Gerrit
+------
diff --git a/presentations/git-gerrit-workshop/gerrit-1.txt b/presentations/git-gerrit-workshop/gerrit-1.txt
new file mode 100644
index 0000000..0f0d600
--- /dev/null
+++ b/presentations/git-gerrit-workshop/gerrit-1.txt
@@ -0,0 +1,46 @@
+Gerrit
+------
+
+Server managing central Git repositories
+
+image:../../img/gerrit-1.png[]
+
+Gerrit - Access Control
+-----------------------
+
+image:../../img/gerrit-2.png[]
+
+Gerrit - Access Control
+-----------------------
+
+image:../../img/gerrit-3.png[]
+
+Gerrit - Access Control
+-----------------------
+
+image:../../img/gerrit-4.png[]
+
+Gerrit - Access Control
+-----------------------
+
+image:../../img/gerrit-5.png[]
+
+Gerrit - Code Review
+--------------------
+
+image:../../img/gerrit-1.png[]
+
+Gerrit - Code Review
+--------------------
+
+image:../../img/gerrit-6.png[]
+
+Gerrit - Code Review
+--------------------
+
+image:../../img/gerrit-7.png[]
+
+Gerrit - Code Review
+--------------------
+
+image:../../img/gerrit-8.png[]
diff --git a/presentations/git-gerrit-workshop/gerrit-2.txt b/presentations/git-gerrit-workshop/gerrit-2.txt
new file mode 100644
index 0000000..0d0c6ca
--- /dev/null
+++ b/presentations/git-gerrit-workshop/gerrit-2.txt
@@ -0,0 +1,4 @@
+Gerrit - Demo
+-------------
+
+image:../../img/gerrit-9.png[]
diff --git a/presentations/git-gerrit-workshop/gerrit-concepts.txt b/presentations/git-gerrit-workshop/gerrit-concepts.txt
new file mode 100644
index 0000000..f176b27
--- /dev/null
+++ b/presentations/git-gerrit-workshop/gerrit-concepts.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Gerrit Concepts
+---------------
diff --git a/presentations/git-gerrit-workshop/gerrit-exercises-1.txt b/presentations/git-gerrit-workshop/gerrit-exercises-1.txt
new file mode 100644
index 0000000..aac6dfb
--- /dev/null
+++ b/presentations/git-gerrit-workshop/gerrit-exercises-1.txt
@@ -0,0 +1,6 @@
+Exercises
+---------
+
+. Configure Push to Gerrit
+. Push change to Gerrit
+. Review change
diff --git a/presentations/git-gerrit-workshop/gerrit-exercises-2.txt b/presentations/git-gerrit-workshop/gerrit-exercises-2.txt
new file mode 100644
index 0000000..736d7be
--- /dev/null
+++ b/presentations/git-gerrit-workshop/gerrit-exercises-2.txt
@@ -0,0 +1,7 @@
+Exercises
+---------
+
+[start=4]
+. Improve a change
+. Submit a change to the codebase
+. View Gerrit review notes
diff --git a/presentations/git-gerrit-workshop/gerrit-workflow-1.txt b/presentations/git-gerrit-workshop/gerrit-workflow-1.txt
new file mode 100644
index 0000000..092079c
--- /dev/null
+++ b/presentations/git-gerrit-workshop/gerrit-workflow-1.txt
@@ -0,0 +1,4 @@
+Gerrit Workflow
+---------------
+
+image:../../img/gerrit-overview-workflow-1.png[]
diff --git a/presentations/git-gerrit-workshop/gerrit-workflow-2.txt b/presentations/git-gerrit-workshop/gerrit-workflow-2.txt
new file mode 100644
index 0000000..348762d
--- /dev/null
+++ b/presentations/git-gerrit-workshop/gerrit-workflow-2.txt
@@ -0,0 +1,4 @@
+Gerrit Workflow
+---------------
+
+image:../../img/gerrit-overview-workflow-2.png[]
diff --git a/presentations/git-gerrit-workshop/git-configuration-commands.txt b/presentations/git-gerrit-workshop/git-configuration-commands.txt
new file mode 100644
index 0000000..c96cfd6
--- /dev/null
+++ b/presentations/git-gerrit-workshop/git-configuration-commands.txt
@@ -0,0 +1,22 @@
+Git Configuration Commands
+--------------------------
+
+.Listing and editing git configuration
+----
+git config -l           <1>
+git config -l --global  <1>
+git config -l --system  <1>
+
+git config user.name "John Doe"           <2>
+git config --global user.name "John Doe"  <2>
+git config --system user.name "John Doe"  <2>
+
+git config -e           <3>
+git config -e --global  <3>
+git config -e --system  <3>
+----
+
+<1> List configuration options: overlayed, user global or system wide
+<2> Set an option for: current repository, user global or system wide
+<3> Open the config file for: current repository, user global or system
+wide in the default editor
diff --git a/presentations/git-gerrit-workshop/git-configuration-eclipse.txt b/presentations/git-gerrit-workshop/git-configuration-eclipse.txt
new file mode 100644
index 0000000..d588877
--- /dev/null
+++ b/presentations/git-gerrit-workshop/git-configuration-eclipse.txt
@@ -0,0 +1,4 @@
+Git Configuration from Eclipse
+------------------------------
+
+image:../../img/git-config-eclipse-prefs.png[]
diff --git a/presentations/git-gerrit-workshop/git-configuration-inheritance.txt b/presentations/git-gerrit-workshop/git-configuration-inheritance.txt
new file mode 100644
index 0000000..f6c11e4
--- /dev/null
+++ b/presentations/git-gerrit-workshop/git-configuration-inheritance.txt
@@ -0,0 +1,22 @@
+Git Configuration Files
+-----------------------
+
+[graphviz]
+----
+digraph {
+  rankdir=BT
+  node [style=bold, shape=box, fontname=arial, fontsize=20, width=4, height=1.2]
+  edge [style=bold, arrowhead=empty, arrowsize=2]
+
+  system [label="System\n<gitinst>/etc/gitconfig", style=filled, fillcolor="#FFAAA1"]
+  global [label="User Global\n$HOME/.gitconfig", style=filled, fillcolor=lightskyblue]
+  repository [label="Repository Specific\n.git/config", style=filled, fillcolor="#ABFFBB"]
+  repository -> global -> system
+}
+----
+
+3 levels of configurations files:
+[role="incremental"]
+* system wide
+* user global
+* repository local
diff --git a/presentations/git-gerrit-workshop/git-gerrit-workshop.txt b/presentations/git-gerrit-workshop/git-gerrit-workshop.txt
new file mode 100644
index 0000000..8a0f39d
--- /dev/null
+++ b/presentations/git-gerrit-workshop/git-gerrit-workshop.txt
@@ -0,0 +1,289 @@
+Git/Gerrit Workshop
+===================
+:backend: slidy
+:max-width: 70em
+:data-uri:
+
+[[title-page]]
+Git and Gerrit Workshop
+-----------------------
+
+Agenda - Morning
+----------------
+
+[[agenda-item]]
+Introduction
+~~~~~~~~~~~~
+<<<
+[[agenda-item]]
+Basic Git Concepts
+~~~~~~~~~~~~~~~~~~
+<<<
+[[agenda-item]]
+Exercises: Local Development, Branches
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+<<<
+[[agenda-item]]
+Merge & Rebase
+~~~~~~~~~~~~~~
+<<<
+[[agenda-item]]
+Exercises: Merge, Rebase, History Rewriting
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Agenda - Afternoon
+------------------
+<<<
+[[agenda-item]]
+Push
+~~~~
+<<<
+[[agenda-item]]
+Gerrit Concepts
+~~~~~~~~~~~~~~~
+<<<
+[[agenda-item]]
+Exercises: Code Review with Gerrit
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+<<<
+[[agenda-item]]
+Q & A
+~~~~~
+
+include::distributed-versioning-systems-1.txt[]
+
+include::distributed-versioning-systems-2.txt[]
+
+<<<
+[[git-info]]
+include::git.txt[]
+
+<<<
+[[git-concepts]] +
+include::basic-git-concepts.txt[]
+
+<<<
+[[git-structure]]
+include::location-and-structure.txt[]
+
+<<<
+[[checkout]]
+include::checkout-to-workingtree.txt[]
+
+include::making-changes.txt[]
+
+include::staging-changes.txt[]
+
+<<<
+[[commit]]
+include::committing-changes.txt[]
+
+include::commits-are-snapshots.txt[]
+
+include::commit-knows-parents.txt[]
+
+include::commit-object.txt[]
+
+include::commit-message.txt[]
+
+include::commits.txt[]
+
+<<<
+[[branches]]
+include::branches-definition-1.txt[]
+
+include::branches-definition-2.txt[]
+
+include::branches-many.txt[]
+
+include::head.txt[]
+
+include::head-moves-on-checkout.txt[]
+
+include::branches-reset.txt[]
+
+<<<
+[[clone]] +
+include::cloning-and-fetching-title.txt[]
+
+include::clone-remote-repo.txt[]
+
+<<<
+[[fetch]]
+include::change-in-remote-after-clone.txt[]
+
+include::fetch-updates-remote-tracking-branches.txt[]
+
+include::fetch-facts.txt[]
+
+include::git-configuration-inheritance.txt[]
+
+include::git-configuration-commands.txt[]
+
+include::git-configuration-eclipse.txt[]
+
+include::exercises-title.txt[]
+
+include::sample-application.txt[]
+
+include::exercises-landscape.txt[]
+
+include::exercises1-list.txt[]
+
+<<<
+[[merge]] +
+include::merge-and-rebase-title.txt[]
+
+include::merge-concept-1.txt[]
+
+include::merge-concept-2.txt[]
+
+include::merge-fast-forward-question.txt[]
+
+include::merge-fast-forward-concept.txt[]
+
+<<<
+[[cherry-pick]]
+include::cherry-pick-concept-1.txt[]
+
+include::cherry-pick-concept-2.txt[]
+
+<<<
+[[rebase]]
+include::rebase.txt[]
+
+include::pull.txt[]
+
+include::exercises-title.txt[]
+
+include::exercises2-list.txt[]
+
+<<<
+[[push]] +
+include::push-0.txt[]
+
+include::push-1.txt[]
+
+include::push-2.txt[]
+
+include::push-3.txt[]
+
+<<<
+[[gerrit-intro]] +
+include::gerrit-0.txt[]
+
+include::gerrit-1.txt[]
+
+include::gerrit-2.txt[]
+
+<<<
+[[code-review]] +
+include::code-review.txt[]
+
+include::modern-code-review.txt[]
+
+include::code-review-benefits.txt[]
+
+<<<
+[[gerrit-concepts]] +
+include::gerrit-concepts.txt[]
+
+<<<
+[[push-for-review]]
+include::push-for-code-review-1.txt[]
+
+include::push-for-code-review-2.txt[]
+
+include::push-for-code-review-3.txt[]
+
+include::push-for-code-review-4.txt[]
+
+<<<
+[[change]]
+include::change.txt[]
+
+<<<
+[[review-and-vote]]
+include::review-and-vote.txt[]
+
+include::exercises-title.txt[]
+
+include::gerrit-exercises-1.txt[]
+
+<<<
+[[refine-change]] +
+include::refining-a-change.txt[]
+
+include::new-change-vs-new-patch-set-1.txt[]
+
+include::new-change-vs-new-patch-set-2.txt[]
+
+include::push-new-patch-set-1.txt[]
+
+include::push-new-patch-set-2.txt[]
+
+include::comparing-patch-sets.txt[]
+
+<<<
+[[fetch-open-change]]
+include::fetch-open-change-locally.txt[]
+
+include::push-new-patch-set-3.txt[]
+
+include::submitting-a-change.txt[]
+
+<<<
+[[submit]]
+include::submit.txt[]
+
+<<<
+[[path-conflict]]
+include::path-conflict.txt[]
+
+include::resolve-path-conflict-by-rebase.txt[]
+
+include::change-states.txt[]
+
+include::submitted-merge-pending.txt[]
+
+include::exercises-title.txt[]
+
+include::gerrit-exercises-2.txt[]
+
+<<<
+[[cip]]
+include::continuous-integration-builds.txt[]
+
+include::gerrit-workflow-1.txt[]
+
+include::gerrit-workflow-2.txt[]
+
+include::push-fails-why.txt[]
+
+include::notifications.txt[]
+
+include::queries.txt[]
+
+include::access-rights.txt[]
+
+include::bypassing-code-review.txt[]
+
+<<<
+[[best-practices]] +
+include::../gerrit-and-code-review-best-practices/gerrit-and-code-review-best-practices-slides.txt[]
+
+++++
+<style type="text/css">
+#title-page {
+  border-bottom: 0;
+  text-align: center;
+  position: relative;
+  top: 30%;
+  font-size: 100px;
+}
+#agenda-item {
+  border-bottom: 0;
+}
+</style>
+++++
+
diff --git a/presentations/git-gerrit-workshop/git.txt b/presentations/git-gerrit-workshop/git.txt
new file mode 100644
index 0000000..c4c20a2
--- /dev/null
+++ b/presentations/git-gerrit-workshop/git.txt
@@ -0,0 +1,14 @@
+Git
+---
+Git is increasingly popular
+
+image:../../img/linux-logo.png[]
+image:../../img/android-logo.png[]
+image:../../img/github-logo.png[]
+image:../../img/eclipse-logo.png[]
+
+* Linux, Android, Eclipse, Ruby on Rails
+* Github
+* integration into Eclipse, Netbeans, XCode
+* Google, SAP, Qualcomm, Sony Mobile, NVIDIA, Twitter, Garmin,
+  Spotify, ...
diff --git a/presentations/git-gerrit-workshop/head-moves-on-checkout.txt b/presentations/git-gerrit-workshop/head-moves-on-checkout.txt
new file mode 100644
index 0000000..5f9a542
--- /dev/null
+++ b/presentations/git-gerrit-workshop/head-moves-on-checkout.txt
@@ -0,0 +1,37 @@
+HEAD
+----
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  F -> E -> B -> A
+  D -> C
+  C -> B [weight=0]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [style=dashed, color=grey, fontcolor=grey]
+  "origin/master" [fillcolor=lightskyblue]
+
+  HEAD -> feature1 [style=dashed, color=grey]
+  feature1 -> D
+  "origin/master" -> E
+  bugfix15 -> F
+
+  { rank=same; F; D; bugfix15; feature1 }
+  { rank=same; "origin/master"; E; C }
+
+  D -> F [style=invis]
+  C -> E [style=invis]
+
+  HEAD1 [color=red, fillcolor=red, fontcolor=white, label=HEAD]
+  HEAD1 -> bugfix15 [color=red]
+}
+----
+
+[role="incremental"]
+* `checkout` moves `HEAD`
+* `checkout` also updates the working tree
diff --git a/presentations/git-gerrit-workshop/head.txt b/presentations/git-gerrit-workshop/head.txt
new file mode 100644
index 0000000..5e7093a
--- /dev/null
+++ b/presentations/git-gerrit-workshop/head.txt
@@ -0,0 +1,40 @@
+HEAD
+----
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  F -> E -> B -> A
+  D -> C
+  C -> B [weight=0]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [fillcolor="#555555", fontcolor=white]
+  "origin/master" [fillcolor=lightskyblue]
+
+  HEAD -> feature1 -> D
+  bugfix15 -> F
+  "origin/master" -> E
+
+
+  { rank=same; F; D bugfix15; feature1 }
+  { rank=same; "origin/master"; E; C }
+
+  D -> F [style=invis]
+  C -> E [style=invis]
+}
+----
+
+'Current Branch' - branch pointed by `HEAD`
+
+* `git commit` updates the current branch
+* `git checkout` sets the current branch
+
+[role="incremental"]
+--
+* 'Q:' what happens on `git checkout bugfix15` ?
+--
diff --git a/presentations/git-gerrit-workshop/index.txt b/presentations/git-gerrit-workshop/index.txt
new file mode 100644
index 0000000..313a364
--- /dev/null
+++ b/presentations/git-gerrit-workshop/index.txt
@@ -0,0 +1,6 @@
+== Git/Gerrit Training
+
+* link:abstract.html[Training Abstract]
+* link:git-gerrit-workshop.html[Slides]
+* link:../../exercises/egit/git/index.html[Git Exercises]
+* link:../../exercises/gerrit/egit/index.html[Gerrit Exercises]
diff --git a/presentations/git-gerrit-workshop/location-and-structure.txt b/presentations/git-gerrit-workshop/location-and-structure.txt
new file mode 100644
index 0000000..376bc8f
--- /dev/null
+++ b/presentations/git-gerrit-workshop/location-and-structure.txt
@@ -0,0 +1,9 @@
+Git Repository Location and Structure
+-------------------------------------
+
+image:../../img/git-fs-layout.png[]
+
+[role="incremental"]
+* `.git` folder is the 'Git repository'
+* files/folders next to `.git` folder are the 'working tree'
+* one working tree per repository
diff --git a/presentations/git-gerrit-workshop/makeslides b/presentations/git-gerrit-workshop/makeslides
new file mode 100755
index 0000000..1484ca3
--- /dev/null
+++ b/presentations/git-gerrit-workshop/makeslides
@@ -0,0 +1,4 @@
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons git-gerrit-workshop.txt
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons workshop-preparations.txt
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons abstract.txt
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons index.txt
diff --git a/presentations/git-gerrit-workshop/making-changes.txt b/presentations/git-gerrit-workshop/making-changes.txt
new file mode 100644
index 0000000..38a5577
--- /dev/null
+++ b/presentations/git-gerrit-workshop/making-changes.txt
@@ -0,0 +1,36 @@
+Making Changes
+--------------
+
+[graphviz]
+----
+digraph {
+  edge [style=bold, arrowhead=none, fontname=arial, fontsize=24]
+  node [style=bold, shape=folder, fontname=arial, fontsize=24, height=1, width=2]
+  wtree [shape=plaintext, label="<working tree>", fontcolor=red]
+  p1 [label="", width=0, height=0]
+  p2 [label="", width=0, height=0]
+  git [label=".git", width=2]
+
+  Calculator -> p1
+  p1 -> git
+  { rank=same; p1; git }
+
+  p1 -> p2
+  p2 -> wtree
+  { rank=same; p2; wtree }
+
+}
+----
+
+Just start doing your changes
+
+[role="incremental"]
+* modify, add, delete files
+* no need to tell Git which files you want to work on
+* tell Git which changes you intend to commit:
++
+----
+  git add <file-name>
+  git rm <file-name>
+----
+* EGit helps by auto-detecting changed files
diff --git a/presentations/git-gerrit-workshop/merge-and-rebase-title.txt b/presentations/git-gerrit-workshop/merge-and-rebase-title.txt
new file mode 100644
index 0000000..cd80721
--- /dev/null
+++ b/presentations/git-gerrit-workshop/merge-and-rebase-title.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Merge and Rebase
+----------------
diff --git a/presentations/git-gerrit-workshop/merge-concept-1.txt b/presentations/git-gerrit-workshop/merge-concept-1.txt
new file mode 100644
index 0000000..e79cdc5
--- /dev/null
+++ b/presentations/git-gerrit-workshop/merge-concept-1.txt
@@ -0,0 +1,38 @@
+Merge
+-----
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+  G [style=invis]
+
+  G -> D [style=invis]
+  D -> C -> B -> A
+  F -> E
+  E -> B [weight=0]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+
+  HEAD -> master
+  master -> D
+  feature1 -> F [weight=0]
+
+  { rank=same; D; F; HEAD; master; feature1 }
+  { rank=same; C; E }
+
+  node [shape=circle]
+  L [style=invis]
+  L -> A [style=invis]
+  { rank=same; L; A }
+  HEAD -> L [style=invis]
+
+}
+----
+
+[role="incremental"]
+* 'Q:' what is the result of merging `feature1` branch into the `master` branch?
+* 'Q:' which branch will change as the result of this merge?
diff --git a/presentations/git-gerrit-workshop/merge-concept-2.txt b/presentations/git-gerrit-workshop/merge-concept-2.txt
new file mode 100644
index 0000000..9cff229
--- /dev/null
+++ b/presentations/git-gerrit-workshop/merge-concept-2.txt
@@ -0,0 +1,45 @@
+Merge
+-----
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+  G [style=filled, fillcolor=coral1, color=red]
+
+  G -> D [color=red]
+  D -> C -> B -> A
+  G -> F [weight=0, color=red]
+  F -> E
+  E -> B [weight=0]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [color=red, fontcolor=red]
+
+  HEAD -> master
+  master -> G [color=red]
+  F -> feature1 [dir=back]
+
+  { rank=same; G; HEAD; master }
+  { rank=same; D; F; feature1 }
+  { rank=same; C; E }
+
+  master_old [style=dashed, label=master, color=grey, fontcolor=grey]
+  master_old -> D [style=dashed, color=grey]
+
+  { rank=same; master_old; D }
+
+  C -> E [style=invis]
+  D -> F [style=invis]
+}
+----
+
+'Merge Commit' =  commit with more than one parent
+
+[role="incremental"]
+* 'Q:' which commits belong to the history of branch `master`?
+* 'Q:' which commits belong to the history of branch `feature1`?
+* 'Q:' what if we merged in the opposite direction: `master` into `feature1`?
diff --git a/presentations/git-gerrit-workshop/merge-fast-forward-concept.txt b/presentations/git-gerrit-workshop/merge-fast-forward-concept.txt
new file mode 100644
index 0000000..f837322
--- /dev/null
+++ b/presentations/git-gerrit-workshop/merge-fast-forward-concept.txt
@@ -0,0 +1,35 @@
+Merge - Fast Forward
+--------------------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+  C [style=invis]
+
+  C -> B [style=invis]
+  E -> B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [color=red, fontcolor=red]
+
+  HEAD -> master
+  master -> E [color=red]
+  feature1 -> E [weight=0]
+
+  OLD_HEAD [label=HEAD, style=invis]
+  old_master [label=master, style=dashed, color=grey, fontcolor=grey]
+  OLD_HEAD -> old_master [style=invis]
+  old_master -> B [style=dashed, color=grey]
+  {rank=same; OLD_HEAD; old_master; B }
+
+  { rank=same; E; HEAD; master; feature1 }
+}
+----
+
+[role="incremental"]
+* just move the pointer - 'Fast Forward'
+* no new (merge) commit created
diff --git a/presentations/git-gerrit-workshop/merge-fast-forward-question.txt b/presentations/git-gerrit-workshop/merge-fast-forward-question.txt
new file mode 100644
index 0000000..5e2174c
--- /dev/null
+++ b/presentations/git-gerrit-workshop/merge-fast-forward-question.txt
@@ -0,0 +1,30 @@
+Merge
+-----
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+  C [style=invis]
+
+  E -> B [weight=0]
+  C -> B [style=invis]
+  B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+
+  HEAD -> master
+  master -> B
+  feature1 -> E [weight=0]
+
+  { rank=same; B; HEAD; master }
+  { rank=same; E; feature1 }
+}
+----
+
+  git merge feature1
+
+* 'Q:' what will be result of this merge?
diff --git a/presentations/git-gerrit-workshop/merge-vs-rebase.txt b/presentations/git-gerrit-workshop/merge-vs-rebase.txt
new file mode 100644
index 0000000..8d16036
--- /dev/null
+++ b/presentations/git-gerrit-workshop/merge-vs-rebase.txt
@@ -0,0 +1,6 @@
+Merge vs Rebase
+---------------
+
+image:../../img/path-conflict.png[]
+
+CAUTION: Resolve Path Conflict not by merge, but by rebase!
diff --git a/presentations/git-gerrit-workshop/modern-code-review.txt b/presentations/git-gerrit-workshop/modern-code-review.txt
new file mode 100644
index 0000000..f49d31c
--- /dev/null
+++ b/presentations/git-gerrit-workshop/modern-code-review.txt
@@ -0,0 +1,9 @@
+Modern Code Review - What is it?
+--------------------------------
+
+[role="incremental"]
+* When one developer writes code, another developer is asked to review that code
+* A careful line-by-line critique 
+* Happens in a non-threatening context
+* Goal is cooperation, not fault-finding
+* Integral part of coding process
diff --git a/presentations/git-gerrit-workshop/new-change-vs-new-patch-set-1.txt b/presentations/git-gerrit-workshop/new-change-vs-new-patch-set-1.txt
new file mode 100644
index 0000000..b000cf1
--- /dev/null
+++ b/presentations/git-gerrit-workshop/new-change-vs-new-patch-set-1.txt
@@ -0,0 +1,12 @@
+New Change vs. new Patch Set
+----------------------------
+
+* Patch Set: New Version of an existing Change
+* A Change contains one ore more Patch Sets
+* Only the latest Patch Set is relevant
+* How does Gerrit know when you push
+** Is the new commit a new Change?
+** Or is it a new Patch Set?
++
+[role="incremental"]
+CAUTION: [red]*Change-Id*
diff --git a/presentations/git-gerrit-workshop/new-change-vs-new-patch-set-2.txt b/presentations/git-gerrit-workshop/new-change-vs-new-patch-set-2.txt
new file mode 100644
index 0000000..a72aa77
--- /dev/null
+++ b/presentations/git-gerrit-workshop/new-change-vs-new-patch-set-2.txt
@@ -0,0 +1,16 @@
+New Change vs. new Patch Set
+----------------------------
+
+Example Commit Message with Change-Id
+
+----
+Make lib.Repository abstract and lib.FileRepository its implementation
+
+To support other storage models other than just the local filesystem,
+will rename it into storage.file.FileRepository, but to do that we
+need to also move a number of other related class, which we aren't
+quite ready to do.
+
+Change-Id: I1bd54ea0500337799a8e792874c272eb14d555f7
+Signed-off-by: Joe Developer <joe@example.org>
+----
diff --git a/presentations/git-gerrit-workshop/notifications.txt b/presentations/git-gerrit-workshop/notifications.txt
new file mode 100644
index 0000000..3492bc4
--- /dev/null
+++ b/presentations/git-gerrit-workshop/notifications.txt
@@ -0,0 +1,12 @@
+Notifications
+-------------
+
+Gerrit sends e-mail notifications to:
+
+* change authors/committers
+* reviewers
+* watchers
+
+Watch a project:
+
+image:../../img/project-watches.png[]
diff --git a/presentations/git-gerrit-workshop/path-conflict.txt b/presentations/git-gerrit-workshop/path-conflict.txt
new file mode 100644
index 0000000..775beee
--- /dev/null
+++ b/presentations/git-gerrit-workshop/path-conflict.txt
@@ -0,0 +1,15 @@
+Path Conflict
+-------------
+
+Submit fails with:
+
+image:../../img/path-conflict.png[]
+
+Means:
+
+* the remote branch has evolved since this change was started
+* code changes in the change conflict with changes done in the remote
+  branch
+
+CAUTION: manual conflict resolution required
+
diff --git a/presentations/git-gerrit-workshop/pull.txt b/presentations/git-gerrit-workshop/pull.txt
new file mode 100644
index 0000000..9f13ed7
--- /dev/null
+++ b/presentations/git-gerrit-workshop/pull.txt
@@ -0,0 +1,12 @@
+Pull
+----
+
+'git pull' = 'git fetch' + 'git merge'
+
+*OR*
+
+'git pull' = 'git fetch' + 'git rebase'
+
+*OR*
+
+'git pull' = 'git fetch'
diff --git a/presentations/git-gerrit-workshop/push-0.txt b/presentations/git-gerrit-workshop/push-0.txt
new file mode 100644
index 0000000..e6ad1bf
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-0.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Push
+----
diff --git a/presentations/git-gerrit-workshop/push-1.txt b/presentations/git-gerrit-workshop/push-1.txt
new file mode 100644
index 0000000..8aa2d4c
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-1.txt
@@ -0,0 +1,149 @@
+Push
+----
+  git push origin HEAD:master
+
+from local to remote repository
+
+* more precisely: from a local to a remote branch
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+  { rank=same; HEAD; feature; C}
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have the feature branch in an
+  // own column
+  { rank=same; A; I}
+  I [style=invis]
+  C -> I [style=invis]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master"]
+  { rank=same; master1; B1}
+  master1 -> B1 [weight=0]
+
+  // graph name
+  remote [label="remote 'origin' repo", style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left and right graph
+  { rank=same; A; A1}
+
+  // spacing in between the left and right graph
+  { rank=same; master; space}
+  space [style=invis, label="some space here"]
+  space -> master [style=invis, weight=0]
+}
+----
+
+Push
+----
+  git push origin HEAD:master
+
+from local to remote repository
+
+* more precisely: from a local to a remote branch
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C}
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B }
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have the feature branch in an
+  // own column
+  { rank=same; A; I }
+  I [style=invis]
+  C -> I [style=invis]
+
+  // the "push" arrow
+  node [style=invis]
+  L -> R [label="push", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  C1 -> B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", color=red, fontcolor=red]
+  { rank=same; master1; C1 }
+  master1 -> C1 [weight=0, color=red]
+  masterold1 [label="master", style=dashed, color=grey, fontcolor=grey]
+  { rank=same; masterold1; B1 }
+  masterold1 -> B1 [weight=0, style=dashed, color=grey]
+
+  // graph name
+  remote [label="remote 'origin' repo", shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; master; space}
+  space [label="some space here"]
+  space -> master [weight=0]
+
+  { rank=same; HEAD; space2 }
+  space2 [label="spaace"]
+  space2 -> HEAD [weight=0]
+}
+----
diff --git a/presentations/git-gerrit-workshop/push-2.txt b/presentations/git-gerrit-workshop/push-2.txt
new file mode 100644
index 0000000..2163d43
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-2.txt
@@ -0,0 +1,163 @@
+Push
+----
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  D -> C
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; D}
+  feature -> D [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B }
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have the feature branch in an
+  // own column
+  I [style=invis]
+  C -> I [style=invis]
+  { rank=same; A; I }
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master"]
+  { rank=same; master1; B1 }
+  master1 -> B1 [weight=0]
+
+  // graph name
+  remote [label="remote 'origin' repo", style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left and right graph
+  { rank=same; A; A1}
+
+  // spacing in between the left and right graph
+  { rank=same; master; space}
+  space [style=invis, label="some space here"]
+  space -> master [style=invis, weight=0]
+}
+----
+
+`Q:` Which commits get pushed?
+
+Push
+----
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C [style=filled, fillcolor=coral1, color=red]
+  D [style=filled, fillcolor=coral1, color=red]
+  D -> C
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; D }
+  feature -> D [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B }
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have the feature branch in an
+  // own column and to keep master branch on the right
+  node [style=invis]
+  edge [style=invis]
+  I -> B
+  { rank=same; A; I2 }
+  A -> I2
+  master -> I2
+
+  // the "push" arrow
+  node [style=invis]
+  L -> R [label="push", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C1 [label="C", style=filled, fillcolor=coral1, color=red]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 -> C1 [color=red]
+  C1 -> B1 [color=red]
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", color=red, fontcolor=red]
+  { rank=same; master1; D1 }
+  master1 -> D1 [weight=0, color=red]
+  masterold1 [label="master", style=dashed, color=grey, fontcolor=grey]
+  { rank=same; masterold1; B1 }
+  masterold1 -> B1 [weight=0, style=dashed, color=grey]
+
+  // graph name
+  remote [label="remote 'origin' repo", style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // formatting: Add invisible node to keep old master branch on the
+  // right
+  node [style=invis]
+  edge [style=invis]
+  { rank=same; A1; I3 }
+  A1 -> I3
+  masterold1 -> I3
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  { rank=same; master; space}
+  space [style=invis, label="some space here"]
+  space -> master [style=invis, weight=0]
+
+  { rank=same; HEAD; space2 }
+  space2 [label="spaace"]
+  space2 -> HEAD [weight=0]
+}
+----
+
+`Q:` Which commits get pushed?
+
+`A:` *ALL* commits from the local branch not available in the remote
+branch
diff --git a/presentations/git-gerrit-workshop/push-3.txt b/presentations/git-gerrit-workshop/push-3.txt
new file mode 100644
index 0000000..2ed4f10
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-3.txt
@@ -0,0 +1,730 @@
+Push
+----
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C }
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to feature branch on own column
+  I [style=invis]
+  C -> I [style=invis]
+  { rank=same; A; I }
+
+  // the "push" arrow
+  node [style=invis]
+  L -> R [label="push?", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  D1 -> B1
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master1; D1 }
+  master1 -> D1 [weight=0]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; master; space}
+  space [label="some space here"]
+  space -> master [weight=0]
+
+  { rank=same; HEAD; space2 }
+  space2 [label="spaace"]
+  space2 -> HEAD [weight=0]
+}
+----
+
+Remote branch has changed
+
+`Q:` What happens on `git push`?
+
+[role="incremental"]
+`A:` `git push` will fail because fast forward is not possible
+
+Push
+----
+
+Possibility One
+
+* [silver]+fetch+[silver]#,# [silver]+merge+[silver]#,# [silver]+push+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C }
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to feature branch on own column
+  I [style=invis]
+  C -> I [style=invis]
+  { rank=same; A; I }
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  D1 -> B1
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master1; D1 }
+  master1 -> D1 [weight=0]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left and right graph
+  { rank=same; A; A1; }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; master; space}
+  space [label="some space here"]
+  space -> master [weight=0]
+
+  { rank=same; HEAD; space2 }
+  space2 [label="spaace"]
+  space2 -> HEAD [weight=0]
+}
+----
+
+Push
+----
+
+Possibility One
+
+* +fetch+[silver]#,# [silver]+merge+[silver]#,# [silver]+push+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  D [style=filled, fillcolor=coral1, color=red]
+  D -> B
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", color=red, fontcolor=red]
+
+  { rank=same; HEAD; feature; C }
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  B -> master [dir=back, style=dashed, color=grey]
+  master -> D [weight=0, color=red]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have feature branch on own
+  // column on the right
+  C -> master [style=invis]
+  { rank=same; D; C }
+
+  // the "fetch" arrow
+  node [style=invis]
+  L -> R [label="fetch", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30, dir=back]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  D1 -> B1
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master1; D1 }
+  D1 -> master1 [dir=back]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; D1; space2 }
+  space2 [label="spaace"]
+  space2 -> D1
+}
+----
+
+Push
+----
+
+Possibility One
+
+* +fetch+, +merge+[silver]#,# [silver]+push+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  E [style=filled, fillcolor=darkseagreen1, color=green]
+  E -> D [weight=0, color=green]
+  E -> C [color=green]
+  D [style=filled, fillcolor=coral1, color=red]
+  D -> B
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [color=red, fillcolor=red, fontcolor=white]
+  feature [color=red, fontcolor=red]
+  featureold [label="feature", style=dashed, color=grey, fontcolor=grey]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; featureold; C }
+  featureold -> C [weight=0, style=dashed, color=grey]
+
+  { rank=same; HEAD; feature; E }
+  feature -> E [weight=0, color=red]
+  HEAD -> feature [weight=0, color=red]
+
+  { rank=same; master; B}
+  master -> D [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have feature branch on own
+  // column on the right
+  C -> master [style=invis]
+  D -> C [style=invis]
+  { rank=same; D; C }
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  D1 -> B1
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master1; D1 }
+  D1 -> master1 [dir=back]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left and right graph
+  { rank=same; A; A1 }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; D1; space2 }
+  space2 [label="spaace"]
+  space2 -> D1
+}
+----
+
+Push
+----
+
+Possibility One
+
+* +fetch+, +merge+, +push+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  E [style=filled, fillcolor=darkseagreen1, color=green]
+  E -> D [weight=0, color=green]
+  E -> C [color=green]
+  D [style=filled, fillcolor=coral1, color=red]
+  D -> B
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; E }
+  feature -> E [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  master -> D [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have feature branch on own
+  // column on the right
+  C -> master [style=invis]
+  { rank=same; D; C }
+
+  // the "push" arrow
+  node [style=invis]
+  L -> R [label="push", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  E1 [label="E", style=filled, fillcolor=darkseagreen1, color=green]
+  E1 -> D1 [weight=0, color=green]
+  E1 -> C1 [color=green]
+  D1 -> B1
+  C1 -> B1 [weight=0]
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", color=red, fontcolor=red]
+  { rank=same; master1; E1 }
+  E1 -> master1 [dir=back, color=red]
+
+  master1old [label="master", style=dashed, color=grey, fontcolor=grey]
+  { rank=same; master1old; B1 }
+  D1 -> master1old [style=dashed, dir=back, color=grey]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // formatting
+  { rank=same; D1; C1 }
+  D1 -> C1  [style=invis]
+  C1 -> master1old [style=invis]
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; E1; space2 }
+  space2 [label="spaace"]
+  space2 -> E1
+}
+----
+
+Push
+----
+
+Possibility Two
+
+* [silver]+fetch+[silver]#,# [silver]+rebase+[silver]#,# [silver]+push+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C }
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to feature branch on own column
+  I [style=invis]
+  C -> I [style=invis]
+  { rank=same; A; I }
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  D1 -> B1
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master1; D1 }
+  master1 -> D1 [weight=0]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left and right graph
+  { rank=same; A; A1; }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; master; space}
+  space [label="some space here"]
+  space -> master [weight=0]
+
+  { rank=same; HEAD; space2 }
+  space2 [label="spaace"]
+  space2 -> HEAD [weight=0]
+}
+----
+
+Push
+----
+
+Possibility Two
+
+* +fetch+[silver]#,# [silver]+rebase+[silver]#,# [silver]+push+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  D [style=filled, fillcolor=coral1, color=red]
+  D -> B
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", color=red, fontcolor=red]
+
+  { rank=same; HEAD; feature; C }
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  B -> master [dir=back, style=dashed, color=grey]
+  master -> D [weight=0, color=red]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have feature branch on own
+  // column on the right
+  C -> master [style=invis]
+  { rank=same; D; C }
+
+  // the "fetch" arrow
+  node [style=invis]
+  L -> R [label="fetch", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30, dir=back]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  D1 -> B1
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master1; D1 }
+  D1 -> master1 [dir=back]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; D1; space2 }
+  space2 [label="spaace"]
+  space2 -> D1
+}
+----
+
+Push
+----
+
+Possibility Two
+
+* +fetch+, +rebase+[silver]#,# [silver]+push+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  CP [label="C'", style=filled, fillcolor=darkseagreen1, color=green]
+  CP -> D [weight=0, color=green]
+  D [style=filled, fillcolor=coral1, color=red]
+  D -> B
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [color=red, fillcolor=red, fontcolor=white]
+  feature [color=red, fontcolor=red]
+  master [label="origin/master", fillcolor=lightskyblue]
+  featureold [label="feature", style=dashed, color=grey, fontcolor=grey]
+
+  { rank=same; HEAD; feature; CP }
+  feature -> CP [weight=0, color=red]
+  HEAD -> feature [weight=0, color=red]
+
+  { rank=same; featureold; C }
+  featureold -> C [weight=0, style=dashed, color=grey]
+
+  { rank=same; master; B}
+  master -> D [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have feature branch on own
+  // column on the right
+  CP -> C [style=invis]
+  C -> master [style=invis]
+  { rank=same; D; C }
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  D1 -> B1
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master", style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master1; D1 }
+  D1 -> master1 [dir=back]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left and right graph
+  { rank=same; A; A1; }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; D1; space2 }
+  space2 [label="spaace"]
+  space2 -> D1
+}
+----
+
+Push
+----
+
+Possibility Two
+
+* +fetch+, +rebase+, +push+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  CP [label="C'", style=filled, fillcolor=darkseagreen1, color=green]
+  CP -> D [weight=0, color=green]
+  D [style=filled, fillcolor=coral1, color=red]
+  D -> B
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; CP }
+  feature -> CP [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  master -> D [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to have feature branch on own
+  // column on the right
+  CP -> C [style=invis]
+  C -> master [style=invis]
+  { rank=same; D; C }
+
+  // the "push" arrow
+  node [style=invis]
+  L -> R [label="push", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  D1 [label="D", style=filled, fillcolor=coral1, color=red]
+  CP1 [label="C'", style=filled, fillcolor=darkseagreen1, color=green]
+  CP1 -> D1 [color=green]
+  D1 -> B1
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+  master1 [label="master", color=red, fontcolor=red]
+  { rank=same; master1; CP1 }
+  CP1 -> master1 [dir=back, color=red]
+
+  master1old [label="master", style=dashed, color=grey, fontcolor=grey]
+  { rank=same; master1old; D1 }
+  D1 -> master1old [dir=back, style=dashed, color=grey]
+
+  // graph name
+  remote [label="remote 'origin' repo" shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; CP1; space2 }
+  space2 [label="spaace"]
+  space2 -> CP1
+}
+----
diff --git a/presentations/git-gerrit-workshop/push-fails-why.txt b/presentations/git-gerrit-workshop/push-fails-why.txt
new file mode 100644
index 0000000..1e179cf
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-fails-why.txt
@@ -0,0 +1,4 @@
+Push fails! -> Why?
+-------------------
+
+image:../../img/gerrit-error-documentation.png[]
diff --git a/presentations/git-gerrit-workshop/push-for-code-review-1.txt b/presentations/git-gerrit-workshop/push-for-code-review-1.txt
new file mode 100644
index 0000000..252926e
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-for-code-review-1.txt
@@ -0,0 +1,16 @@
+Push for Code Review
+--------------------
+
+Push to Gerrit is the same like push to Git
+
+* with one Gerrit speciality: +
+  [red]+refs/for/+ +
+  as the prefix for the target branch name
+
+Compare:
+
+* Push to Git: +
+  `git push origin HEAD:master`
+* Push to Gerrit: +
+  `git push origin HEAD:`[red]+refs/for/+`master`
+
diff --git a/presentations/git-gerrit-workshop/push-for-code-review-2.txt b/presentations/git-gerrit-workshop/push-for-code-review-2.txt
new file mode 100644
index 0000000..be226af
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-for-code-review-2.txt
@@ -0,0 +1,10 @@
+Push for Code Review
+--------------------
+
+It seems like every push to Gerrit goes to the same branch
+`refs/for/master`
+
+However, Gerrit tricks your git client:
+
+* it creates a new branch for the commit(s) you push
+* and creates a new open Gerrit change for each pushed commit
diff --git a/presentations/git-gerrit-workshop/push-for-code-review-3.txt b/presentations/git-gerrit-workshop/push-for-code-review-3.txt
new file mode 100644
index 0000000..88f5003
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-for-code-review-3.txt
@@ -0,0 +1,88 @@
+Push for Code Review
+--------------------
+
+  git push origin HEAD:refs/for/master
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C }
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B }
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting
+  I [style=invis]
+  I -> B [style=invis]
+  I -> C [style=invis]
+  { rank=same; I; C }
+
+  // the "push" arrow
+  node [style=invis]
+  L -> R [label="push", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  C1 -> B1 [weight=0]
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master"]
+  { rank=same; master1; B1}
+  master1 -> B1 [weight=0]
+
+  // change pointers
+  { rank=same; change; C1}
+  change [label="refs/changes/35/135/1", fillcolor=gold]
+  C1 -> change [dir=back]
+
+  // graph name
+  remote [label="Gerrit hosted 'origin' repo\n\nOn push an open change\nin the Gerrit DB is created.", shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // formatting
+  I1 [style=invis]
+  I1 -> B1 [style=invis]
+  I1 -> C1 [style=invis]
+  { rank=same; I1; C1 }
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; master; space}
+  space [label="some space here"]
+  space -> master [weight=0]
+
+  { rank=same; HEAD; space2 }
+  space2 [label="spaace"]
+  space2 -> HEAD [weight=0]
+}
+----
diff --git a/presentations/git-gerrit-workshop/push-for-code-review-4.txt b/presentations/git-gerrit-workshop/push-for-code-review-4.txt
new file mode 100644
index 0000000..dbff016
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-for-code-review-4.txt
@@ -0,0 +1,168 @@
+Push for Code Review
+--------------------
+
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  D -> C
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; D }
+  feature -> D [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B }
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting
+  node [style=invis]
+  edge [style=invis]
+  I -> B
+  C -> I2
+  { rank=same; A; I2 }
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master1 [label="master"]
+  { rank=same; master1; B1}
+  master1 -> B1 [weight=0]
+
+  // graph name
+  remote [label="Gerrit hosted 'origin' repo", shape=box, style=none, color=none]
+  A1 -> remote [style=invis]
+
+  // align left and right graph
+  { rank=same; A; A1; }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; master; space}
+  space [label="some space here"]
+  space -> master [weight=0]
+}
+----
+
+`Q:` What if the feature branch has two commits?
+
+`Q:` Remember Git semantics for Push?
+
+Push for Code Review
+--------------------
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  D -> C
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; D }
+  feature -> D [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B }
+  master -> B [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting
+  I2 [style=invis]
+  C -> I2 [style=invis]
+  { rank=same; A; I2 }
+
+  // the "push" arrow
+  node [style=invis]
+  L -> R [label="push", style=dotted, penwidth=2, arrowhead=vee,
+          color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  D1 [label="D"]
+  D1 -> C1
+  C1 -> B1 [weight=0]
+  B1 -> A1
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  { rank=same; master1; B1}
+  master1 [label="master"]
+  B1 -> master1 [dir=back]
+
+  // change pointers
+  { rank=same; change1; C1}
+  change1 [label="refs/changes/35/134/1", fillcolor=gold]
+  change1 -> C1 [weight=0]
+
+  { rank=same; change2; D1}
+  change2 [label="refs/changes/35/135/1", fillcolor=gold]
+  change2 -> D1 [weight=0]
+  change2 -> change1 [label="depends on", penwidth=4, color=gold]
+
+  // formatting
+  I3 [style=invis]
+  I3 -> B1 [style=invis]
+  I4 [style=invis]
+  C1 -> I4 [style=invis]
+  { rank=same; A1; I4}
+  master1 -> I4 [style=invis]
+
+  // align left, right and arrow graph
+  { rank=same; A; A1; L; R }
+
+  // spacing in between the left and right graph
+  node [style=invis, shape=box]
+  edge [style=invis]
+  { rank=same; master; space}
+  space [label="some space here"]
+  space -> master [weight=0]
+
+  { rank=same; HEAD; space2 }
+  space2 [label="spaace"]
+  space2 -> HEAD [weight=0]
+}
+----
+
+`Q:` What if the feature branch has two commits?
+
+`A:` *ALL* commits from the local branch not available in the remote
+branch [red]#-> 2 changes in Gerrit!#
diff --git a/presentations/git-gerrit-workshop/push-new-patch-set-1.txt b/presentations/git-gerrit-workshop/push-new-patch-set-1.txt
new file mode 100644
index 0000000..003f44c
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-new-patch-set-1.txt
@@ -0,0 +1,49 @@
+Push new Patch Set
+------------------
+
+No dependencies between patch sets
+
+* can't push a successor commit as the next patch set
+* commit D can't be Patch Set 2 of change 134
+
+[graphviz]
+----
+digraph {
+  // commit graph
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  D
+  D -> C
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master [label="origin/master", fillcolor=lightskyblue]
+  HEAD [fillcolor="#555555", fontcolor=white]
+
+  { rank=same; D; feature; HEAD}
+  feature -> D [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  master -> B [weight=0]
+
+  // change pointers
+  change [label="refs/changes/34/134/1", fillcolor=gold]
+  { rank=same; change; C}
+  change -> C [weight=0]
+
+  // graph name
+  local [label="local repo", shape=box, style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible node to
+  // a) have commits on feature branch in own column
+  // b) have the feature branch column on the right
+  I [style=invis]
+  C -> I [style=invis]
+  { rank=same; A; I}
+}
+----
diff --git a/presentations/git-gerrit-workshop/push-new-patch-set-2.txt b/presentations/git-gerrit-workshop/push-new-patch-set-2.txt
new file mode 100644
index 0000000..aa71b56
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-new-patch-set-2.txt
@@ -0,0 +1,105 @@
+Push new Patch Set
+------------------
+
+* if you pushed C and need to replace it by a new commit as a new patch
+set use
++
+  git commit --amend
+
+* with the `--amend` option the new commit replaces the current commit
+instead of becoming a successor
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B [weight=0]
+  B -> A
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; feature; HEAD}
+  feature -> C [weight=0]
+  HEAD -> feature [weight=0]
+
+  { rank=same; master; B}
+  master -> B [weight=0]
+
+  // change pointers
+  change [label="Change 134, Patch Set 1", fillcolor=gold]
+  { rank=same; change; C}
+  change -> C [weight=0]
+
+  // graph name
+  local [label="local repo", style=none, color=none]
+  A -> local [style=invis]
+
+  // formatting: Add invisible nodes and edges to
+  // a) have commits on feature branch in own column
+  // a) have feature branch vertically aligned with change pointer
+  node [style=invis]
+  edge [style=invis]
+  I -> B
+  { rank=same; I2; feature}
+  I2 -> C
+  feature -> change
+  HEAD -> change
+  feature -> I2 [weight=0]
+
+  // add space between the graphs
+  I3 [style=invis, label="space"]
+  I4 [style=invis, label="space"]
+  { rank=same; change; I3}
+  { rank=same; master; I4}
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  D1 [label="D"]
+  D1 -> B1 [weight=0]
+  C1 -> B1 [weight=0]
+  B1 -> A1
+
+  { rank=same; C; C1}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  feature1 [label="feature"]
+  HEAD1 [label="HEAD", fillcolor="#555555", fontcolor=white]
+  master1 [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; D1; feature1; HEAD1}
+  feature1 -> D1 [weight=0]
+  HEAD1 -> feature1 [weight=0]
+
+  { rank=same; master1; B1}
+  master1 -> B1 [weight=0]
+
+  // change pointers
+  change1 [label="Change 134, Patch Set 1", fillcolor=gold]
+  { rank=same; change1; C1}
+  change1 -> C1 [weight=0]
+
+  // graph name
+  local1 [label="local repo", style=none, color=none]
+  A1 -> local1 [style=invis]
+
+  // formatting: Add invisible edge to vertically align D1 and C1
+  edge [style=invis]
+  D1 -> C1
+
+  // align left and right graph
+  { rank=same; A; A1}
+}
+----
+
diff --git a/presentations/git-gerrit-workshop/push-new-patch-set-3.txt b/presentations/git-gerrit-workshop/push-new-patch-set-3.txt
new file mode 100644
index 0000000..e06989d
--- /dev/null
+++ b/presentations/git-gerrit-workshop/push-new-patch-set-3.txt
@@ -0,0 +1,18 @@
+Push new Patch Set
+------------------
+A Common Scenario:
+
+Author of Patch Set 1 is not available and somebody
+else needs to continue and provide Patch Set 2
+
+[role="incremental"]
+[[push-new-patch-set-list]]
+--
+
+* `fetch`
+* create a new branch based on the fetched patch set 1
+* fix the issue
+* `commit --amend`
+* `push`
+--
+
diff --git a/presentations/git-gerrit-workshop/queries.txt b/presentations/git-gerrit-workshop/queries.txt
new file mode 100644
index 0000000..6dabfa8
--- /dev/null
+++ b/presentations/git-gerrit-workshop/queries.txt
@@ -0,0 +1,8 @@
+Queries
+-------
+
+Changes can be queried:
+
+image:../../img/change-query.png[]
+
+image:../../img/gerrit-search-documentation.png[]
diff --git a/presentations/git-gerrit-workshop/rebase.txt b/presentations/git-gerrit-workshop/rebase.txt
new file mode 100644
index 0000000..ca27395
--- /dev/null
+++ b/presentations/git-gerrit-workshop/rebase.txt
@@ -0,0 +1,90 @@
+Rebase
+------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none, fontname=arial, fontsize=16]
+
+  D -> C -> B -> A
+  F -> E [label=" diff-2", fontcolor=red, fontname=arial, fontsize=16]
+  E -> B [weight=0, label=" diff-1", fontcolor=red, labelfloat]
+  { rank=same; C; E }
+  { rank=same; D; F }
+
+  EP -> D [weight=0, style=invis]
+
+  D -> F [style=invis]
+
+  FP [style=invis]
+  EP [style=invis]
+  FP -> EP [style=invis]
+  EP -> F [style=invis]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master -> D
+  { rank=same; master; D }
+
+  F -> feature1 [dir=back]
+  { rank=same; F; feature1 }
+
+  feature1 -> HEAD [dir=back]
+  { rank=same; HEAD; feature1 }
+}
+----
+
+  git rebase master
+
+* redo the work done in `feature1` branch on top of the `master`
+
+Rebase
+------
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none, fontname=arial, fontsize=16]
+
+  D -> C -> B -> A
+  F -> E [label=" diff-2", fontcolor=red, labelfloat]
+  E -> B [weight=0, label=" diff-1", fontcolor=red, labelfloat]
+  { rank=same; C; E }
+  { rank=same; D; F }
+
+  EP -> D [weight=0, color=red, label=" diff-1", fontcolor=red, labelfloat]
+
+  D -> F [style=invis]
+
+  FP [label="F'", style=filled, fillcolor=coral1, color=red]
+  EP [label="E'", style=filled, fillcolor=coral1, color=red]
+  FP -> EP [color=red, label=" diff-2", fontcolor=red, labelfloat]
+  EP -> F [style=invis]
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  feature1 [color=red, fontcolor=red]
+  master -> D
+  { rank=same; master; D }
+
+  FP -> feature1 [dir=back, color=red]
+  { rank=same; FP; feature1 }
+
+  feature1 -> HEAD [dir=back]
+  { rank=same; HEAD; feature1 }
+
+  feature1_old [style=dashed, label=feature1, color=grey, fontcolor=grey]
+  F -> feature1_old [style=dashed, dir=back, color=grey]
+
+  { rank=same; feature1_old; F }
+}
+----
+
+  git rebase master
+
+* rebase current branch to another 'base' commit
+* after rebase the fast-forward merge possible
diff --git a/presentations/git-gerrit-workshop/refining-a-change.txt b/presentations/git-gerrit-workshop/refining-a-change.txt
new file mode 100644
index 0000000..374f000
--- /dev/null
+++ b/presentations/git-gerrit-workshop/refining-a-change.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Refining a Change
+-----------------
diff --git a/presentations/git-gerrit-workshop/remote-tracking-branch-checkout.txt b/presentations/git-gerrit-workshop/remote-tracking-branch-checkout.txt
new file mode 100644
index 0000000..064215c
--- /dev/null
+++ b/presentations/git-gerrit-workshop/remote-tracking-branch-checkout.txt
@@ -0,0 +1,74 @@
+Remote Tracking Branch - Checkout
+---------------------------------
+
+* it is OK to checkout a remote tracking branch
+
+  git checkout origin/release1.0
+
+* `HEAD` gets detached - doesn't point to any branch
+* detached heads means there is no current branch
+* what if someone now changes some files and commits changes?
+
+[[graph-left0]]
+--
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  F -> E
+  E -> B [weight=0]
+  D -> C -> B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [fillcolor="#555555", fontcolor=white]
+  "origin/release1.0" [fillcolor=lightskyblue]
+  "origin/master" [fillcolor=lightskyblue]
+
+  HEAD -> master -> D
+  "origin/release1.0" -> F
+  "origin/master" -> D
+
+  { rank=same; F; D; master; "origin/release1.0" }
+  { rank=same; E; C }
+
+  D -> F [style=invis]
+}
+----
+--
+
+[[graph-right]]
+--
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+	edge [style=bold, color="#385d8a", arrowhead=none]
+
+  F -> E
+  E -> B [weight=0]
+  D -> C -> B -> A
+
+	edge [arrowhead=normal]
+	node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+	HEAD [fillcolor="#555555", fontcolor=white]
+  "origin/release1.0" [fillcolor=lightskyblue]
+  "origin/master" [fillcolor=lightskyblue]
+  HEAD [color=red, fillcolor=red]
+
+  HEAD -> F [color=red]
+  master -> D
+  "origin/release1.0" -> F
+  "origin/master" -> D
+
+  { rank=same; F; D; master; "origin/release1.0" }
+  { rank=same; E; C }
+  { ranke=same; "origin/master"; HEAD }
+
+  D -> F [style=invis]
+  C -> E [style=invis]
+}
+----
+--
diff --git a/presentations/git-gerrit-workshop/resolve-path-conflict-by-merge.txt b/presentations/git-gerrit-workshop/resolve-path-conflict-by-merge.txt
new file mode 100644
index 0000000..c1f03fb
--- /dev/null
+++ b/presentations/git-gerrit-workshop/resolve-path-conflict-by-merge.txt
@@ -0,0 +1,223 @@
+Merge
+-----
+  git merge origin/master
+
+[graphviz]
+----
+digraph {
+  // commit graph
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B
+  D -> B [weight=0]
+  B -> A
+
+  { rank=same; C; D}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C}
+  feature -> C
+  HEAD -> feature
+
+  { rank=same; master; B}
+  master -> D
+
+  // change pointers
+  change [label="Change 134, Patch Set 1", fillcolor=gold]
+  change -> C [weight=0]
+
+  // formatting: Add invisible edge to have D on right side of C,
+  // add invisible node to vertically align this graph with graphs
+  // on next slides
+  node [style=invis]
+  edge [style=invis]
+  C -> D
+  I -> change
+}
+----
+
+Merge
+-----
+  git merge origin/master
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B
+  D -> B [weight=0]
+  B -> A
+
+  { rank=same; C; D}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C}
+  feature -> C
+  HEAD -> feature
+
+  { rank=same; master; B}
+  master -> D
+
+  // change pointers
+  change [label="Change 134, Patch Set 1", fillcolor=gold]
+  change -> C [weight=0]
+
+  // formatting: Add invisible edge to have D on right side of C,
+  // add invisible node to vertically align this graph with graphs
+  // on next slides
+  node [style=invis]
+  edge [style=invis]
+  C -> D
+  I -> change
+
+  // the "merge" arrow
+  node [style=invis]
+  L -> R [label="merge origin/master", style=dotted, penwidth=2,
+          arrowhead=vee, color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  D1 [label="D"]
+  E1 [label="E", style=filled, fillcolor=coral1, color=red]
+  E1 -> C1
+  E1 -> D1 [weight=0]
+  C1 -> B1
+  D1 -> B1 [weight=0]
+  B1 -> A1
+
+  { rank=same; C; C1; D1}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD1 [label="HEAD", fillcolor="#555555", fontcolor=white]
+  master1 [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD1; feature1; E1}
+  feature1 -> E1
+  HEAD1 -> feature1
+
+  { rank=same; master1; B1}
+  master1 -> D1
+
+  // change pointers
+  change1 [label="Change 134, Patch Set 1", fillcolor=gold]
+  { rank=same; change1; C1}
+  change1 -> C1
+
+  // formatting: Add invisible edge to have D1 on right side of C1
+  edge [style=invis]
+  C1 -> D1
+
+  // align left, right and the arrow graph
+  { rank=same; A; A1; L; R}
+}
+----
+
+Merge
+-----
+  git merge origin/master
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B
+  D -> B [weight=0]
+  B -> A
+
+  { rank=same; C; D}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C}
+  feature -> C
+  HEAD -> feature
+
+  { rank=same; master; B}
+  master -> D
+
+  // change pointers
+  change [label="Change 134, Patch Set 1", fillcolor=gold]
+  change -> C [weight=0]
+
+  // formatting: Add invisible edge to have D on right side of C
+  edge [style=invis]
+  C -> D
+
+  // the "merge" arrow
+  node [style=invis]
+  L -> R [label="merge origin/master", style=dotted, penwidth=2,
+          arrowhead=vee, color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  D1 [label="D"]
+  E1 [label="E", style=filled, fillcolor=coral1, color=red]
+  E1 -> C1
+  E1 -> D1 [weight=0]
+  C1 -> B1
+  D1 -> B1 [weight=0]
+  B1 -> A1
+
+  { rank=same; C; C1; D1}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD1 [label="HEAD", fillcolor="#555555", fontcolor=white]
+  master1 [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; change; HEAD1; feature1; E1}
+  feature1 -> E1
+  HEAD1 -> feature1
+
+  { rank=same; master1; B1}
+  master1 -> D1
+
+  // change pointers
+  change1 [label="Change 134, Patch Set 1", fillcolor=gold]
+  { rank=same; change1; C1}
+  change1 -> C1
+  change2 [label="Change 135, Patch Set 1", fillcolor=gold]
+  change2 -> E1
+
+  secondChange [label="SECOND CHANGE!!!", style=none, color=none,
+                fontcolor=red, fontname=arial, fontsize=30]
+  { rank=same; change2; secondChange}
+  secondChange -> change2 [style=invis]
+
+  // formatting: Add invisible edge to have D1 on right side of C1
+  edge [style=invis]
+  C1 -> D1
+
+  // align left, right and the arrow graph
+  { rank=same; A; A1; L; R}
+}
+----
diff --git a/presentations/git-gerrit-workshop/resolve-path-conflict-by-rebase.txt b/presentations/git-gerrit-workshop/resolve-path-conflict-by-rebase.txt
new file mode 100644
index 0000000..04bd37a
--- /dev/null
+++ b/presentations/git-gerrit-workshop/resolve-path-conflict-by-rebase.txt
@@ -0,0 +1,224 @@
+Rebase
+------
+  git rebase origin/master
+
+[graphviz]
+----
+digraph {
+  // commit graph
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B
+  D -> B [weight=0]
+  B -> A
+
+  { rank=same; C; D}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C}
+  feature -> C
+  HEAD -> feature
+
+  { rank=same; master; B}
+  master -> D
+
+  // change pointers
+  change [label="Change 134, Patch Set 1", fillcolor=gold]
+  change -> C [weight=0]
+
+  // formatting: Add invisible edge to have D on right side of C,
+  // add invisible node to vertically align this graph with graphs
+  // on next slides
+  node [style=invis]
+  edge [style=invis]
+  C -> D
+  I -> change
+}
+----
+
+Rebase
+------
+  git rebase origin/master
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B [label=" diff", fontcolor=red]
+  D -> B [weight=0]
+  B -> A
+
+  { rank=same; C; D}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C}
+  feature -> C
+  HEAD -> feature
+
+  { rank=same; master; B}
+  master -> D
+
+  // change pointers
+  change [label="Change 134, Patch Set 1", fillcolor=gold]
+  change -> C [weight=0]
+
+  // formatting: Add invisible edge to have D on right side of C,
+  // add invisible node to vertically align this graph with graphs
+  // on next slides
+  node [style=invis]
+  edge [style=invis]
+  C -> D
+  I -> change
+
+  // the "rebase" arrow
+  node [style=invis]
+  L -> R [label="rebase origin/master", style=dotted, penwidth=2,
+          arrowhead=vee, color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  D1 [label="D"]
+  C2 [label="C'", style=filled, fillcolor=coral1, color=red]
+  C2 -> D1 [label=" diff", fontcolor=red]
+  C1 -> B1
+  D1 -> B1 [weight=0]
+  B1 -> A1
+
+  { rank=same; C; C1; D1}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD1 [label="HEAD", fillcolor="#555555", fontcolor=white]
+  master1 [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD1; feature1; C2}
+  feature1 -> C2
+  HEAD1 -> feature1
+
+  { rank=same; master1; B1}
+  master1 -> D1
+
+  // change pointers
+  change1 [label="Change 134, Patch Set 1", fillcolor=gold]
+  { rank=same; change1; C1}
+  change1 -> C1
+
+  // formatting: Add invisible edge to have D1 on right side of C1
+  edge [style=invis]
+  C1 -> D1
+
+  // align left, right and the arrow graph
+  { rank=same; A; A1; L; R}
+}
+----
+
+Rebase
+------
+  git rebase origin/master
+
+[graphviz]
+----
+digraph {
+  // commit graph left
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  C -> B [label=" diff", fontcolor=red]
+  D -> B [weight=0]
+  B -> A
+
+  { rank=same; C; D}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD [fillcolor="#555555", fontcolor=white]
+  master [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; HEAD; feature; C}
+  feature -> C
+  HEAD -> feature
+
+  { rank=same; master; B}
+  master -> D
+
+  // change pointers
+  change [label="Change 134, Patch Set 1", fillcolor=gold]
+  change -> C [weight=0]
+
+  // formatting: Add invisible edge to have D on right side of C
+  edge [style=invis]
+  C -> D
+
+  // the "rebase" arrow
+  node [style=invis]
+  L -> R [label="rebase origin/master", style=dotted, penwidth=2,
+          arrowhead=vee, color=red, fontname=arial, fontsize=30]
+
+  // commit graph right
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  A1 [label="A"]
+  B1 [label="B"]
+  C1 [label="C"]
+  D1 [label="D"]
+  C2 [label="C'", style=filled, fillcolor=coral1, color=red]
+  C2 -> D1 [label=" diff", fontcolor=red]
+  C1 -> B1
+  D1 -> B1 [weight=0]
+  B1 -> A1
+
+  { rank=same; C; C1; D1}
+
+  // branch pointers
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  HEAD1 [label="HEAD", fillcolor="#555555", fontcolor=white]
+  master1 [label="origin/master", fillcolor=lightskyblue]
+
+  { rank=same; change; HEAD1; feature1; C2}
+  feature1 -> C2
+  HEAD1 -> feature1
+
+  { rank=same; master1; B1}
+  master1 -> D1
+
+  // change pointers
+  change1 [label="Change 134, Patch Set 1", fillcolor=gold]
+  { rank=same; change1; C1}
+  change1 -> C1
+  change2 [label="Change 134, Patch Set 2", fillcolor=gold]
+  change2 -> C2
+
+  newPatchSet [label="NEW PATCH SET!!!", style=none, color=none,
+                fontcolor=red, fontname=arial, fontsize=30]
+  { rank=same; change2; newPatchSet}
+  newPatchSet -> change2 [style=invis]
+
+  // formatting: Add invisible edge to have D1 on right side of C1
+  edge [style=invis]
+  C1 -> D1
+
+  // align left, right and the arrow graph
+  { rank=same; A; A1; L; R}
+}
+----
+
+[role="incremental"]
+`Q:` What would happen if the path conflict is resolved by merge?
diff --git a/presentations/git-gerrit-workshop/review-and-vote.txt b/presentations/git-gerrit-workshop/review-and-vote.txt
new file mode 100644
index 0000000..adca15a
--- /dev/null
+++ b/presentations/git-gerrit-workshop/review-and-vote.txt
@@ -0,0 +1,8 @@
+Review and Vote
+---------------
+
+* Add inline comments
+* Click `Review` to vote or comment
+
+image:../../img/voting.png[]
+
diff --git a/presentations/git-gerrit-workshop/sample-application.txt b/presentations/git-gerrit-workshop/sample-application.txt
new file mode 100644
index 0000000..a249289
--- /dev/null
+++ b/presentations/git-gerrit-workshop/sample-application.txt
@@ -0,0 +1,4 @@
+Sample Application
+------------------
+
+image::../../img/calculator.png[]
diff --git a/presentations/git-gerrit-workshop/staging-changes.txt b/presentations/git-gerrit-workshop/staging-changes.txt
new file mode 100644
index 0000000..099d956
--- /dev/null
+++ b/presentations/git-gerrit-workshop/staging-changes.txt
@@ -0,0 +1,24 @@
+Staging Changes - Git Index
+---------------------------
+
+[graphviz]
+----
+digraph {
+  edge [style=bold, fontname=arial, fontsize=24]
+  node [style=bold, shape=folder, fontname=arial, fontsize=24, height=1, width=2]
+  wtree [shape=plaintext, label="<working tree>"]
+
+  subgraph cluster_git {
+    label = ".git"
+    fontsize=24
+    fontname=arial
+    index [color=red, fontcolor=red]
+    index -> objects [label=" git commit ", style=invis]
+    {rank=same; index; objects}
+  }
+
+  index -> wtree [color=red, dir=back, label=" git add <file>", fontcolor=red]
+}
+----
+
+'Index' or 'Staging Area' is where the next commit is prepared
diff --git a/presentations/git-gerrit-workshop/submit.txt b/presentations/git-gerrit-workshop/submit.txt
new file mode 100644
index 0000000..542c646
--- /dev/null
+++ b/presentations/git-gerrit-workshop/submit.txt
@@ -0,0 +1,10 @@
+Submit
+------
+
+* Highest marks in all voting categories needed for change to be
+  merged
+* Voting the lowest mark means Veto
+* "Submit" merges the change into central branch
+
+image:../../img/reviewer-table.png[]
+
diff --git a/presentations/git-gerrit-workshop/submitted-merge-pending.txt b/presentations/git-gerrit-workshop/submitted-merge-pending.txt
new file mode 100644
index 0000000..6cf67a9
--- /dev/null
+++ b/presentations/git-gerrit-workshop/submitted-merge-pending.txt
@@ -0,0 +1,16 @@
+Submitted, Merge Pending
+------------------------
+
+Change submitted, but can't be merged because it depends on
+
+[role="incremental"]
+* change that is still in review
+* abandoned change +
+*-> rebase change!*
+* outdated patch set +
+*-> rebase change!*
+
+[role="incremental"]
+Gets automatically merged when all predecessor
+changes are merged.
+
diff --git a/presentations/git-gerrit-workshop/submitting-a-change.txt b/presentations/git-gerrit-workshop/submitting-a-change.txt
new file mode 100644
index 0000000..e7b5859
--- /dev/null
+++ b/presentations/git-gerrit-workshop/submitting-a-change.txt
@@ -0,0 +1,3 @@
+[[title-page]]
+Submitting a Change
+-------------------
diff --git a/presentations/git-gerrit-workshop/workshop-preparations.txt b/presentations/git-gerrit-workshop/workshop-preparations.txt
new file mode 100644
index 0000000..7eb9297
--- /dev/null
+++ b/presentations/git-gerrit-workshop/workshop-preparations.txt
@@ -0,0 +1,25 @@
+= Workshop Preparations
+
+For attending a Git/Gerrit training do the following preparations
+*before* the workshop.
+
+* install Eclipse with
+  link:http://www.eclipse.org/egit/download/[latest EGit]
+* install a git command line
+* Configure Git via Eclipse: `Eclipse` > `Preferences` > `Team` >
+  `Git` > `Configuration`:
++
+----
+user.name = <Your Full Name> (example: Edwin Kempin)
+user.email = <Your SAP Mailaddress> (example: edwin.kempin@gmail.com)
+----
+
+* sign-in into the Gerrit WebUI and configure your preferred e-mail
+  address
+* generate an SSH key pair
+* upload the public key to Gerrit
+* for git over HTTP generate a HTTP password in Gerrit
+* configure the SSH key in Eclipse
+
+We recommend using Unix line-endings for all source code and it is
+already configured for the project we use for the workshop.
diff --git a/presentations/git-gerrit-workshop/workshop.txt b/presentations/git-gerrit-workshop/workshop.txt
new file mode 100644
index 0000000..16a3e5b
--- /dev/null
+++ b/presentations/git-gerrit-workshop/workshop.txt
@@ -0,0 +1,181 @@
+Git/Gerrit Workshop
+===================
+:copyright: SAP AG
+:backend: slidy
+:max-width: 45em
+:data-uri:
+
+Agenda Day 1
+------------
+- Introduction
+- Basic Git Concepts
+- Exercises: Local Development, Branches
+- Merge & Rebase
+- Exercises: Merge, Rebase, History Rewriting
+
+Agenda Day 2
+------------
+- Push
+- Gerrit Concepts
+- Exercises: Code Review with Gerrit
+- Q & A
+
+include::distributed-versioning-systems-1.txt[]
+
+include::distributed-versioning-systems-2.txt[]
+
+include::git.txt[]
+
+Git at SAP
+----------
+Project using Git:
+
+- HANA, JPaaS, Avatar, ...
+
+Product Standards
+
+Committer/Contributor Model
+
+- SAP-UI5, Java Server
+
+Centrally hosted and operated
+
+Git/Gerrit Team
+
+Git/Gerrit Team
+---------------
+Support
+
+- mailing list, bug trackers
+
+Training
+
+Hosting
+
+- central Gerrit server with backup
+
+Development of Tools
+
+- contribution to EGit, JGit, Gerrit
+
+Basic Git Concepts
+------------------
+
+Making Changes
+--------------
+Structure in the file system
+
+- one working tree per repository
+- `.git` folder is the *version database*
+- files/folders next to `.git` folder are the *working tree*
+
+image:../../img/git-fs-layout.png[]
+
+Making Changes
+--------------
+Checkout
+
+- populate the working tree with the commit you want to start working from
+
+image:../../img/git-checkout.png[]
+
+
+Making Changes
+--------------
+Just start doing your changes
+
+- modify, add, delete files
+
+Tell Git which changes you intend to commit:
+
+	git add <file-name>
+
+EGit helps by auto-detecting changed files
+
+Committing Changes
+------------------
+
+	git commit
+
+- provide a commit message
+- commit represents a version of the complete repository
+- each commit is identified by a globally unique ID (SHA1)
+
+Commit Message
+--------------
+
+- first line is header
+- separated by a blank line follows the body
+- last paragraph is for meta dat in the `key: value` format
+
+----
+First line is header, shall be shorter than 70 chars
+
+Separate the body from the header by an empty line. The commit message
+should describe why you are doing the change. That's what typically helps
+best to understand what the change is all about. The details of what you
+changed are visible from the file diffs.
+
+Body can be as many paragraphs as you want, shouldn't exceed width of 80
+chars. This helps command line tools to render it nicely. Paragraphs are
+separated by empty lines.
+
+Bug: NGP-123 is rendered as a hyperlink to jtrack
+----
+
+Making Changes
+--------------
+Commit
+
+- create a new commit in the repository with the changes done in the working
+  tree
+
+image:../../img/git-commit.png[]
+
+Staging Changes - Git Index
+---------------------------
+*Index* or *Staging Area* is where the next commit is prepared
+
+image:../../img/git-add-to-index.png[]
+
+Commits
+-------
+- commit history
+	- B is successor of A
+	- C is successor of B
+
+image::../graph/git/bin/abc.png[align="center"]
+
+Branches
+--------
+- branch is a named pointer to a commit, example: `master`
+- full name is `refs/heads/master`
+- the commit command moves the pointer
+
+image::../../img/git-commit-moves-branch.png[align="center"]
+
+Branches
+--------
+
+- branch can also be moved "manually" to any commit
+
+	git reset
+
+image::../../img/git-reset-branch.png[]
+
+Branches
+--------
+
+- what happens on next `git commit`?
+- `C` and `D` continue to exist but they are not in the history of the master
+  branch
+
+image::../../img/git-commit-after-reset.png[]
+
+Branches
+--------
+
+- usualy there are many branches in a Git repository
+- branches can also be deleted
+
+image::../../img/git-many-branches-and-deletion.png[]
diff --git a/presentations/submit-type-with-prolog/makeslides b/presentations/submit-type-with-prolog/makeslides
new file mode 100755
index 0000000..df9ec85
--- /dev/null
+++ b/presentations/submit-type-with-prolog/makeslides
@@ -0,0 +1 @@
+asciidoc -a icons -a iconsdir=/opt/local/etc/asciidoc/images/icons submit-type-with-prolog.txt
diff --git a/presentations/submit-type-with-prolog/submit-type-with-prolog.txt b/presentations/submit-type-with-prolog/submit-type-with-prolog.txt
new file mode 100644
index 0000000..fc2bba5
--- /dev/null
+++ b/presentations/submit-type-with-prolog/submit-type-with-prolog.txt
@@ -0,0 +1,437 @@
+= Submit Type With Prolog
+:backend: slidy
+:max-width: 70em
+:data-uri:
+
+[[title-page]]
+== Submit Type With Prolog
+
+== Submit Type With Prolog
+
+<<<
+[[agenda-item]]
+=== 1. The Submit Type
+
+<<<
+[[agenda-item]]
+=== 2. Fast Forward Only
+
+<<<
+[[agenda-item]]
+=== 3. Merge If Necessary
+
+<<<
+[[agenda-item]]
+=== 4. The Problem
+
+<<<
+[[agenda-item]]
+=== 5. The Solution
+
+<<<
+[[agenda-item]]
+=== 6. DEMO
+
+<<<
+[[agenda-item]]
+=== 7. Possible Further Development
+
+[[title-page]]
+== The Submit Type
+
+== The Submit Type
+
+****
+The submit type is the *strategy* that is used on *submit* +
+to integrate the change into the destination branch.
+****
+
+[role="incremental"]
+--
+Supported Submit Types:
+
+* `Fast Forward Only`
+* `Merge If Necessary`
+* `Merge Always`
+* `Cherry Pick`
+* `Rebase If Necessary` (only from Gerrit 2.6)
+--
+
+[[title-page]]
+== Fast Forward Only
+
+== Fast Forward Only - Case 1
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  I [style=invis]
+
+  C -> B [weight=0]
+  I -> B [style=invis]
+  B -> A
+
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+  master -> B
+  change -> C [weight=0]
+
+  { rank=same; B; master }
+  { rank=same; C; change }
+}
+----
+
+== Fast Forward Only - Case 1
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  I [style=invis]
+
+  I -> B [style=invis]
+  C -> B -> A
+
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master [color=red, fontcolor=red]
+
+  master -> C [color=red]
+  change -> C [weight=0]
+
+  old_master [label=master, style=dashed, color=grey, fontcolor=grey]
+  old_master -> B [style=dashed, color=grey]
+  {rank=same; old_master; B }
+
+  { rank=same; C; master; change }
+}
+----
+
+* on *submit* the destination branch is *fast forwarded* +
+  by updating the branch pointer
+
+== Fast Forward Only - Case 2
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  I [style=invis]
+
+  I -> B [weight=0, style=invis]
+  C -> B -> A
+  D -> B [weight=0]
+
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+  master -> C
+  change -> D [weight=0]
+
+  { rank=same; C; D; master; change }
+
+  node [shape=circle]
+}
+----
+
+[role="incremental"]
+* *submit fails* because the destination branch +
+  can't be fast forwarded
++
+image:../../img/fast-forward-submit-failure.png[Fast Forward Submit Failure]
+
+== Fast Forward Only
+
+=== Advantages
+* if every change is verified, +
+  the main build can never break
+* linear history
+
+[role="incremental"]
+=> `Fast Forward Only` is a good choice for +
+&#160;&#160;&#160;&#160; *stable release* branches
+
+[role="incremental"]
+=== Disadvantages
+* whenever a change gets submitted, +
+  all open changes have to be rebased
+
+=> `Fast Forward Only` doesn't work well for +
+&#160;&#160;&#160;&#160; *development branches* with parallel development +
+&#160;&#160;&#160;&#160; and a high frequency of changes
+
+[[title-page]]
+== Merge If Necessary
+
+== Merge If Necessary - Case 1
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  I [style=invis]
+
+  C -> B [weight=0]
+  I -> B [style=invis]
+  B -> A
+
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+  master -> B
+  change -> C [weight=0]
+
+  { rank=same; B; master }
+  { rank=same; C; change }
+}
+----
+
+== Merge If Necessary - Case 1
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  I [style=invis]
+
+  I -> B [style=invis]
+  C -> B -> A
+
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+  master [color=red, fontcolor=red]
+
+  master -> C [color=red]
+  change -> C [weight=0]
+
+  old_master [label=master, style=dashed, color=grey, fontcolor=grey]
+  old_master -> B [style=dashed, color=grey]
+  {rank=same; old_master; B }
+
+  { rank=same; C; master; change }
+}
+----
+
+* on *submit* the destination branch is *fast forwarded* +
+  if possible
+
+== Merge If Necessary - Case 2
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  I [style=invis]
+  M [style=invis]
+  M -> C [style=invis]
+  I -> B [weight=0, style=invis]
+  C -> B -> A
+  D -> B [weight=0]
+
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+  master -> C
+  change -> D [weight=0]
+
+  { rank=same; C; D; master; change }
+
+  node [shape=circle]
+}
+----
+
+== Merge If Necessary - Case 2
+
+[graphviz]
+----
+digraph {
+  node [style=bold, shape=circle, color="#385d8a", fontname=arial, fontsize=18]
+  edge [style=bold, color="#385d8a", arrowhead=none]
+  M [style=filled, fillcolor=coral1, color=red]
+
+  M -> C [color=red]
+  M -> D [weight=0, color=red]
+  C -> B -> A
+  D -> B [weight=0]
+
+  edge [arrowhead=normal]
+  node [shape=box, style=filled, fillcolor=lightgrey, color=black]
+
+  old_master [label=master, style=dashed, color=grey, fontcolor=grey]
+  old_master -> C [style=dashed, color=grey]
+
+  master -> M
+  change -> D [weight=0]
+
+  I [style=invis]
+  I -> B [weight=0, style=invis]
+  I -> D [style=invis]
+  { rank=same; B; I }
+  { rank=same; master; M }
+  { rank=same; C; D; old_master; change }
+
+  node [shape=circle]
+}
+----
+
+* on *submit* Gerrit tries to *merge* automatically +
+  if there are conflicting changes
+* `Automatically Resolve Conflicts` decides if a content +
+  merge should be done if the same files were touched
+
+== Merge If Necessary
+
+=== Advantages
+* if possible conflicts are automatically resolved
+* no manual rebase/merge is needed
+
+[role="incremental"]
+=> `Merge If Necessary` is a good choice for +
+&#160;&#160;&#160;&#160; *development* branches
+
+[role="incremental"]
+=== Disadvantages
+* the merge commits are not verified, +
+  the main build may get broken
+* non-linear history
+
+=> `Merge If Necessary` is bad for *stable release* +
+&#160;&#160;&#160;&#160;&#160;branches where stability of the build is
+important
+
+== The Problem
+
+****
+We want to use
+
+* `Fast Forward Only` for *stable release* branches and
+* `Merge If Necessary` for *development* branches
+****
+
+[role="incremental"]
+--
+[WARNING]
+Submit Type is a project *global* setting!
+
+image:../../img/submit-type.png[Submit Type]
+--
+
+== The Problem
+
+****
+Some companies have *policies* for release branches +
+that must be *globally enforced*.
+****
+
+[role="incremental"]
+[TIP]
+It should be possible to define a *final submit type* +
+for release branches on a *parent project*.
+
+== The Solution
+
+****
+Enable controlling the submit type from *Prolog*.
+****
+
+[role="incremental"]
+[TIP]
+For each change invoke the `submit_type` predicate +
+to compute the submit type for the change.
+
+[role="incremental"]
+[TIP]
+Implement a `submit_type_filter` to enforce a +
+submit type for child projects.
+
+[role="incremental"]
+[WARNING]
+*NOT* contained in Gerrit 2.5, +
+comes with *Gerrit 2.6*
+
+== The Solution
+
+****
+`Q:` Why should this be done in Prolog?
+****
+
+[role="incremental"]
+* Similar requirements as for submit rules
+* Complete Prolog infrastructure is already in place, +
+  filters allow enforcement through parent projects
+* Prolog provides maximum flexibility
++
+Submit type can be controlled per change (not only per branch).
+
+[[title-page]]
+== DEMO
+
+== Example 1
+* use `Fast Forward Only` for all `refs/heads/stable*` branches
+* use the project's default submit type for all other branches
+
+.rules.pl
+[source,prolog]
+----
+submit_type(fast_forward_only) :-
+  gerrit:change_branch(B), regex_matches('refs/heads/stable.*', B), !.
+
+submit_type(T) :- gerrit:project_default_submit_type(T).
+----
+
+== Example 2
+* for all `refs/heads/stable*` branches
+** use the project's default submit type if only documentation was
+   changed
+** otherwise use `Fast Forward Only`
+
+* use the project's default submit type for all other branches
+
+.rules.pl
+[source,prolog]
+----
+submit_type(fast_forward_only) :-
+  gerrit:commit_delta('(?<!\.txt)$'),
+  gerrit:change_branch(B), regex_matches('refs/heads/stable.*', B), !.
+submit_type(T) :- gerrit:project_default_submit_type(T).
+----
+
+== Possible Further Development
+
+* The `submit_type` predicate may return +
+  more than 1 submit type for a change
++
+=> the user may choose on submit which +
+&#160;&#160;&#160;&#160; submit type should be used
++
+=> e.g. optionally allow to cherry-pick a change +
+&#160;&#160;&#160;&#160; (see
+link:http://code.google.com/p/gerrit/issues/detail?id=1034[issue
+1034])
+
+[[title-page]]
+== THE END
+
+++++
+<style type="text/css">
+#title-page {
+  border-bottom: 0;
+  text-align: center;
+  position: relative;
+  top: 30%;
+  font-size: 60px;
+}
+#agenda-item {
+  border-bottom: 0;
+}
+</style>
+++++
+