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
Top Related