'Git started' für Fortgeschrittene!

40 %
60 %
Information about 'Git started' für Fortgeschrittene!
Technology

Published on February 12, 2014

Author: bentolor

Source: slideshare.net

Description

Konzepte, Funktionsweise & Best Practices

Diese Session langweilt Sie nicht mit einer weiteren, oberflächlichen Einführung, sondern nutzt direkt ihre bisherigen Erfahrungen als professioneller Anwender von Subversion & Co. für einen fundierten Einblick in die Vorteile und Funktionsweise von Git. Dazu wagen wir einen Blick unter die Motorhaube und erschließen uns daraus Best-Practices für das Projekt z.B. zum Umgang mit Branches. Ein kurzer Blick auf die attraktive Toollandschaft rund um Git und Erfahrungen zu Stolperfallen bei seinem Einsatz z.B. unter Windows runden die Session ab.

Zielpublikum: Entwickler und Architekten
Voraussetzungen: Erfahrungen mit Versionsverwaltungsystemen
Schwierigkeitsgrad: Fortgeschritten

Sie lernen:
Der Zuhörer erhält als Git-Neuling oder Einsteiger eine fundierte Hinführung zu Git speziell im Hintergrund für den Einsatz im professionellen Umfeld. Er lernt damit welche Faszination hinter dem Buzzword Git steckt, aber auch wo diese ihre Grenzen hat. Dazu diskutieren wir seine Funktionsweise und führen ganz praktische Stolperfallen und schwierige Erfahrungen (Windows Einsatz, hohe Lernkurve, History-Rewriting) auf der einen Seite an, auf der anderen Seite aber auch die Mehrwerte & innovativen Lösungen die sich rund um Git bieten.

‚Git started‘ Für Fortgeschrittene

Wer ist Benjamin? B.Schmid@exxcellent.de @bentolor http://www.exxcellent.de

Verteilt

Leichtgewichtige Branches

Leistungsfähig

Kryptographisch gesichert

History

Repository Format + bash/C Skripte

Junio C Hamano

ARCHITEKTUR

ARCHITEKTUR Datenhaltung Versions­Historie Branches Merging

Exkurs: Subversion & Co v1 v2 v3 v4 Datei #1 Delta Delta Datei #2 Delta Delta Delta Datei #3 Delta

Jeder Git Commit = vollständige 1:1 Kopie der gesamten Dateibaums

irect Acyclic Graph DAG in Git v1 v2 v3 v4 Datei #1 Datei #1‘ Datei #1‘ Datei #1‘‘ Datei #2 Datei #2‘ Datei #2‘‘ Datei #2‘‘‘ Datei #3 Datei #3 Datei #3 Datei #3‘ Quasi: $ cp –r projekt repository/projekt.v2

Git Objects blob tree commit tag Dateiinhalt Verzeichnis signierter Name

Objekte werden anhand SHA1­Hash ihres Inhalts identifiziert & abgespeichert a94d7c21aa85415a9a721033807ea5bd4b95e98d Kurzform: a94d7c

c3f391 tree f2e49f commit tree: c3f391 parent: nil committer: ben message: Mein 1. Commit tree: c2051 subdir blob: 549d3 epilog.txt c2051 tree blob: ddcf9b logo.png blob: 8b7ad index.html 549d3 blob Hallo OOP! ddcf9 8b7ad Blob blob <html><body>Foo Bar </body></html>

$ git init $ echo "Hallo OOP!" > epilog.txt $ git add epilog.txt $ git commit –m "Mein erster Commit"

$ printf "blob 11000Hallo OOP!n" | shasum 549d3e3affde2f14f55dcfcd0bbcf5ef9250ab8e -

$ cat .git/objects/f2/e49fc7dd0148b7ad8d8fd1e6d4063984ddcf9b | zlib-flate -uncompress; echo commit 181tree c3f391d481480b96ca6a2aa0b4a56f888627218a author Benjamin Schmid <foo@bar.com> 1389744782 +0100 committer Benjamin Schmid < foo@bar.com> 1389744782 +0100 Mein erster Commit

