git-workflows im alltag - chemnitzer linux-tage 2018 · pdf filegitflow–pdftk...

41
Git-Workflows im Alltag Valentin Haenel Freelance Consultant and Software Developer http://haenel.co @esc___ 2015-03-21 @ CLT Version: v0.3.0 https://github.com/esc/clt-2015-git-workflows This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 License. 1 / 41

Upload: lyliem

Post on 10-Feb-2018

223 views

Category:

Documents


5 download

TRANSCRIPT

Git-Workflows im Alltag

Valentin Haenel

Freelance Consultant and Software Developerhttp://haenel.co

@esc___

2015-03-21 @ CLT

Version: v0.3.0 https://github.com/esc/clt-2015-git-workflowsThis work is licensed under the Creative Commons Attribution-ShareAlike 4.0 License.

1 / 41

Intro

Git-Workflows?

Folge von KommandosNutzung von Branches und Tags

2 / 41

Übersicht

1 Intro

2 Push ’n’ Pull

3 Github-Flow

4 Rebase ’n’ Force-Merge

5 Gitflow

6 AndereGitworkflowsGerrit Workflow

7 Outro

3 / 41

Übersicht

1 Intro

2 Push ’n’ Pull

3 Github-Flow

4 Rebase ’n’ Force-Merge

5 Gitflow

6 AndereGitworkflowsGerrit Workflow

7 Outro

4 / 41

Push ’n’ Pull Workflow

1 Lokale Änderungenvim datei

git add datei

git commit -m "msg"

2 Änderungen veröffentlichengit push

Wenn push fehlschlägt:

git pull, dann git push

5 / 41

Push ’n’ Pull – Resultat

VorteileLeicht für AnfängerNur weniger Kommandos

NachteileEs entstehen Merge-Commits»Aber wir arbeiten doch alle aufmaster?!«Rebase ist eine Option (fürAnfänger?)

6 / 41

Push ’n’ Pull – Resultat mit --rebase

VorteileKeine Merge-Commits

Nachteile»Sinnloses« LinearisierenFeature-Commits in zufälligerReihenfolgeKonflikte beim Rebase?

7 / 41

Interlude: Darstellung von Git-Graphen

Bei mir:Zeit läuft von unten nach obenWie bei Gitk, Eclipse, SourceTree etc...

Aber:Mehrere Commits auf einer Zeile(vereinfacht die Darstellung)Bei Gitk, Eclipse, SourceTree ist das nicht so..

8 / 41

Interlude: Darstellung von Git-Graphen

9 / 41

Übersicht

1 Intro

2 Push ’n’ Pull

3 Github-Flow

4 Rebase ’n’ Force-Merge

5 Gitflow

6 AndereGitworkflowsGerrit Workflow

7 Outro

10 / 41

Github-Flow

Geeignet für GithubWebinterface oder ’github’ KommandozeilenerweiterungNutzt Feature-Branches

11 / 41

Github-Flow

Entwickler:

1 Forkt ein Repository2 Klont seinen Fork und macht

Commits in einem Feature-Branch3 Pusht den Feature-Branch in seinen

Fork4 Eröffnet einen Pull-Request

Autor:5 Fetcht den Feature-Branch und

mergt ihn6 Pusht ins Original7 oder: Mergt den Pull-Request über

das Webinterface

12 / 41

Github-Flow – Resultat

VorteileFeature-Branches

NachteileFeature-Branches basieren vor demMerge evtl. nicht auf dem aktuellenMaster»Durcheinander«

13 / 41

Github-Flow – Anmerkungen

Beim Merge von Pull-Requests wird der Merge-Commit automatischforciertWeitere Schritte vom Entwickler nötig

→ Feature-Branches löschen→ Synchronisation vom master im Fork mit master aus Original

14 / 41

Übersicht

1 Intro

2 Push ’n’ Pull

3 Github-Flow

4 Rebase ’n’ Force-Merge

5 Gitflow

6 AndereGitworkflowsGerrit Workflow

7 Outro

15 / 41

Rebase ’n’ Force-Merge Workflow

16 / 41

Beschreibung der Schritte

1 Repository clonen:git clone <url>

2 Feature-Branch anlegengit checkout -b feature

3 Arbeiten:vim dateigit add dateigit commit -m "<msg>"

4 Getane Arbeit hochladen# beim ersten Malgit push origin -u featuregit push

5 Lokalen master aktualisieren:git checkout mastergit pull

6 Rebase feature auf master:git checkout featuregit rebase master

7 Forcierter Merge von feature:git checkout mastergit merge --no-ff feature

8 master Hochladen:git push

9 Fehlschlag: Merge rückgängig:git reset --hard HEADˆ

10 Erfolg: feature löschen,lokal und remote:git branch -d featuregit push origin --deletefeature

17 / 41

Rebase ’n’ Force-Merge – Force-Merge

Fast-Forward vermeiden

Merge-Commit erzwingenNur so kann gitrevert einen Mergerückgängig machen

