git & gerrit: verteilte softwareentwicklung und -reviews in der typo3-community

72
Inspiring people to share TYPO3-Camp Stuttgart - 20.-22. Mai 2011 TYPO3-Entwicklung mit Git und Gerrit

Upload: steffen-gebert

Post on 19-May-2015

2.849 views

Category:

Technology


2 download

DESCRIPTION

Git und das Review-System Gerrit in der TYPO3 Community. Vortrag auf dem TYPO3camp Stuttgart am 21.05.2011

TRANSCRIPT

Page 1: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

TYPO3-Camp Stuttgart - 20.-22. Mai 2011

TYPO3-Entwicklung mit Git und Gerrit

Page 2: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

Verteilte Softwareentwicklung und -reviewsin der TYPO3-Community

Steffen Gebert <[email protected]>

Twitter: @StGebert

TYPO3-Camp Stuttgart - 20./22. Mai 2011

Page 3: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

Einführung

Vorstellung

Steffen Gebert

TYPO3 Core Team Member

Diplom-Informatiker

Doktorand / Wissenschaftl. Mitarbeiteran der Uni Würzburg

Page 4: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Einführung

TYPO3-Entwicklung mit Git und Gerrit

ÜberblickSoftware-Reviews

Git & Gerrit

Workflows & Konventionen

Weitere Informationen

Fragen

Page 5: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

Software-Reviews

Foto: mario.rimannhttp://www.flickr.com/photos/mrimann/3534514430/

Page 6: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Einführung

TYPO3-Entwicklung mit Git und Gerrit

Software-ReviewsQualitätssicherung

Vier (oder sechs) Augen sehen mehr als zwei

Fehler werden immer gemacht - man muss sie nur finden!

Aufnahme in offiziellen Quellcode erst nach erfolgtem Review

Verschiedene Arten des Reviews, u.a.

Funktionalität

Code

Page 7: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Software-Reviews

TYPO3-Entwicklung mit Git und Gerrit

Funktionales ReviewEine Änderung...

behebt den Fehler / ermöglicht ein neues Feature

stört keine andere Funktionalität

Page 8: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Software-Reviews

TYPO3-Entwicklung mit Git und Gerrit

Code-ReviewEine Änderung am Quellcode...

ist korrekt(macht das, was sie tun soll und nichts anderes)

ist sinnvoll programmiert(Robustheit, Performance, etc.)

entspricht gewünschten Programmierstandards(z.B. TYPO3 Coding Guide Lines)

Testmethoden

Automatische Analyse (v.a. CGL)

Durchlesen

Page 9: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Software-Reviews

Review per Mailingliste (damals...)“Requests for Comments” (RFCs) per core-team-Mailingliste

Formalitäten /Konventionen

Page 10: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Software-Reviews

Review per Mailingliste

Voting

SVN Commit

Page 11: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Software-Reviews

TYPO3-Entwicklung mit Git und Gerrit

Mailingliste: Ordnung haltenman kämpfte sich so durch...

Page 12: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Migration zu Git & GerritPräsentation auf Core-Team-Meeting im Juli 2010

Einigkeit über Einführung

Testkaninchen FLOW3 ab Aug. 2010

Migration für v4 während Code-Sprint am 1. März 2011

Erwartete Vorteile

Mehr Übersicht für Reviewer

Einfachere Entwicklung/Integration großer Features

Page 13: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

Git & Gerrit im EinsatzFoto: tnimalanhttp://www.sxc.hu/photo/1275444

Page 14: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

GitVerteiltes Versionskontrollsystem

Entwickelt für die Linux-Kernelentwicklung von Linus Thorvalds

Sehr mächtig

Komplexer als Subversion

Basiswissen wird im Folgenden vorausgesetzt

Danke an Tobias Günther für den Crashkurs

Lokale Kopie desgesamten Repositories

Von Nerds für Nerds :-)

Page 15: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

lokale Aktion Veröffentlichung

Page 16: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Git: Wiederholung“trunk” heißt jetzt “master”

Commits werden über SHA-1 identifiziert

Ein Commit ist lokal - jeder darf committen

Committs lassen sich nachträglich ändern

Branching ist alltäglich

Foto: texas_mustanghttp://www.flickr.com/photos/astros/58932360/

Page 17: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Repository klonengit clone --recursive git://git.typo3.org/TYPO3v4/Core.git

Meta-Informationen landen im Verzeichnis .git/

