25
1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected] Version: Besser leben durch Rebasing Geschönte Entwicklungshistorie leicht gemacht dank Git 1.4 Besser leben durch Rebasing © Orientation in Objects GmbH Daemonic Disclaimer Kein Vortrag über Sinn von Branching und „Daemonic CI“ Siehe hierzu Vortrag „Integrierst du schon oder branchst du noch?“ Kerngedanke ist grundsätzlich „the mainline stays in a healthy stateRatio: „[Don‘t] pick random […] points for development to begin with.„Branches“ bedeutet im Folgenden „Feature Branches“ temporary branch created to work on a complex change without interfering with the stability of [the mainline]Es gibt keine Allheilmittel aber viele „Branching Anti-Patterns” Cascading Branches, Mysterious Branches, Merge Mania, … 2

Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

1

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected]:

Besser leben durch Rebasing

Geschönte Entwicklungshistorie leicht gemacht dank Git

1.4

Besser leben durch Rebasing© Orientation in Objects GmbH

Daemonic Disclaimer

• Kein Vortrag über Sinn von Branching und „Daemonic CI“– Siehe hierzu Vortrag „Integrierst du schon oder branchst du noch?“

• Kerngedanke ist grundsätzlich „the mainline stays in a healthy state“– Ratio: „[Don‘t] pick random […] points for development to begin with.”

• „Branches“ bedeutet im Folgenden „Feature Branches“– „temporary branch created to work on a complex change without

interfering with the stability of [the mainline]“

• Es gibt keine Allheilmittel aber viele „Branching Anti-Patterns”– Cascading Branches, Mysterious Branches, Merge Mania, …

2

Page 2: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

2

Besser leben durch Rebasing© Orientation in Objects GmbH

Gliederung

• Merging 101

• Merging in practice

• Merging vs. Rebasing

• May the Force be with you

• Zusammenfassung

3

Besser leben durch Rebasing© Orientation in Objects GmbH

Gliederung

• Merging 101

• Merging in practice

• Merging vs. Rebasing

• May the Force be with you

• Zusammenfassung

4

Page 3: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

3

Besser leben durch Rebasing© Orientation in Objects GmbH

Kanten und Knoten

• Commit ist fixierter Zustand des Dateibaums mit Metadaten

• Commits stehen zu ihren Vorgängern in Eltern-Kind Beziehung

• Gerichteter azyklischer Graph

5

A

B

C

D

Besser leben durch Rebasing© Orientation in Objects GmbH

What Is Thy Bidding My Master?

6

A

B master

Page 4: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

4

Besser leben durch Rebasing© Orientation in Objects GmbH

Branch erzeugen

7

A

B master

feature-1

Besser leben durch Rebasing© Orientation in Objects GmbH

Im Branch entwickeln

8

A

B master

feature-1C

Page 5: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

5

Besser leben durch Rebasing© Orientation in Objects GmbH

Master verändert sich ebenfalls

9

A

B

masterfeature-1 C D

Besser leben durch Rebasing© Orientation in Objects GmbH

Merge ausführen – Diamonds Are Forever

10

A

B

master

feature-1 C D

E

Page 6: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

6

Besser leben durch Rebasing© Orientation in Objects GmbH

Merge ausführen – Network

11

A

B

master

feature-1

C

D

E

Besser leben durch Rebasing© Orientation in Objects GmbH

Im Branch entwickeln, again

12

A

B master

C

feature-1D

Page 7: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

7

Besser leben durch Rebasing© Orientation in Objects GmbH

Merge ausführen – Vorspulen

13

A

B

master

C

feature-1

D

Besser leben durch Rebasing© Orientation in Objects GmbH

Merge ausführen – Vorspulen, oder nicht?

14

A

B

master

C

feature-1

D

A

B

C

feature-1D

masterE

Page 8: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

8

Besser leben durch Rebasing© Orientation in Objects GmbH

