Using Git in Eclipse http://eclipse.org/egit Chris Aniszczyk (Red Hat) [email protected] http://aniszczyk.org
May 13, 2015
Using Git in Eclipsehttp://eclipse.org/egit
Chris Aniszczyk (Red Hat)[email protected]://aniszczyk.org
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
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
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
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
Using Git in Eclipse | © 2010 by C. Aniszczyk and M. Sohn
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
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
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
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
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 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
Git, EGit and JGit
Git Concepts
Code Review and Eclipse
Gerrit
Conclusion
Outline
Using Git in Eclipse | © 2010 by C. Aniszczyk and M. Sohn
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
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
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
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
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
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
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
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
Demo: A tour of EGit
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 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
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 Jgit
Git Concepts
Code Review and Eclipse
Gerrit
Conclusion
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 • 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
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
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
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
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
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
Gerrit Workflow
Using Git in Eclipse | © 2010 by C. Aniszczyk and M. Sohn
Gerrit
http://egit.eclipse.org/r/ - change,825Using 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
Git, EGit and Jgit
Git Concepts
Code Review and Eclipse
Gerrit
Conclusion
Outline
Using Git in Eclipse | © 2010 by C. Aniszczyk and M. Sohn
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