Ausgecheckter Branch: master

Gesamte History seit TYPO3 3.6 enthalten

Page 18: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

GerritWeb-basiertes Code-Review Tool

Für Android-Entwicklung von Google entwickelt

Baut auf Git als VCS auf

Wacht über das offizielle Git-Repository

Hauptgrund für die Migration des TYPO3-Codes nach Git

Page 19: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

GIT “standalone”

GIT & Gerrit

Page 20: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

GerritMomentan genutzt für

TYPO3v4: Core, Workspaces, Extbase, Fluid

Extensions: community, extension_builder (ehem. extbase_kickstarter)

FLOW3

TYPO3v5

http://review.typo3.org

Page 21: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Gerrit Übersicht´

o o

Page 22: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Gerrit Change-IdJeder Change-Request hat eindeutige Change-Id

Page 23: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

Patches reviewen

Foto: stylesr1http://www.sxc.hu/photo/605324

Page 24: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Änderung reviewen

Page 25: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Änderung reviewen

Commit Message➪ Konventionen

Page 26: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Änderung reviewen

Reviews

Page 27: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Änderung reviewen

Verschiedene Patch-Versionen

Page 28: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Code Review

Diff aufrufen

Page 29: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Diff-Ansicht

Page 30: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Diff-AnsichtInline-Kommentare mit Doppelklick

Page 31: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Funktionaler Test

kopieren

checkout wählen

Page 32: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Funktionaler TestBefehlszeile ausführen

Exakter Stand wird ausgecheckt, incl. Änderung

Testen!

Page 33: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Voting abgeben

Page 34: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Voting abgeben

Funktionaler Test-1/0/+1

Anmerkungen - besonders bei

negativem Review!

Code Review-1/0/+1

Page 35: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Voting abgeben

Members only..

Anmerkungen - besonders bei

negativem Review!

Page 36: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

Eigene Patches sendenFoto: csremedyhttp://www.sxc.hu/photo/1267108

Page 37: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Git konfigurierengit config --global user.name "Your Name"git config --global user.email "[email protected]"

muss mit Adresse in Gerrit übereinstimmen

Page 38: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Git konfigurierengit config --global user.name "Your Name"git config --global user.email "[email protected]"

git config --global branch.autosetuprebase remote git config --global url."ssh://<username>@review.typo3.org:29418" .pushInsteadOf git://git.typo3.org

Page 39: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Git konfigurierengit config --global user.name "Your Name"git config --global user.email "[email protected]"

git config --global branch.autosetuprebase remote git config --global url."ssh://<username>@review.typo3.org:29418" .pushInsteadOf git://git.typo3.org

Page 40: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Git konfigurierengit config --global user.name "Your Name"git config --global user.email "[email protected]"

git config --global branch.autosetuprebase remote git config --global url."ssh://<username>@review.typo3.org:29418" .pushInsteadOf git://git.typo3.org

Push URL

Fetch/Pull URL

Page 41: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Gerrit: SSH-Key festlegen

Page 42: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Gerrit Change-IdJeder Change-Request hat eindeutige Change-Id

Page 43: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Gerrit Change-IdAutomatische Generierung über Git Commit Hook

cd typo3_src-gitscp -p -P 29418 <username>@review.typo3.org:hooks/commit-msg .git/hooks/

git submodule update --initgit submodule foreach 'scp -p -P 29418 <username>@review.typo3.org:hooks/commit-msg .git/hooks/'

submodule ≅ svn:externals

Page 44: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Git & Gerrit

Eigene Änderung senden

Page 45: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Eigene Änderung sendenAktuellen Stand bekommengit checkout <release-branch>git pull

Änderung am Code durchführen

Änderung reviewengit diff

Committengit commit -a

z.B. masterTYPO3_4-5TYPO3_4-4

Page 46: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Commit Message FormatCM verbleibt auf ewig in der History

Spezielle Konventionen für Commit Message

Text[BUGFIX] Recursion error when including TypoScript files

When editing TypoScript in the template module and using the "Include TypoScript file content" option with more than 9 files, then the 10th and all later files gets screwed up.

Resolves: #25374Releases: 4.6, 4.5

Page 47: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Commit Message Hookgit log -1zeigt letzte Commit Message an

Change-Id-Zeile wurde automatisch hinzugefügt(ansonsten weigert Gerrit später die Annahme)

[BUGFIX] Recursion error when including TypoScript files

When editing TypoScript ...