Gliederung

• Merging 101

• Merging in practice

• Merging vs. Rebasing

• May the Force be with you

• Zusammenfassung

15

Besser leben durch Rebasing© Orientation in Objects GmbH

Get the party started

• Ausgangssituation zwei „parallel“ entwickelte Branches

• Was ist wirklich wichtiger: Struktur oder Zeitstempel?

16

Page 9: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

9

Besser leben durch Rebasing© Orientation in Objects GmbH

Let‘s get together (again)

• Zurück mergen von Branch „feature-1“nach „master“

• „Fast-forward“ verrauscht einen Teil der Entstehungsgeschichte

17

Besser leben durch Rebasing© Orientation in Objects GmbH

Let‘s merge again (and again)

• Branch „feature-2“ soll auch zurück nach „master“– „master“ hat sich seit dem Abzweigen von „feature-2“ verändert

• Aktuellen „master“ nach „feature-2“ mergen und dann wieder zurück– Eventuell automatisiert durch „Branch Updater“ im CI Server

18

Page 10: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

10

Besser leben durch Rebasing© Orientation in Objects GmbH

The beat goes on

• Branch „feature-1“ war aber noch gar nicht ganz fertig– Es wurden nur fertige Teilergebnisse nach „master“ gemergt

• Nacharbeit „feature-1“, Merge „master“ nach „feature-1“ und zurück– Sortierung hilft auch nur noch bedingt

19

Besser leben durch Rebasing© Orientation in Objects GmbH

• Branch „feature-2“ war übrigens auch noch nicht fertig

• Nacharbeit „feature-2“, Merge „master“ nach „feature-2“ und zurück– Im Ergebnis 8 „echte“ Commits bei 7 reinen Merge Commis

… and on

20

Page 11: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

11

Besser leben durch Rebasing© Orientation in Objects GmbH

We don't need a guitar man, son

21