c3f391 tree f2e49f commit tree: c3f391 parent: nil committer: ben message: Mein 1. Commit tree: c2051 subdir blob: 549d3 epilog.txt c2051 tree blob: ddcf9b logo.png blob: 8b7ad index.html 549d3 blob Hallo OOP! ddcf9 8b7ad Blob blob <html><body>Foo Bar </body></html>

c3f391 tree f2e49f commit tree: c3f391 parent: nil committer: ben message: Mein 1. Commit tree: c2051 subdir blob: 549d3 epilog.txt c2051 tree blob: ddcf9b logo.png blob: 8b7ad index.html 549d3 blob Hallo OOP! ddcf9 8b7ad Blob blob <html><body>Foo Bar </body></html>

f2e49f tree tree commit blob 3a912 Blob blob tree tree commit blob 0d9a2 Blob blob tree tree commit blob Blob blob Versions­ Historie tree c3f391 tree commit blob Blob blob

a94d7c21aa85415a9a72 1033807ea5bd4b95e98d Branches

$ cat .git/refs/heads/master c3f391d481480b96ca6a2aa0b4a56f888627218a $ git checkout -b neuerbranch Gewechselt zu einem neuem Branch 'neuerbranch' $ cat .git/refs/heads/neuerbranch c3f391d481480b96ca6a2aa0b4a56f888627218a

Branches & Commits f2e49f neuerbranch 3a912 0d9a2 c3f391 master

neuerbranch f2e49f a9d23 3a912 0d9a2 c3f391 master Branches & Commits

neuerbranch f2e49f c0341 3a912 a9d23 0d9a2 c3f391 master Branches & Commits

neuerbranch f2e49f c0341 3a912 a9d23 0d9a2 c3f391 4102a master Branches & Commits

Merge neuerbranch f2e49f c0341 3a912 a9d23 master 0d9a2 c3f391 9c221 4102a

Merge (fast­forward) f2e49f neuerbranch 3a912 c0341 0d9a2 a9d23 c3f391 master

Merge (fast­forward) f2e49f neuerbranch 3a912 c0341 0d9a2 a9d23 c3f391 master

Commitish in a nutshell Eine Git­Version (Hash) umfasst stets alle Inhalte alle Datei(­ordner) alle Commit­Nachrichten des Commits und aller Vorgänger

Workspace Staging AREA (Index, Cache) Commit

GIT IM TEAM

Daten­Austausch git:// file:// ssh:// http:// mailto:// Alice Bob

n:m

Elvis Alice Bob Dennis Charly

Alice Bob Dennis Elvis Charly Fred Gina

Gate­ keeper Production Dev Elvis Alice Bob Dennis Charly

Individuelle Prozesse Branch Feature­basiert Trunk­basiert Basisprodukt + Varianten ... Repository Zentral Hierarchisch Gatekeeper …

ADVANCED FEATURES

Rebase neuerbranch f2e49f c0341 3a912 a9d23 neuerbranch‘ 0d9a2 47a31 c9a21 c3f391 4102a master

interactive rebase Commits … zusammenfassen … weglassen … ändern

Interactive Rebase neuerbranch f2e49f c0341 3a912 a9d23 0d9a2 92cd7 c3f391 Commits 4102a master zusammenfassen weglassen ändern

bisect Welcher Commit ist Auslöser des Bugs?

git­svn Arbeiten gegen Subversion­Repo http://subgit.com/ Kommerzielle, serverbasierte Alternative mit weniger Einschränkungen ( git/svn Mirroring )

BEST PRACTICES

commit often commit early Kleine Änderungen Isolierte Änderungen Intensives Branching Cleanup am Ende

Klares Branching­Modell Angemessen Verständlich Dokumentiert

Lineare Historie anstreben Kurzlaufende Branches Rebasing

Historie intakt halten Keine Änderungen an veröffentlichten Commits (z.B. Rebase)

Ordnung halten Cherry­Picks & Rebases dokumentieren Branch­Inhalte Branch­Naming Commit­Kommentare

FALLSTRICKE

Windows

Windows Umlaute Line­Endings Performance File Execution Bits 2.te Klasse

git push ­­force

Falscher Workflow

CLIENTS

CLI (Shell)

GitHub for Windows/Mac

Source Tree (Win/Mac)

