Entwicklertag Karlsruhe 2011

56
Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit http ://code.google.com/p/ gerrit http://eclipse.org/egit EdwinKempin, Dr. Stefan Lay (SAP) [email protected] , [email protected] Twitter: @stefanlay + =

Transcript of Entwicklertag Karlsruhe 2011

Page 1: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit

http://code.google.com/p/gerrithttp://eclipse.org/egit

EdwinKempin,Dr. Stefan Lay (SAP)[email protected], [email protected]

Twitter: @stefanlay

+ =

Page 2: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, Edwin Kempin, SAP AG

Agenda

Git – ein verteiltes Versionierungssystem

Code Review mit Gerrit

Demo: Lebenszyklus einer Änderung

Q & A  

Page 3: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, SAP AG

Die Hauptdarsteller

Git ist ein verteiltes Versionierungssystem

EGit ist ein Eclipse Team Provider für Githttp://www.eclipse.org/egit/

JGit ist eine leichtgewichtige Java-Bibliothek für Git http://www.eclipse.org/jgit/

Gerrit ist ein Code-Review-System, basierend auf JGit http://code.google.com/p/gerrit/

Page 4: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Jeder Entwickler besitzt ein komplettes Repository

Verteilte Versionierungssysteme (DVCS):Git, Mercurial, Bazaar, …

Git: 2005 für die Linux-Kernel-Entwicklung

Git ist im Kommen: • Linux, Android, Eclipse, Ruby on Rails …• Github• Integration in Eclipse, Netbeans, XCode

Page 5: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2010 by Stefan Lay, SAP AG

Geschichte von Git, JGit und EGit

2005    Linus Torvalds initiiert Git

2006    Shawn Pearce initiiert JGit

2009    Eclipse entscheidet sich für Git JGit/EGit ziehen um nach eclipse.org

SAP beteiligt sich JGit/Egit-Projekte benutzen Gerrit

 3/2010 JGit/EGit Release 0.7 (erstes Release bei Eclipse)  2010/11 Releases 0.8 – 0.12            3/2011 Eclipse Community Award: Most Innovative new feature5/2011 JGit proposed for JAX innovation award

6/2011 Release 1.0 (Eclipse Indigo)

Page 6: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2010 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Git versioniert Repositories, nicht Files

Added File 1

Page 7: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Git versioniert Repositories, nicht Files:• Commit erzeugt neue Version des Repositories• Version ist global eindeutig über Hash-Wert (SHA-1)

Added File 11Commit

Page 8: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2010 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Git versioniert Repositories, nicht Files

Added File 11

Edited File 1Added File 2

Page 9: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2010 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Git versioniert Repositories, nicht Files

Added File 1

2

1

Edited File 1Added File 2Commit

Page 10: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Branches: Zeiger auf Commits

Added File 1

2

1

Edited File 1Added File 2master

Page 11: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2010 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Clonen: Duplizieren des Repositories

Added File 1

2

1

Edited File 1Added File 2master

Added File 1

2

1

Edited File 1Added File 2origin/

master

clone

Page 12: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2010 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Arbeiten mit lokalen branches

Added File 1

2

1

Edited File 1Added File 2origin/

master

feature1

Page 13: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Arbeiten mit lokalen branches

Added File 1

2

1

Edited File 1Added File 2origin/

master

feature13

Edited File 2

Page 14: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Arbeiten mit lokalen branches

Added File 1

2

1

Edited File 1Added File 2origin/

master

stefan3 Edited File 2

Added File 1

2

1

Edited File 1Added File 2master

feature13 Edited File 2

push

Page 15: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Wie kommt mein Commit in den zentralen master-branch?

Added File 1

2

1

Edited File 1Added File 2origin/

master

stefan3 Edited File 2

Added File 1

2

1

Edited File 1Added File 2master

feature13 Edited File 2

Page 16: Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit | © 2011 by Stefan Lay, Edwin Kempin, SAP AG

Git – ein verteiltes Versionierungssystem

   Wie kommt mein Commit in den zentralen master-branch?• Jeder Entwicklet pusht direkt • Integrationsmanager merged• Gerrit peer code review

Added File 1

2

1

Edited File 1Added File 2origin/

master

stefan3 Edited File 2

Added File 1

2

1

Edited File 1Added File 2master

feature13 Edited File 2

Page 17: Entwicklertag Karlsruhe 2011

Gerrit ?

Code Review | © 2010 by M. Sohn

Page 18: Entwicklertag Karlsruhe 2011

Gerrit

Server, der die zentralen Git Repositories verwaltet

Code Review | © 2010 by M. Sohn

Gerrit

Page 19: Entwicklertag Karlsruhe 2011

Gerrit

Access Control

Code Review | © 2010 by M. Sohn

Gerrit

Page 20: Entwicklertag Karlsruhe 2011

Gerrit

Access Control

Code Review | © 2010 by M. Sohn

Gerrit

Page 21: Entwicklertag Karlsruhe 2011

Gerrit

Access Control

Code Review | © 2010 by M. Sohn

Gerrit

Page 22: Entwicklertag Karlsruhe 2011

Gerrit

Access Control

Code Review | © 2010 by M. Sohn

Gerrit

Page 23: Entwicklertag Karlsruhe 2011

Gerrit

Code Review

Code Review | © 2010 by M. Sohn

Gerrit

Page 24: Entwicklertag Karlsruhe 2011

Gerrit

Code Review

Code Review | © 2010 by M. Sohn

Gerrit

Page 25: Entwicklertag Karlsruhe 2011

Gerrit

Code Review

Code Review | © 2010 by M. Sohn

Gerrit

Page 26: Entwicklertag Karlsruhe 2011

