git-workflows im alltag - chemnitzer linux-tage 2018 · pdf filegitflow–pdftk...
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
Ü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
Ü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
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 – 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 – 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
Ü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