Top Banner
Using Git in Eclipse http://eclipse.org/egit Chris Aniszczyk (Red Hat) [email protected] http://aniszczyk.org
41
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Using git in eclipse by Chris Aniszczyk

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

Chris Aniszczyk (Red Hat)[email protected]://aniszczyk.org

Page 2: Using git in eclipse by Chris Aniszczyk

About Me

I've been using and hacking Eclipse for nearly a decade

Eclipse Board of Directors, Committer Representative

Member in the Eclipse Architecture Council

I like to run! (just finished Chicago marathon in 3:20)

Co-author of RCP Book (www.eclipsercp.org)

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

Page 3: Using git in eclipse by Chris Aniszczyk

Git, EGit and JGit

Git Concepts

- Demo of EGit

Code Review at Eclipse

Gerrit

Conclusion

Outline

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

Page 4: Using git in eclipse by Chris Aniszczyk

Software Trends and Revolution

Most major open source projects use some form of DVCS

Git, Hg, Bazaar

LinuxX.orgMySQLOpenJDKAndroidJQueryGnomeFedoraBugzilla and so on...

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

Page 5: Using git in eclipse by Chris Aniszczyk

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

Page 6: Using git in eclipse by Chris Aniszczyk

Projects using Git

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

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

Page 7: Using git in eclipse by Chris Aniszczyk

Git at Eclipse

Eclipse defined a roadmap to move to Git in 2009CVS 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

Page 8: Using git in eclipse by Chris Aniszczyk

Git at Eclipse

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

http://git.eclipse.org/ hosts live Eclipse Git reposVirgo, Mylyn Review, ECF, SWTBot …

http://dev.eclipse.org/git/index.html git mirrors for CVSRead-only copies kept up-to-dateCan clone with git:// or http://

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

Page 9: Using git in eclipse by Chris Aniszczyk

History of JGit and EGit2005 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.11 6/2011 1.0 (Indigo)

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

Page 10: Using git in eclipse by Chris Aniszczyk

Features EGit 0.10

git-addgit-add git-format-patchgit-format-patch git-shortloggit-shortlog git-relinkgit-relink git-rev-parsegit-rev-parse

git-amgit-am git-gcgit-gc git-showgit-show git-remotegit-remote git-show-branchgit-show-branch

git-archivegit-archive git-grepgit-grep git-stashgit-stash git-repackgit-repack git-verify-taggit-verify-tag

git-bisectgit-bisect git-initgit-init git-statusgit-status git-replacegit-replace git-whatchangedgit-whatchanged

git-branchgit-branch git-loggit-log git-submodulegit-submodule git-annotategit-annotate

git-bundlegit-bundle * git-merge* git-merge * git-tag* git-tag * git-blame* git-blame .gitignore.gitignore

git-checkoutgit-checkout git-mvgit-mv git-configgit-config git-cherrygit-cherry git daemongit daemon

git-cherry-pickgit-cherry-pick git-notesgit-notes git-fast-exportgit-fast-export git-count-objectsgit-count-objects Visual merge toolVisual merge tool

git-cleangit-clean git-pull git-pull git-fast-importgit-fast-import git-difftoolgit-difftool ** HTTP support** HTTP support

git-clonegit-clone git-pushgit-push git-filter-branchgit-filter-branch git-fsckgit-fsck * Mylyn integration* Mylyn integration

git-commitgit-commit ** git-rebase** git-rebase git-mergetoolgit-mergetool git-get-tar-commit-idgit-get-tar-commit-id * Staging View* Staging View

git-describegit-describe git-resetgit-reset git-pack-refsgit-pack-refs git-helpgit-help * Synchronize View* Synchronize View

git-diffgit-diff git-revertgit-revert git-prunegit-prune git-merge-treegit-merge-tree History ViewHistory View

git-fetchgit-fetch git-rmgit-rm git-refloggit-reflog git-rereregit-rerere Repositories ViewRepositories View

** planned for 0.10, * planned for 0.11 supported, partial, missing, irrelevant for EGit

Page 11: Using git in eclipse by Chris Aniszczyk

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!

Page 12: Using git in eclipse by Chris Aniszczyk

Git Resources

http://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

Page 13: Using git in eclipse by Chris Aniszczyk

Git, EGit and JGit

Git Concepts

Code Review and Eclipse

Gerrit

Conclusion

Outline

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

Page 14: Using git in eclipse by Chris Aniszczyk

Understanding and Using Git at Eclipse | © 2010 by C. Aniszczyk, S. Pearce, R. Rosenberg and M. Sohn

Centralized VCS

Examples? CVS and SVN There is one Master repository where code is shared

Everyone checks out their code (or branch) from that repository, and checks changes back in

Two major problems• You need to be on-line to perform actions• Patches go stale

They are generally terrible, antiquated

Page 15: Using git in eclipse by Chris Aniszczyk

Understanding and Using Git at Eclipse | © 2010 by C. Aniszczyk, S. Pearce, R. Rosenberg and M. Sohn

Distributed VCS

Examples? Git and Hg Each user has a full local copy of the repository

Forks happen, deal with it

There is no real master repository like in a CVCS

Page 16: Using git in eclipse by Chris Aniszczyk

Understanding and Using Git at Eclipse | © 2010 by C. Aniszczyk, S. Pearce, R. Rosenberg and M. Sohn

How does it work?