Merge-Commit als»sinvolle« Markierung

18 / 41

Rebase ’n’ Force-Merge – Rebase

»Auf eine neue Basisstellen«Integration vonÄnderungen aus masterVorbereitung für denMerge

19 / 41

Rebase ’n’ Force-Merge – Resultat

VorteileSaubere historyFeature-BranchesMerges sinnvoll

NachteileVerständnis von Git gebrauchtMehrere Kommandos nötig

20 / 41

Rebase ’n’ Force-Merge – Anmerkungen

Kann auch im Github-Flow verwendet werden→ Feature-Branches vor dem Merge des Pull-Request per Force-Pushaktualisieren→ Beim Merge von Pull-Requests wird der Merge-Commit automatischforciert

21 / 41

Übersicht

1 Intro

2 Push ’n’ Pull

3 Github-Flow

4 Rebase ’n’ Force-Merge

5 Gitflow

6 AndereGitworkflowsGerrit Workflow

7 Outro

22 / 41

Gitflow

Großflächiges Branch-Modell

Branchesmaster → Stabil/Produktiondevelop → Instabil/Vorbereitungfeature → Feature-Entwicklungrelease → Letzte Releasearbeitenhotfix → Hotfixes

http://nvie.com/posts/a-successful-git-branching-model/

23 / 41

Gitflow

24 / 41

Gitflow – pdftk gitflow.pdf cat 1E outputgitflow-rotated.pdf

25 / 41

Gitflow – master und develop

Zwei langlebige Branchesmaster → Stabil/Produktiondevelop → Instabil/Vorbereitung

26 / 41

Gitflow – Feature-Branches

Neue Features werden hier entwickeltZweigen ab von develop

Werded gemert nach develop

Wenn fertig → löschen nichtvergessen!

27 / 41

Gitflow – release

Release-VorbereitungLetzte Typo-FixesChangelog, Version-Bump etc. . .Wichtige Änderungen → develop

Wenn fertig → master und develop

Tags werden auf master gesetzt

28 / 41

Gitflow – hotfix

Security-kritische Fixes → ProduktionMergt auch → develop

29 / 41

Gitflow – Anmerkungen

Alle Merges sollten mit --no-ff passierenTriviale Commits auf develop?Rebase ’n’ Force-Merge auch hier möglichNamensräume für Feature-Branches

30 / 41

Gitflow – Erweiterung Nr. 1: hotfix über master

Unterschiedliche »Erreichbarkeit«git describe

Alt/Grau → v0.1-5-g<sha1>

Neu/Schwarz → v0.2-2-g<sha1>

Gilt auch für release

31 / 41

Gitflow – Erweiterung Nr. 2: Release-Candidate-Tags aufrelease

Release-Candidate-Tags auf releaseSuffix: -rcN

32 / 41

Gitflow – Erweiterung Nr. 3: Rebase gegen hotfix

Hotfixes per rebase inFeature-Branches integrierenHier mit der alternativen Merge-Route(Evtl. wurde der Hotfix perCherry-Pick übertragen)

33 / 41

Übersicht

1 Intro

2 Push ’n’ Pull

3 Github-Flow

4 Rebase ’n’ Force-Merge

5 Gitflow

6 AndereGitworkflowsGerrit Workflow

7 Outro

34 / 41

Manpage: Gitworkflows

man gitworkflows

Älteres ModelInfo über git.gitSammlung von Best-PracticesVorschläge und Konzepte, e.g. »Throw-Away-Integration«

Keine Bilder :(

35 / 41

Übersicht

1 Intro

2 Push ’n’ Pull

3 Github-Flow

4 Rebase ’n’ Force-Merge

5 Gitflow

6 AndereGitworkflowsGerrit Workflow

7 Outro

36 / 41

Gerrit Workflow

Hosting, Webinterface für Code-ReviewKonzept: Pending ChangesEigener Workflow mit Feature-Branches und AutomergingGenutzt von Wikimedia, OpenStack und Android

37 / 41

Gerrit Workflow

38 / 41

Übersicht

1 Intro

2 Push ’n’ Pull

3 Github-Flow

4 Rebase ’n’ Force-Merge

5 Gitflow

6 AndereGitworkflowsGerrit Workflow

7 Outro

39 / 41

Fazit

In der Praxis macht sowieso jeder was er will→ nicht ärgern ;-)

Nutzt Feature-Branches!!!

Projektgröße?Für diese Folien reichte ein einzelner master (KISS)

Eigene Arbeitsweise Schritt für Schritt erweitern

40 / 41

Fragen?

Quellen:https://github.com/esc/clt-2015-git-workflows

Danke:Julius Plenz für Anregungen, Ideen und PatchesJens Kubieziel für das erste Patch

Alles mit Open-Source gemacht!Wiki2beamerLATEXbeamerDiaccBeamermake, vim, zsh, git usw...

Git-Schulungen in München (z.B. 04.–05.05.2015)Unser Git-Buch: http://gitbu.ch

41 / 41