"git.net" gibt's nicht?

26
Torsten Flatter | inovex GmbH "Git.NET" gibt's nicht?

Upload: inovex-gmbh

Post on 19-Jun-2015

303 views

Category:

Lifestyle


0 download

DESCRIPTION

Vortrag von Torsten Flatter auf der BASTA! 2012

TRANSCRIPT

Page 1: "git.net" gibt's nicht?

Torsten Flatter | inovex GmbH

"Git.NET" gibt's nicht?

Page 2: "git.net" gibt's nicht?

Vorstellung

• Torsten Flatter

• inovex GmbH

• .NET / C# seit 2004

• VSS, CVS, SVN,

TFS, hq, git

• Enterprise-Umfeld

Page 3: "git.net" gibt's nicht?

Agenda

• Überblick

• Grundlagen

• Einsatzbereiche

• Tools

Page 4: "git.net" gibt's nicht?

Fragen und Antworten

• Fragen bitte gleich stellen!

• Grundsatz-Diskussionen am Ende

Page 5: "git.net" gibt's nicht?

Überblick

DVCS: Großer

Durchbruch in den

letzten Jahren

• Git

• Mercurial

• (Bazaar)

Page 6: "git.net" gibt's nicht?

Erfolg von DVCS

• Aus der Praxis geboren (Linux Kernel)

– „Eat your own dogfood!“

– Offline(fähig)

– schnell und effizient

• Katalysator Github

– Leichter Zugang für jeden

• Es macht einfach Spaß!

• Zahllose Anwendungsmöglichkeiten

Page 7: "git.net" gibt's nicht?

Next

• Was bedeutet „verteilt“ eigentlich

genau?

• Welche Vorteile habe ich?

• Wie kann das ohne Server

funktionieren?

• Quellenangabe: Bilder aus progit.org

Page 8: "git.net" gibt's nicht?

Klassisches Setup

• Historie aller Commits

auf dem Server

• Jeder Client hat genau

seine Arbeitsdaten

• Commits gehen gegen

den Server

• Wie sonst? ;-)

Page 9: "git.net" gibt's nicht?

Verteiltes Setup (ein Client)

• Die vollständige(!)

Historie ist auf

jedem Client

• Commits gegen den

Client

• Ebenso Rollbacks,

Branches, Diffs, …

Page 10: "git.net" gibt's nicht?

Verteiltes Setup (2 Clients)

• Volle Historie auf

allen Clients

• Jeder Client hat alle

Daten im Repo

(Verzeichnis .git)

• Clients holen sich

Updates (pull)

Page 11: "git.net" gibt's nicht?

Verteiltes Setup (viele Clients)

• Bei Teams ≥ 2 ist Server sinnvoll

• Server-Stand „führt“ (per Konvention)

• Austausch zum Server mit push und pull

• Direkter Austausch zwischen Clients weiterhin möglich!

Page 12: "git.net" gibt's nicht?

Wie funktioniert das?

• Versions-IDs sind GUIDs

– Keine formalen Konflikte der Commits

– Inhaltliche Konflikte natürlich weiterhin möglich ;-)

• History auf dem „Client“ wird bestimmt durch commits

• History auf dem „Server“ (besser: baseless Repo) wird bestimmt durch pushes

Page 13: "git.net" gibt's nicht?

Anwendungsmöglichkeiten

• Versionierung nicht nur von Code …

– Skripte (SQL, cmd, …) Diff!

– Dokumente (Office, UML, Specs!) History!

– Bilder (Logos, Icons, …)

• Backup einfach per git push auf …

– Netzlaufwerk

– anderen Rechner

– USB-Stick „Aktenkoffer“

• Einfach starten, einfach skalieren! …

Page 14: "git.net" gibt's nicht?

Zukunft von DVCS

• IMHO: Zukunft aller VCS

– VCS sind Subset von DVCS

Page 15: "git.net" gibt's nicht?

Konkret im MS-Umfeld

• Team Foundation Server (langfristig)

Brian Harry (blogs.msdn.com)

„people are asking ‘but, did you implement

DVCS?’. The answer is no, not yet.“

• Git-tf (kurzfristig)

Brian Harry (blogs.msdn.com) „you can create a local Git repo from a TFS

server with git tf clone”

Page 16: "git.net" gibt's nicht?

Next

• Typischer Workflow eines neuen

Projekts

Page 17: "git.net" gibt's nicht?

Neues Projekt erzeugen

> git init • Erzeugt ein neues

.git-Verzeichnis

• Das Repository

enthält alle Daten

– Dateien

– Historie

– Branches

– …

Page 18: "git.net" gibt's nicht?

An Projekt teilhaben

> git clone <origin> • Klont ein existierendes

Repository

• Das Repository

enthält alle Daten

– Dateien

– Historie

– Branches

– …

Page 19: "git.net" gibt's nicht?

Dateien hinzufügen

> git add Program.cs • Fügt Dateien dem

index hinzu.

• Notwendig für

– Neue Dateien

– Geänderte Dateien

Page 20: "git.net" gibt's nicht?

Dateien versionieren

> git commit -a

-m "erste Version“

• Fügt Dateien der

Historie hinzu

• -a: add (wichtig!)

• -m: Kommentar

• Ab jetzt für andere

Clients über pull

oder push verfügbar

Page 21: "git.net" gibt's nicht?

Neuen Stand holen

> git pull origin master

• Holt den letzten

Stand

• „origin“ ist Quelle

von clone

Page 22: "git.net" gibt's nicht?

„guten“ Stand sichern

> git push origin master

• Veröffentlicht den

aktuellen Stand

• „origin“ ist Quelle

von clone

Hier ist der große

Vorteil von DVCS:

Nur validierte Stände

werden veröffentlicht

Page 23: "git.net" gibt's nicht?

Tools

• Kommandozeile ist OK, aber

es geht auch bequemer:

• TortoiseGit fürs Filesystem

• Msysgit als Unterbau

• Git Source Control Provider

für Visual Studio

Page 24: "git.net" gibt's nicht?

Workflows von DVCS

• Viele kleine lokale Commits

• Push erst dann, wenn alles läuft (ggf. rebased)

• Branches möglich, aber nicht immer nötig

• Wenn nötig, dann lokal oder remote möglich

• Lokale Branches sind wirklich nur lokal ;-)

Page 25: "git.net" gibt's nicht?

Erste Schritte

• Ausprobieren mit Skripten

• Wenn was nicht klappt

• .git-Verzeichnis einfach wieder löschen

• von vorne anfangen

• Nichts zu verlieren ;-)

Page 26: "git.net" gibt's nicht?

Weitere Doku

• Im Netz gibt es unheimlich viel Doku zu git

• Die Quelle: http://git-scm.com/

• Das Buch „Pro Git“: http://git-scm.com/book/de

• Die Referenz

• Selbst in git versioniert