A DVCS like Git generally operates at the level of a changeset Logically, a repository is made up from an initial empty state, followed by many changesets Changesets are identified by a SHA-1 hash value e.g., 0878a8189e6a3ae1ded86d9e9c7cbe3f

Page 17: Using git in eclipse by Chris Aniszczyk

Understanding and Using Git at Eclipse | © 2010 by C. Aniszczyk, S. Pearce, R. Rosenberg and M. Sohn

It's all about the changesets

previous: 48b2179994d494485b79504e8b5a6b23ce24a026--- a/README.txt+++ b/README.txt@@ -1 +1 @@-SVN is great+Git is great

previous: 6ff60e964245816221414736d7e5fe6972246ead--- a/README.txt+++ b/README.txt@@ -1 +1 @@-Git is great+SVN is great

Changesets contain pointers to the previous changeset

Page 18: Using git in eclipse by Chris Aniszczyk

Understanding and Using Git at Eclipse | © 2010 by C. Aniszczyk, S. Pearce, R. Rosenberg and M. Sohn

Branches

The current version of your repository is simply a pointer to the end of the tree The default "trunk" in Git is called "master"

The tip of the current branch is called "HEAD" Any branch can be referred to by its hash id Creating branches in a DVCS is fast, you simply point to a different element in the tree on disk already

Page 19: Using git in eclipse by Chris Aniszczyk

Understanding and Using Git at Eclipse | © 2010 by C. Aniszczyk, S. Pearce, R. Rosenberg and M. Sohn

Merging

DVCS are all about merging

Merges are just the weaving together of two (or more) local branches into one However, unlike CVCS, you don't have to specify anything about where you're merging from and to; the trees automatically know what their split point was in the past, and can work it out from there.

Merging is much easier in a DVCS like Git

Page 20: Using git in eclipse by Chris Aniszczyk

Understanding and Using Git at Eclipse | © 2010 by C. Aniszczyk, S. Pearce, R. Rosenberg and M. Sohn

Pulling and Pushing

We've not talked about the distributed nature of DVCS Changes flow between repositories by push and pull Since a DVCS tree is merely a pointer to a branch... There's three cases to consider for comparing two trees: • Your tip is an ancestor of my tip • My tip is an ancestor of your tip • Neither of our tips are direct ancestors; however, we

both share a common ancestor

Page 21: Using git in eclipse by Chris Aniszczyk

Understanding and Using Git at Eclipse | © 2010 by C. Aniszczyk, S. Pearce, R. Rosenberg and M. Sohn

Cloning and Remotes

git clone git://egit.eclipse.org/egit.git Where you can push or pull to is configured on a per (local) repository basis git remote add github http://github.com/zx/myegit.git origin is the default remote; you can have many remotes

Page 22: Using git in eclipse by Chris Aniszczyk

Demo: A tour of EGit

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

Page 23: Using git in eclipse by Chris Aniszczyk

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

Page 24: Using git in eclipse by Chris Aniszczyk

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

Page 25: Using git in eclipse by Chris Aniszczyk

Code Review at

Eclipse ?

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

Page 26: Using git in eclipse by Chris Aniszczyk

Eclipse - Roles

CommitterFormally electedCan commit own changes without review

ContributorSmall changes

reviewed by committersBigger changes

also formal IP review by legal teamin separate protected Bugzilla (IPZilla)

Review Toolpatches attached to bug in Bugzillacomments in Bugzilla

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

Page 27: Using git in eclipse by Chris Aniszczyk

Code Review via Bugzilla

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

Page 28: Using git in eclipse by Chris Aniszczyk

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

Page 29: Using git in eclipse by Chris Aniszczyk

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

Page 30: Using git in eclipse by Chris Aniszczyk

Git, EGit and Jgit

Git Concepts

Code Review and Eclipse

Gerrit

Conclusion

Outline

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

Page 31: Using git in eclipse by Chris Aniszczyk

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 • Android https://review.source.android.com/• JGit, EGit http://egit.eclipse.org/r/• Google, SAP, …

Eclipse wants to use it …

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

Page 32: Using git in eclipse by Chris Aniszczyk

History: Google and 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

Page 33: Using git in eclipse by Chris Aniszczyk

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

Page 34: Using git in eclipse by Chris Aniszczyk

Gerrit – Lifecycle of a Change

a

master

topic

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

Page 35: Using git in eclipse by Chris Aniszczyk

Gerrit – Lifecycle of a Change

c

b

a1

2

mastertopic

3

a

master

topic

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

Page 36: Using git in eclipse by Chris Aniszczyk

Gerrit – Lifecycle of a Change

c

b

a1

2

mastertopic

3

a

master

topic

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

c

b

a1

2

master

topic

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

Page 37: Using git in eclipse by Chris Aniszczyk

Gerrit Workflow

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

Page 38: Using git in eclipse by Chris Aniszczyk

Gerrit

http://egit.eclipse.org/r/ - change,825Using Git in Eclipse | © 2010 by C. Aniszczyk and M. Sohn

Page 39: Using git in eclipse by Chris Aniszczyk

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

Page 40: Using git in eclipse by Chris Aniszczyk

Git, EGit and Jgit

Git Concepts

Code Review and Eclipse

Gerrit

Conclusion

Outline

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

Page 41: Using git in eclipse by Chris Aniszczyk

Conclusion

EGit 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

Open source has embraced the way of DVCS

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