70
GIT Einführung in das SCM System und seine Workflows

Einführung in git scm

Embed Size (px)

Citation preview

Page 1: Einführung in git scm

GITEinführung in das SCM System und seine Workflows

Page 2: Einführung in git scm

Thorsten Körnertvidoo commerceSoftware Architekt@ThorstenKoerner | https://www.linkedin.com/in/thorstenkoerner

Page 3: Einführung in git scm

Sourcecode Management Systeme• CVS• Bitkeeper• Subversion• Mercurial• ...

Page 4: Einführung in git scm

Sourcecode Management Systeme

GIT

Page 5: Einführung in git scm

Sourcecode Management Systeme• Zentrale Systeme• Dezentrale Systeme

GIT ist ein dezentrales SCM

Page 6: Einführung in git scm

GIT SCM

$> mkdir myproject$> cd myproject$> git init

... it‘s that easy

Page 7: Einführung in git scm

GIT SCM

Neues Verzeichnis .git mit Konfigurations und Meta-Informationen über das Repository inclusive der History.

Page 8: Einführung in git scm

GIT SCM

Page 9: Einführung in git scm

GIT SCM

$> echo “GIT Test“ > README.md

Page 10: Einführung in git scm

GIT SCM

Page 11: Einführung in git scm

GIT SCM

$> git add README.md$> git status$> git commit –m ‘initital commit‘$> git status

Page 12: Einführung in git scm

GIT SCM

Page 13: Einführung in git scm

GIT WorkflowsEinfaches arbeiten in großen Teams

Page 14: Einführung in git scm

GIT Workflows

• Arbeiten in Teams• Konflikte bei konkurrierenden Zugriffen• Wie vermeiden?• Branches anlegen

Page 15: Einführung in git scm

GIT WorkflowsGIT Branches anlegen

• Master Branch nicht für Entwicklung verwenden• Entwicklungs-Branch anlegen

$> git checkout –b develop

Page 16: Einführung in git scm

GIT Workflows

Page 17: Einführung in git scm

GIT WorkflowsWeitere Branches nach Bedarf anlegen:

z.B.• Feature Branches• Bugfix Branches• Realease Branches• Hotfix Branches• Support Branches

Page 18: Einführung in git scm

GIT Workflows

Viel Arbeit so‘n Zeugs???Da gibt‘s was fertiges von Ratiopharm

Page 19: Einführung in git scm

GITFLOWFertige Macros für die Schmutzarbeit

Page 20: Einführung in git scm

GITFLOW

Page 21: Einführung in git scm

GITFLOW

Page 22: Einführung in git scm

GITFLOW

Page 23: Einführung in git scm

GITFLOW

Neuer Feature Branch angelegt

Branch Namen sollten Konventionen folgen (z.B. incl. Ticket Nr. etc.)

Page 24: Einführung in git scm

GITFLOW

Page 25: Einführung in git scm

GITFLOW

Wie Feature Branches zurück-integrieren?

$> git flow feature finish

Page 26: Einführung in git scm

GITFLOW

Page 27: Einführung in git scm

GITFLOW

Selbe Vorgehensweise bei:

• neuen Features, • bei Bugfixes, • bei Hotfixes • und bei Releases.

Page 28: Einführung in git scm

GITFLOW

Besonderheit bei Hotfix Branches:‚git flow hotfix finish‘ merged in den Master und Develop Branch gleichzeitig.Kein Vergessen des Merging in den Develop mehr.

Page 29: Einführung in git scm

GIT SCM

Alles auf meinem Rechner? Dezentral?Wie soll denn das mit einem Team funktionieren?

Page 30: Einführung in git scm

GIT SCM

Ein Repository soll das „offizielle“ sein.Das Repository, auf dem alle Fäden zusammenlaufen.

Welches?

Page 31: Einführung in git scm

GIT SCM

Jedes Repository auf jedem Rechner kann es sein. Man muss es nur erreichen können:

• file:// • http:// https://• ssh://• ...

Page 32: Einführung in git scm

GIT SCM

Idealerweise ein Server, der immer und von überall erreichbar ist.

Projekte von werden zunächst in eigenes Repository geklont:

$> git clone myproject

Page 33: Einführung in git scm

GIT SCM

Page 34: Einführung in git scm

GIT SCM

Page 35: Einführung in git scm

GIT SCM

Git clone legt ein neues Repository als exaktes Abbild des „offiziellen“ an.

• Alle Dateien• Alle Commits• Komplette History

Page 36: Einführung in git scm

GIT SCM

Wenn wir doch aber schon andauernd comitted haben, ohne dieses “offizielle“ Zeugs, wie sollen unsere Änderungen denn jetzt in dieses Repository gepushed werden?

Genau so: Sie werden gepushed.

$> git push origin develop

Page 37: Einführung in git scm

GIT SCM

Page 38: Einführung in git scm

GIT SCM

Page 39: Einführung in git scm

GIT SCM

Page 40: Einführung in git scm

GIT SCM

In Git kann man für alle Gelegenheiten Tags vergeben

Page 41: Einführung in git scm

GIT SCM

Page 42: Einführung in git scm

GIT SCM

Page 43: Einführung in git scm

GIT SCM

Tags werden normalerweise nicht mit gepushed.Daher muss dies extra angegeben werden.

