Einführung in git scm

Preview:

Citation preview

GITEinführung in das SCM System und seine Workflows

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

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

Sourcecode Management Systeme

GIT

Sourcecode Management Systeme• Zentrale Systeme• Dezentrale Systeme

GIT ist ein dezentrales SCM

GIT SCM

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

... it‘s that easy

GIT SCM

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

GIT SCM

GIT SCM

$> echo “GIT Test“ > README.md

GIT SCM

GIT SCM

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

GIT SCM

GIT WorkflowsEinfaches arbeiten in großen Teams

GIT Workflows

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

GIT WorkflowsGIT Branches anlegen

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

$> git checkout –b develop

GIT Workflows

GIT WorkflowsWeitere Branches nach Bedarf anlegen:

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

GIT Workflows

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

GITFLOWFertige Macros für die Schmutzarbeit

GITFLOW

GITFLOW

GITFLOW

GITFLOW

Neuer Feature Branch angelegt

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

GITFLOW

GITFLOW

Wie Feature Branches zurück-integrieren?

$> git flow feature finish

GITFLOW

GITFLOW

Selbe Vorgehensweise bei:

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

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.

GIT SCM

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

GIT SCM

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

Welches?

GIT SCM

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

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

GIT SCM

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

Projekte von werden zunächst in eigenes Repository geklont:

$> git clone myproject

GIT SCM

GIT SCM

GIT SCM

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

• Alle Dateien• Alle Commits• Komplette History

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

GIT SCM

GIT SCM

GIT SCM

GIT SCM

In Git kann man für alle Gelegenheiten Tags vergeben

GIT SCM

GIT SCM

GIT SCM

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

GIT SCM

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

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

Klare Frage, klare Antwort:Nein!

GIT WORKFLOWS

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

GIT WORKFLOWS

Statt dessen:

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

GIT WORKFLOWS

Und wie dann weiter???

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

Und dann?

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?

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.

GIT WORKFLOWS

Zwei Arten der Integration:

• Merge• Rebase

GIT WORKFLOWS

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

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

GIT WORKFLOWS

Achtung:

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

GIT SPECIALSNun noch ein paar erstaunliche Gimmicks von GIT

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.

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.

GIT SPECIALS

$> git bisect start

$> git bisect bad

$> git bisect good 3dae9f3e0c

GIT SPECIALS

Mit

$> git bisect run myTest.sh

Wird jetzt die bisektionale Fehlersuche gestartet

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.

GIT SPECIALS

Gimmick #2: GIT Submodule

Große Projekte weiter strukturieren

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.

GIT SPECIALS

Es ensteht hierbei eine Datei .gitmodulesDiese muss mit

$> git add .gitmodules

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

GIT SPECIALS

Alle Submodule werden zunächst am HEAD ausgecheckt.

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

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.

GIT SPECIALS

GIT SPECIALS

Vielen Dankfürs zuhören

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

Recommended