ESE 2010: Using Git in Eclipse

Embed Size (px)

Citation preview

PowerPoint Presentation

Using Git in Eclipsehttp://eclipse.org/egit

Matthias Sohn (SAP)[email protected]

+

=

Chris Aniszczyk (Red Hat)[email protected]

Learning Git There's no free lunch!

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

the purpose of this presentation isn't to teach you Git, you have to do that yourself!

Git Resourceshttp://git-scm.com/documentation is your friend

Watch Linus' talk at Googlehttp://www.youtube.com/watch?v=4XpnKHJAok8

Read the Pro Git book - http://progit.org/book/

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Git, EGit and JGit - Demo and Tour of EGit

Code Review at Eclipse

Gerrit

- Demo of Gerrit

Conclusion

Outline

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Git

a distributed revision control system built by the Linux project to automate patch workflow

Distributed means no central repository

No central authority!

Easy offline usage

Easy to fork a project

Protected against manipulation by cryptographic hashes

Really good at merging

Coordination only needed "after the fact

Easier to rejoin (or refresh) forked projects

Structured around commits (i.e. patches)

Integrates with email channel

Tools for identifying problem commits (git bisect)

Tools for restructuring branches w/ specific commits

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Projects using Git

Git is widely used and is the most popular distributed version control system

Git
Linux

Perl

Gnome

Qt

Ruby on Rails

Android

PostgreSQL

Wine

Fedora

Debian

X.org and so on...

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Git at Eclipse

Eclipse defined a roadmap to move to Git in 2009
CVS is deprecated; SVN will be deprecated in the future

EGit is an Eclipse Team provider for Git

http://www.eclipse.org/egit/


JGit is a lightweight Java library implementing Git

http://www.eclipse.org/jgit/

The goal is to build an Eclipse community around Git EGit and JGit are still beta and we want to establish a feedback loop to improve the tooling

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Git at Eclipse

EGit and JGit developed at http://egit.eclipse.org

http://git.eclipse.org/
hosts live Eclipse Git repos

Virgo, Mylyn Review, ECF, SWTBot

http://dev.eclipse.org/git/index.html
git mirrors for CVS

Read-only copies kept up-to-dateCan clone with git:// or http://

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

History of JGit and EGit

2005 Linus Torvalds starts Git

2006 Shawn Pearce starts JGit

2009 Eclipse decides for Git Roadmap
JGit/EGit move to eclipse.org
SAP joins JGit/EGit

3/2010 Released 0.7 (first release at Eclipse) Diff/Merge Algorithms, Automatic IP Logs

6/2010 Released 0.8 (Helios) Usability Improvements, Git Repositories View, Tagging

9/2010 Released 0.9 (Helios SR1) Merge, Synchronize View, .gitignore

Planned: 12/2010 0.10 (Helios SR2)3/2011 0.116/2011 1.0 (Indigo)

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Features EGit 0.10

git-add

git-format-patch

git-shortlog

git-relink

git-rev-parse

git-am

git-gc

git-show

git-remote

git-show-branch

git-archive

git-grep

git-stash

git-repack

git-verify-tag

git-bisect

git-init

git-status

git-replace

git-whatchanged

git-branch

git-log

git-submodule

git-annotate

git-bundle

*git-merge

*git-tag

* git-blame

.gitignore

git-checkout

git-mv

git-config

git-cherry

git daemon

git-cherry-pick

git-notes

git-fast-export

git-count-objects

Visual merge tool

git-clean

git-pull

git-fast-import

git-difftool

** HTTP support

git-clone

git-push

git-filter-branch

git-fsck

* Mylyn integration

git-commit

** git-rebase

git-mergetool

git-get-tar-commit-id

* Staging View

git-describe

git-reset

git-pack-refs

git-help

* Synchronize View

git-diff

git-revert

git-prune

git-merge-tree

History View

git-fetch

git-rm

git-reflog

git-rerere

Repositories View

** planned for 0.10, * planned for 0.11

supported,partial,missing, irrelevant for EGit

Demo: A tour of EGit

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Git, EGit and JGitCode Review and EclipseGerritConclusion

Outline

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

What is Peer Code Review?

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

Often an integral part of coding process

Debugging someone else's broken code Involuntary code review: Not so good; emotions may flare