Page 44: Einführung in git scm

GIT SCM

Page 45: Einführung in git scm

GIT WORKFLOWS 2Noch ein paar Worte zu Workflows in unterschiedlichen Team-Strukturen

Page 46: Einführung in git scm

GIT WORKFLOWSKlingt alles toll!Aber ist das wirklich der Weisheit letzter Schluss?

Klare Frage, klare Antwort:Nein!

Page 47: Einführung in git scm

GIT WORKFLOWS

Das Hauptproblem bei dieser Vorgehensweise ist, dass jeder Entwickler seinen Code in das “offizielle“ Repository merged.

Page 48: Einführung in git scm

GIT WORKFLOWS

Statt dessen:

• Feature-Branches mit pushen• Nur lokal finishen, wenn Review und Integration fertig sind.

Page 49: Einführung in git scm

GIT WORKFLOWS

Und wie dann weiter???

Reviewer schauen sich den Code anTester testen das neue Feature und die Integration

Und dann?

Page 50: Einführung in git scm

GIT WORKFLOWSJa am Ende muss das Zeugs dann ja doch integriert werden.

Das machen aber nicht die Entwickler, sondern dies wird von Integratoren erledigt.

Wie passiert das?

Page 51: Einführung in git scm

GIT WORKFLOWS

Die Tester haben irgendwann grünes Licht für die Integration gegeben.Sie erstellen nun einen sogenannten Pull-Request.

Integratoren z.B. im Ops-Team schauen sich den Pull-Request an und integrieren diesen in den Develop Branch.

Page 52: Einführung in git scm

GIT WORKFLOWS

Zwei Arten der Integration:

• Merge• Rebase

Page 53: Einführung in git scm

GIT WORKFLOWS

Beim mergen bleiben die Verzweigungen erhalten.Wenn man sich den Graphen anschaut, erkennt man sog. Diamantenketten.

Page 54: Einführung in git scm

GIT WORKFLOWSMit git rebase zieht man den Graphen glatt und hält ihn übersichtlicher.

Page 55: Einführung in git scm

GIT WORKFLOWS

Achtung:

Auch beim Rebase werden Feature Branches & Co. nicht gelöscht, sie tauchen nur nicht mehr direkt im Graphen auf.

Page 56: Einführung in git scm

GIT SPECIALSNun noch ein paar erstaunliche Gimmicks von GIT

Page 57: Einführung in git scm

GIT SPECIALS

Gimmick #1: die bisektionale Fehlersuche

Wenn ein Feature buggy ist, von dem man weiß, dass es funktionierte, kann man git-bisect verwenden um den Commit zu finden, in dem der Fehler sich eingeschlichen hat.

Page 58: Einführung in git scm

GIT SPECIALS

• Hier startet man eine Suche, der man einen sicher fehlerfreien und einen sicher fehlerbehafteten Commit übergibt. • Zuvor hat man einen kurzen Test geschrieben, der den Fehler

identifizieren soll. • Dieser darf natürlich nicht dem Repository hinzugefügt werden, da er

sonst in früheren Commits fehlt.

Page 59: Einführung in git scm

GIT SPECIALS

$> git bisect start

$> git bisect bad

$> git bisect good 3dae9f3e0c

Page 60: Einführung in git scm

GIT SPECIALS

Mit

$> git bisect run myTest.sh

Wird jetzt die bisektionale Fehlersuche gestartet

Page 61: Einführung in git scm

GIT SPECIALS

• Zunächst wird git-bisect den Commit testen, der in der Mitte zwischen Good und Bad liegt.• Liegt in diesem Commit der Fehler ebenfalls vor, wird die Mitte

zwischen diesem Commit und dem als Good markierten Commit getestet usw.• Bis der Commit, der den Fehler eingeschleppt hat identifiziert ist.

Page 62: Einführung in git scm

GIT SPECIALS

Gimmick #2: GIT Submodule

Große Projekte weiter strukturieren

Page 63: Einführung in git scm

GIT SPECIALSSoftware Teile in eigene Module auslagern.Im Haupt-Repository mit

$> git submodule add /sub/module/path/or/url modules/sub

einbinden und mit

$> git submodule init

In der config registrieren.

Page 64: Einführung in git scm

GIT SPECIALS

Es ensteht hierbei eine Datei .gitmodulesDiese muss mit

$> git add .gitmodules

in den Stage hinzugefügt und dann ebenfalls comittet werden.

Page 65: Einführung in git scm

GIT SPECIALS

Alle Submodule werden zunächst am HEAD ausgecheckt.

Man kann aber bestimmte Versionen, Tags oder Commits auswählen.

Page 66: Einführung in git scm

GIT SPECIALS

Gimmick #3:

Mit git-blame herausfinden, wer in einer Datei welche Teile bearbeitet hat und ob diese Teile aus anderen Dateien kopiert wurden.

Page 67: Einführung in git scm

GIT SPECIALS

Page 68: Einführung in git scm

GIT SPECIALS

Page 69: Einführung in git scm

Vielen Dankfürs zuhören

Page 70: Einführung in git scm

Thorsten Körnertvidoo commerceSoftware Architekt@ThorstenKoerner | https://www.linkedin.com/in/thorstenkoerner