Entwicklertag Karlsruhe 2011

Post on 16-May-2015

944 views 1 download

Transcript of Entwicklertag Karlsruhe 2011

Effiziente Entwicklungsprozesse mit Eclipse, Git und Gerrit

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

EdwinKempin,Dr. Stefan Lay (SAP)edwin.kempin@sap.com, stefan.lay@sap.com

Twitter: @stefanlay

+ =

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  

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/

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

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)

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

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

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

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

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

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

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

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

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

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

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

Gerrit ?

Code Review | © 2010 by M. Sohn

Gerrit

Server, der die zentralen Git Repositories verwaltet

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Access Control

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Access Control

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Access Control

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Access Control

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Code Review

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Code Review

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Code Review

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Code Review

Code Review | © 2010 by M. Sohn

Gerrit

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

Wie funktioniert

Code Review | © 2010 by M. Sohn

Code Review

in Gerrit?

Code Review | © 2010 by M. Sohn

Gerrit – Extreme Branching

Ein Branch per Feature

Code Review | © 2010 by M. Sohn

Ein Branch per Feature

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

Code Review | © 2010 by M. Sohn

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

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

Gerrit - Workflow

Code Review | © 2010 by M. Sohn

Gerrit

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

Was ist sonst noch wissenswert?

Code Review | © 2010 by M. Sohn

Gerrit

Gerrit

Code Review | © 2010 by M. Sohn

Gerrit = 4. Generation Code Review @ Google

Gerrit

Code Review | © 2010 by M. Sohn

Gerrit = 4. Generation Code Review @ Google

Open Source mit Apache 2 Lizenz

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

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

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

No Free Lunch ? -- DEMO

Code Review | © 2010 by 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

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

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

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

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

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

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

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

Code Review | © 2010 by M. Sohn

Gerrit – Rebase