Gerrit

Code Review

Code Review | © 2010 by M. Sohn

Gerrit

Page 32: Entwicklertag Karlsruhe 2011

Code Review – Vorteile

Vier Augen finden mehr Bugs

Einhaltung von Coding Standards

Mentoring von neuen Entwicklern

Etablierung von Vertrauensverhältnissen

Gute Alternative zu Pair Programming

Code Review | © 2010 by M. Sohn

Guido van Rossum [1]

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

Edwin Kempin
Page 33: Entwicklertag Karlsruhe 2011

Wie funktioniert

Code Review | © 2010 by M. Sohn

Code Review

in Gerrit?

Page 34: Entwicklertag Karlsruhe 2011

Code Review | © 2010 by M. Sohn

Gerrit – Extreme Branching

Page 35: Entwicklertag Karlsruhe 2011

Ein Branch per Feature

Code Review | © 2010 by M. Sohn

Page 36: Entwicklertag Karlsruhe 2011

Ein Branch per Feature

Master Branch enthält nur Changes, die ge-reviewed und approved wurden

Code Review | © 2010 by M. Sohn

Page 37: Entwicklertag Karlsruhe 2011

Ein Branch per Feature

Master Branch enthält nur Changes, die ge-reviewed und approved wurden

Jeder Feature Branch basiert auf dem Master Branch

Code Review | © 2010 by M. Sohn

Page 38: Entwicklertag Karlsruhe 2011

Ein Branch per Feature

Master Branch enthält nur Changes, die ge-reviewed und approved wurden

Jeder Feature Branch basiert auf dem Master Branch

Ein Change kann abandoned (aufgegeben) werden

Code Review | © 2010 by M. Sohn

Page 39: Entwicklertag Karlsruhe 2011

Gerrit - Workflow

Code Review | © 2010 by M. Sohn

Page 40: Entwicklertag Karlsruhe 2011

Gerrit

Code Review | © 2010 by M. Sohn http://egit.eclipse.org/r/ - change,825

Page 41: Entwicklertag Karlsruhe 2011

Was ist sonst noch wissenswert?

Code Review | © 2010 by M. Sohn

Gerrit

Page 42: Entwicklertag Karlsruhe 2011

Gerrit

Code Review | © 2010 by M. Sohn

Gerrit = 4. Generation Code Review @ Google

Page 43: Entwicklertag Karlsruhe 2011

Gerrit

Code Review | © 2010 by M. Sohn

Gerrit = 4. Generation Code Review @ Google

Open Source mit Apache 2 Lizenz

Page 44: Entwicklertag Karlsruhe 2011

Gerrit

Code Review | © 2010 by M. Sohn

Gerrit = 4. Generation Code Review @ Google

Open Source mit Apache 2 Lizenz

Gerrit basiert auf JGit und GWT

Page 45: Entwicklertag Karlsruhe 2011

Gerrit

Code Review | © 2010 by M. Sohn

Gerrit = 4. Generation Code Review @ Google

Open Source mit Apache 2 Lizenz

Gerrit basiert auf JGit und GWT

Verwender:• Android• JGit, EGit• Google, SAP, …• Eclipse ist interessiert

Page 46: Entwicklertag Karlsruhe 2011

Gerrit

Code Review | © 2010 by M. Sohn

Gerrit = 4. Generation Code Review @ Google

Open Source mit Apache 2 Lizenz

Gerrit basiert auf JGit und GWT

Verwender:• Android• JGit, EGit• Google, SAP, …• Eclipse ist interessiert

Shawn Pearce

Page 47: Entwicklertag Karlsruhe 2011

No Free Lunch ? -- DEMO

Code Review | © 2010 by M. Sohn

Page 48: Entwicklertag Karlsruhe 2011

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 49: Entwicklertag Karlsruhe 2011

Code Review – Tips

Small changes are much easier to review

A change should logically do one thing (not many)

No change shall break build or tests

Split big changes into series of digestible changes (patch series)- These changes depend on each other- Last change should switch the new feature on

Commit message should explain Why - The What should be obvious from the code change

Code Review | © 2010 by M. Sohn

Page 50: Entwicklertag Karlsruhe 2011

Conclusion

Code Review rocks !

Gerrit enables a nice code review workflow

DVCS like Git are powerful

Git supports convenient branching and merging

Git is very fast and scales well

Code Review | © 2010 by M. Sohn

Page 51: Entwicklertag Karlsruhe 2011

Gerrit Code Review

Gerrit developed at http://code.google.com/p/gerrit

https://review.source.android.com/Gerrit for Android projects (also Gerrit)

Code Review | © 2010 by M. Sohn

Page 52: Entwicklertag Karlsruhe 2011

Git at Eclipse

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

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

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

Code Review | © 2010 by M. Sohn

Page 53: Entwicklertag Karlsruhe 2011

Git Resources

Ask questions on the EGit forum or egit-dev/jgit-dev lists

http://git-scm.com/documentation is your friend

If you want comedy, watch Linus' talk at Googlehttp://www.youtube.com/watch?v=4XpnKHJAok8

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

Code Review | © 2010 by M. Sohn

Page 54: Entwicklertag Karlsruhe 2011

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

Code Review | © 2010 by M. Sohn

Page 55: Entwicklertag Karlsruhe 2011

Features EGit 0.9

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

git-checkout git-mv git-config git-cherry .gitignore

* git-cherry-pick git-notes git-fast-export git-count-objects git daemon

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 next release, supported, partial, missing, irrelevant for EGit

Page 56: Entwicklertag Karlsruhe 2011

Code Review | © 2010 by M. Sohn

Gerrit – Rebase