(Quelle: https://twitter.com/henryhoffman/status/694184106440200192)

Besser leben durch Rebasing© Orientation in Objects GmbH

Gliederung

• Merging 101

• Merging in practice

• Merging vs. Rebasing

• May the Force be with you

• Zusammenfassung

22

Page 12: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

12

Besser leben durch Rebasing© Orientation in Objects GmbH

Been there, done that

• Merge Commits vereinen auseinanderlaufende Zweige

• Aus Sicht von „master“ erfolgen Änderungen aber nacheinander

23

A

B

masterfeature-1 C D

A

B

master

feature-1 C D

E

Besser leben durch Rebasing© Orientation in Objects GmbH

Alte Zöpfe abschneiden

• Zweige können auch mittels Rebase „verpflanzt“ werden

• Es entstehen neue Commits und alte „verschwinden“

24

A

B

masterfeature-1 C D

C‘

A

B

master

feature-1

C D

C‘

Page 13: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

13

Besser leben durch Rebasing© Orientation in Objects GmbH

Based rebasing (1)

• Szenario wie zuvor: „feature-2“ soll auch zurück nach „master“

• „master“ nach „feature-2“ mergen, aber dann…

• „feature-2“ nicht zurück nach „master“ mergen sondern rebasen

25

Besser leben durch Rebasing© Orientation in Objects GmbH

Based rebasing (2)

• Abschließend „feature-2“ nach „master“ mergen– „Fast-forward“ Merge möglich aber nicht wünschenswert

• Commit Historie leicht lesbar und „echt“ aus Sicht von „master“

26

Page 14: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

14

Besser leben durch Rebasing© Orientation in Objects GmbH

All your base are belong to us

• Szenario wie zuvor: Nacharbeiten in „feature-1“ werden ausgeführt

• „feature-1“ auf „master“ rebasen und nach „master“ mergen– „master“ kann zuvor seinerseits nach „feature-1“ gemergt worden sein

27

Besser leben durch Rebasing© Orientation in Objects GmbH

All good things come in t(h)rees

• Nacharbeiten in „feature-2“ werden ausgeführt

• „feature-2“ auf „master“ rebasen und nach „master“ mergen– „master“ ist zuvor wieder nach „feature-2“ gemergt worden

28

Page 15: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

15

Besser leben durch Rebasing© Orientation in Objects GmbH

Final showdown

• Rebase basierter Ansatz ist lesbarer und hat besseres SNR– 7 versus 4 Merge Commis bei 8 „echten“ Commits

29

Besser leben durch Rebasing© Orientation in Objects GmbH

While we're at it

• Wenn neue Commits erzeugt werden, dann gleich ordentlich– Commit „Geschichte“, die man auch später noch versteht

• Interactive Rebasing erlaubt diverse Aufräumarbeiten– Changing Multiple Commit Messages– Reordering Commits– Squashing Commits– Splitting a Commit

30

Page 16: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

16

Besser leben durch Rebasing© Orientation in Objects GmbH

All’s well that ends well

• Branch Commits als Teil der Dokumentation

• Roter Faden für Leser der Änderungen dieses Branches

31

Besser leben durch Rebasing© Orientation in Objects GmbH

Gliederung

• Merging 101

• Merging in practice

• Merging vs. Rebasing

• May the Force be with you

• Zusammenfassung

32

Page 17: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

17

Besser leben durch Rebasing© Orientation in Objects GmbH

Golden rule of rebasing

• „The golden rule of git rebase is to never use it on public branches.“– Wahlweise auch: „pushed“, „shared“ oder „pulled from elsewhere“

• Public Branches sind de facto Standard– Toolchains, Remote Repos für Backup, Transparenz im Team

• Was bedeutet das nun?

33

Besser leben durch Rebasing© Orientation in Objects GmbH

Rebasing mit Remote Repos

• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen

• Aber diesmal existiert auch ein Remote Repository (origin)– Kein Fast-forward von Remote Referenz auf lokale mehr möglich– Remote Referenz ist kein Vorfahre der neuen lokalen Referenz

34

Page 18: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

18

Besser leben durch Rebasing© Orientation in Objects GmbH

Use the Force

• Push wird verweigert, wenn Remote Referenz kein Vorfahre ist– Default Verhalten da Remote Repo Commits „verlieren“ könnte

• Push kann durch „--force“ Option erzwungen werden

35

Besser leben durch Rebasing© Orientation in Objects GmbH

Und bist Du nicht willig, so brauch‘ ich Gewalt

• Nach Force Push noch Merge von „feature-2“ auf „master“– Abschließend erneuter Push (ohne Force) in das Remote Repository

36

Page 19: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

19

Besser leben durch Rebasing© Orientation in Objects GmbH

Und was sieht der Rest der Welt?

• Andere Entwickler müssen Rebasing in ihre Repos übernehmen– Entweder Pull mit „--rebase“ Option oder über Reset Kommando

37

Besser leben durch Rebasing© Orientation in Objects GmbH

Die Welt dreht sich vielleicht auch ohne uns weiter

• Und wenn „heimlich“ an zu rebasendem Branch gearbeitet wurde?– Force Push würde zum Verlust dieser Commits führen

38

Page 20: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

20

Besser leben durch Rebasing© Orientation in Objects GmbH

Gewalt ist nicht die einzige Lösung

• Push besitzt auch eine „--force-with-lease” Option– „[--force] sibling that partially protects against damaging forced updates”

• Vorsicht wenn im Hintergrund Fetch ausgeführt wird (siehe Doku)

39

Besser leben durch Rebasing© Orientation in Objects GmbH

The use of unnecessary force has been approved

• Und falls jemand doch Commits mit „--force“ entfernt?– Szenario: Force Push hat Commits im Remote Repo entfernt

40

Page 21: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

21

Besser leben durch Rebasing© Orientation in Objects GmbH

Not all those who wander are lost

• Verlorene Commits in lokalen Branch überführen und dort arbeiten

• Bei Bedarf verlorene Commits mittels Reflog wiederfinden– Sollte nie Bestandteil des normalen Workflows sein

41

Besser leben durch Rebasing© Orientation in Objects GmbH

Gliederung

• Merging 101

• Merging in practice

• Merging vs. Rebasing

• May the Force be with you

• Zusammenfassung

42

Page 22: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

22

Besser leben durch Rebasing© Orientation in Objects GmbH

There ain't no such thing as a free lunch

• Vorteile sowohl bei Merging als auch Rebasing Workflows– Merge: verständlich(er), Erhalt zeitlicher Ablauf, keine „Push“ Probleme– Rebase: keine „Regenbogen“ Historie, Möglichkeit Commits zu „putzen“

• Für Rebasing sind vorab diverse Fragen zu klären– Ist schöne Historie oder zeitlicher Ablauf „first-order“ Arbeitsergebnis?– Ist schöne Historie Mühen und möglichen Risiken wert?– Wie groß ist git Kompetenz im Team?– Gibt es Branching Policies, die alle kennen, verstehen und befolgen?– Werden die Branching Policies durch Tools unterstützt?– Gibt es ein gemeinsames Verständnis von Public Branches?

• My two cent: Funktioniert gut mit Feature Branches in Scrum Teams– Scrum Feature Branches sind kurzlebig mit beschränkter Bearbeiterzahl

43

Besser leben durch Rebasing© Orientation in Objects GmbH

A fool with a tool is still a fool

• Git Hosting Tools unterstützen zum Teil auch Rebasing Workflows– Etwa Bitbucket Server bei Pull Requests und Merge Strategies

44

Page 23: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

23

Besser leben durch Rebasing© Orientation in Objects GmbH

“Anybody can make history; only a great man can write it.” (Oscar Wilde)

• Geschönte Entwicklungshistorie ist nicht gratis

• Aber vielleicht für Sie persönlich ihren Preis wert

45

Besser leben durch Rebasing© Orientation in Objects GmbH

If you remember one thing

46

„Practicality beats purity”

(The Zen of Python, Tim Peters)

Page 24: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

24

Besser leben durch Rebasing© Orientation in Objects GmbH

Links (1)

• Continuous Integration Certification– https://martinfowler.com/bliki/ContinuousIntegrationCertification.html

• Continuous Lifecycle 2016 Vortrag „Integrierst du schon oder branchst du noch? – Müssen sich Features Branches und CI widersprechen“– https://www.oio.de/public/presentations

• Continuous Integration– https://martinfowler.com/articles/continuousIntegration.html

• Linus Torvalds auf Linux Kernel Mailing Liste am 28.09.2010 – https://lkml.org/lkml/2010/9/28/362

47

Besser leben durch Rebasing© Orientation in Objects GmbH

Links (2)

• Version Control with Subversion– http://svnbook.red-bean.com/en/1.7/svn-book.html

• Software Branching and Parallel Universes– https://blog.codinghorror.com/software-branching-and-parallel-

universes/

• Merging vs. Rebasing | Atlassian Git Tutorial– https://www.atlassian.com/git/tutorials/merging-vs-rebasing

• ‘--force’ considered harmful; understanding git's ‘--force-with-lease’– https://developer.atlassian.com/blog/2015/04/force-with-lease/

• Bitbucket Server 5.5 release notes– https://confluence.atlassian.com/bitbucketserver/bitbucket-server-5-5-

release-notes-938037662.html

48

Page 25: Besser leben durch Rebasing - OIO...• Szenario: Rebase „feature-2“ auf „master“und nach „master“ mergen • Aber diesmal existiert auch ein Remote Repository (origin)

25

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected]

??

? ?

????

Fragen ?

49

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected]

Vielen Dank für Ihre Aufmerksamkeit !