Guido van Rossum [1]

[1] http://code.google.com/p/rietveld/downloads/detail?name=Mondrian2006.pdf

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Code Review Benefits

Four eyes catch more bugs

Catch bugs early to save hours of debugging

Enforce coding standards

Keep overall readability & code quality high

Mentoring of new developers

Learn from mistakes without breaking stuff

Establish trust relationships

Prepare for more delegation

Good alternative to pair programming

asynchronous and across locations

Guido van Rossum [1]

[1] http://code.google.com/p/rietveld/downloads/detail?name=Mondrian2006.pdf

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Code Review at

Eclipse ?

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Eclipse - Roles

CommitterFormally electedCan commit own changes without review

ContributorSmall changesreviewed by committersBigger changesalso formal IP review by legal team
in separate protected Bugzilla (IPZilla)

Review Toolpatches attached to bug in Bugzillacomments in Bugzilla

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Code Review via Bugzilla

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Eclipse Review Process

Contributors

create patch using CVS, SVN, Git (since 2009)

attach patch to bug in Bugzilla

Committers

do code and IP review

comment, vote in Bugzilla

create CQ for changes needing IP review

commit accepted changes

IP Team

does IP review bigger changes from contributors

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Eclipse Review Process

Review not done for all changes

Each Eclipse.org project does it differently

Review tedious for contributors
(and also for committers mentoring contributors)

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Git, EGit and JGitCode Review and EclipseGerritConclusion

Outline

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Gerrit Code Review

Gerrit is a Code Review system based on JGit

http://code.google.com/p/gerrit/

Also serves as a git server

adding access control and workflow

Used by

Androidhttps://review.source.android.com/

JGit, EGithttp://egit.eclipse.org/r/

Google, SAP,

Eclipse wants to use it

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

History Gerrit Code Review

Gerrit: 4th Generation code review at Google

Google started code review with a Linux like review process

patch based

tooling based on Perforce CLI

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Google - Web based code review tools

Mondrian (Guido van Rossum)

based on Perforce, Google infrastructure

Google proprietary

Rietvield (Guido van Rossum)

based on Subversion

Open Source hosted on GoogleApp Engine

Gerrit (Shawn Pearce)

started as a fork of Rietvield

based on JGit and GWT

Open Source (Android)

Apache 2 license

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

One Branch per Feature

Master branch contains only reviewed and approved changes

master moves from good to better state after each (approved) change

Each feature branch is based on the Master branch

stable starting point

A change can really be abandoned because

no other approved change can depend on a not yet approved change

Gerrit will automatically reject a successor change of an abandoned change

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Gerrit Lifecycle of a Change

amastertopic

1

create local topic
branch

commit change

push it for review

do review

automated
verification

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Gerrit Lifecycle of a Change

cba12mastertopic

3

amastertopic

1

create local topic
branch

commit change

push it for review

do review

automated
verification

refine based on
review

push new patchsets
until review votes ok

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Gerrit Lifecycle of a Change

cba12mastertopic

3

amastertopic

1

create local topic
branch

commit change

push it for review

do review

automated
verification

refine based on
review

push new patchsets
until review votes ok

cba12mastertopic

3

d

Submit may lead to
server-side merge

or merge / rebase before
push

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Gerrit Workflow

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Gerrit

http://egit.eclipse.org/r/ - change,825

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Code Review Our Experience

Review all changes!

Review takes time (1 day weeks)

Implies parallel workflow

Every team member should do reviews regularly

Authors have to wait for the review to happen

Git & Gerrit help a lot here


Code Review | 2010 by M. Sohn

Gerrit Code Review - Outlook

Upcoming proposal for Mylyn Gerrit Connector

Port from SQL DB to Cassandra

Store review comments as git notes for offline review

Support for change dependencies across repositories

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Demo: Code Review with Gerrit

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

Git, EGit and JGitCode Review and EclipseGerritConclusion

Outline

Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

ConclusionEGit and JGit are evolving quickly

Gerrit enables a nice code review workflow

Git supports convenient branching and merging

Git is very fast and scales well
Eclipse and major other OS projects are moving to Git

Git and Gerrit kick ass!Using Git in Eclipse | 2010 by C. Aniszczyk and M. Sohn

11/02/10