Change-Id: 69fb8866b94c75b3b73395cfa4bd0a900e6ab53cResolves: #25374Releases: 4.6, 4.5

Page 48: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Änderung pushengit push origin HEAD:refs/for/<release-branch>

gewünschter Remotealternativ z.B. github

Page 49: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Git & Gerrit

TYPO3-Entwicklung mit Git und Gerrit

Änderung pushengit push origin HEAD:refs/for/<release-branch>

Gerrit antwortet mit Erfolgsmeldung “New Changes” und Review-URL

Pseudo-Branchin Gerrit

z.B. masterTYPO3_4-5TYPO3_4-4Stand des eigenen

Working-Tree

Page 50: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

Workflows & Konventionen

Page 51: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Workflows & Konventionen

TYPO3-Entwicklung mit Git und Gerrit

Review-WorkflowIssue in Forge eröffnen

Commit machen, Pushen

Auf Reviews warten

Nachbessern mit neuer Patch-Version oder

freuen :-)

Ggf. weitere Branches pushen

Page 52: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Workflows & Konventionen

TYPO3-Entwicklung mit Git und Gerrit

GrundsätzlichesChange Request bezieht sich jeweils auf einen Branch

Nur ein Eintrag für alle Branches in Forge erforderlich

Nach erfolgreichem Review automatisch im nächsten Release

Page 53: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Workflows & Konventionen

TYPO3-Entwicklung mit Git und Gerrit

Aktive Branchesmaster (wird später TYPO3_4-6 abgespalten)

TYPO3_4-5 (current stable, LTS)

TYPO3_4-4 (oldstable)

TYPO3_4-3 (oldoldstable)

Page 54: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Workflows & Konventionen

TYPO3-Entwicklung mit Git und Gerrit

In welchen Branch..?Features, Änderungen des Verhaltens

master (keine Features in veröffentlichten Versionen)

Bugfixes

master (4.6)

current stable (4.5)

LTS (4.5)

ältere Branches nach Belieben (4.4, 4.3)

master nicht vergessen!

Page 55: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Workflows & Konventionen

TYPO3-Entwicklung mit Git und Gerrit

Erforderliche ReviewsChange Request wird gemerged bei jeweils mindestens

Weitere Reviews sind willkommen!

Übernahme (“Submit”) durch Team-Mitglied in Gerrit

Verified Code Review

Team-Mitglied ✓ (+2) ✓ (+2)

Beliebiger Reviewer

+1 +1

Page 56: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Workflows & Konventionen

TYPO3-Entwicklung mit Git und Gerrit

Mr. Hudson & Mr. JenkinsJenkins Continuous Integration Server (vormals Hudson)

Automatisiertes Review

Momentane Tests

Coding Guide Lines

PHP lint

TODO

Unit Tests

http://ci.typo3.org

Page 57: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

Weitere InformationenFoto: Egilshayhttp://www.sxc.hu/photo/1095604

Page 58: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Weitere Informationen

TYPO3-Entwicklung mit Git und Gerrit

Git-ProblemeScreenshot Google

Pro Git Buchhttp://progit.org (kostenlos)

Page 59: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: “Git” landing page

Git Grundlagen

Page 60: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: “Git” landing page

Quellcode überGit beziehen

Page 61: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: “Git” landing page

Contributing(interessant ;-))

Page 62: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: “Git” landing page

Workflownochmals erklärt

Page 63: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: “Git” landing page

Klappt was nicht?

Page 64: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: “Git” landing page

nice to know...

Page 65: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: “Git” landing page

Begrifflichkeiten erklärt

Page 66: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: Tutorials

toll!!

Page 67: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: Tutorials

doof...

Page 68: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Weitere Informationen

Wiki: Ausfürliche CLI-Anleitung

Page 69: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Weitere Informationen

TYPO3-Entwicklung mit Git und Gerrit

Probleme?Fragen!

Mailinglisten / Newsgroupstypo3.coretypo3.dev

lists.typo3.org

Page 70: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshare

Weitere Informationen

TYPO3-Entwicklung mit Git und Gerrit

Nicht angesprochen...Neue Patchversion erstellengit commit --amend

modifiziert vorherigen Commit

Page 71: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

Inspiring people toshareTYPO3-Entwicklung mit Git und Gerrit

?????????????

Page 72: Git & Gerrit: Verteilte Softwareentwicklung und -reviews in der TYPO3-Community

inspiring people to share.