Weitere gute Clients IDE: IntelliJ Nahtlos TortoiseGit Explorer­Integration Tower (Mac, 49€) Sehr leistungsfähig

TOOLS & ÖKOSYSTEM

GitHub Clones „Pull Requests“ Issue Tracking Code Browser & Review Wiki Security & Permissions https://github.com/takezoe/gitbucket Scala­basierter Clone http://gitblit.com/ Java­basiert http://gitlabhq.com/ Populär. Etwas komplexer Betrieb

Code Review Tools http://code.google.com/p/gerrit/ http://phabricator.org/ Git­basiertes Code­Review System Code Review & Repo­Browser

Continuous Integration Continuous Delivery https://travis­ci.org/ http://jenkins­ci.org/ CI als Gatekeeper Tests vor Code­ Integration Hosted CI. Frei für FOSS­Projekte Populärer, FOSS CI Server

FAZIT

Innovatives & lebendiges Ökosystem & Tools! „Distributed“ Arbeiten mit leichtgewichtigen Branches ‚Einfache‘ & Effiziente Konzepte Große Freiheitsgrade (Workflow, Undo, …)

Teils steile Lernkurve Mächtige Mittel zur Manipulation der Historie Keine Teil­Checkout möglich Kein Rename­Tracking Kanten unter Windows

WEITERFÜHRENDE INFORMATIONEN

Lernen & Dokumentation „Pro Git“ – Freies Online­Buch mit deutscher Übersetzung! http://git­scm.com/book/de „Try Git“ – Interaktives Tutorial im Browser zum Einstieg http://try.github.io/ „Learn Git Branching“ – Sehr gutes, Interaktives Tutorial welches Rebasing & Co. vermittelt http://pcottle.github.io/learnGitBranching/

Workflow & Best Practices „Simple Git workflow is simple“ https://blogs.atlassian.com/2014/01/simple­git­workflow­simple/ & https://gist.github.com/jbenet/ee6c9ac48068889b0912 „Git Flow“ – Relativ popluläres, aber auch komplexes Modell http://nvie.com/posts/a­successful­git­branching­model/ „Commit Often, Perfect Later, Publish Once: Git Best Practices” http://sethrobertson.github.io/GitBestPractices/

FRAGEN & ANTWORTEN

Add a comment

Related presentations

Related pages

" 'Git started' für Fortgeschrittene" - eXXcellent solutions

Vortrag von Benjamin Schmid (OOP) ... Kontakt. Consulting; Software; Kompetenz; Journal; Unternehmen; Karriere
Read more

" 'Git started' für Fortgeschrittene" - eXXcellent solutions

Vortrag von Benjamin Schmid (JFS) ... Kontakt. Consulting; Software; Kompetenz; Journal; Unternehmen; Karriere
Read more

Git started für Fortgeschrittene | Java User Group ...

Diese Session langweilt Euch nicht mit einer weiteren, oberflächlichen Einführung, sondern nutzt direkt ihre bisherigen Erfahrungen als professioneller ...
Read more

'Git started' für Fortgeschrittene! - 2014.java-forum ...

DAG in Git v1 v2 v3 v4 Datei #1 Datei #2 Datei #3 Datei #1‘ Datei #2‘ Datei #2‘‘ Datei #1‘‘ Datei #2‘‘‘ Datei #3 Datei #3 Datei #3 ...
Read more

tsreport - design - OOP 2014 - Tag 3

"Git Started" für Fortgeschrittene. Benjamin Schmid gibt einen Überblick über die Möglichkeiten und Vorteile eines Einsatzes von Git als ...
Read more

Java Forum Stuttgart am 17. Juli 2014: Vortragsprogramm ...

'Git started' für Fortgeschrittene (Benjamin Schmid, eXXcellent solutions GmbH) [E2] BPMN 2.0 – Best Practices & Patterns für die Prozess-
Read more

Herbstcampus - Zeitplan

Git started für Fortgeschrittene. Benjamin Schmid. PDF. B25 Übermitteln statt Dokumentieren. Die Rolle der Dokumentation in agilen Projekten. André ...
Read more

OOP Konferenz - Konferenzprogramm - 2014

'Git started' für Fortgeschrittene! Benjamin Schmid. Mi 2.2. 11:00 - 11:45. Software Architecture.
Read more