58
Git-Grundlagen für Entwickler Thomas Claudius Huber @thomasclaudiush

Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Git-Grundlagen für Entwickler

Thomas Claudius Huber

@thomasclaudiush

Page 2: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

▪ Principal Consultant bei Trivadis

▪ Pluralsight-Autor, Buchautor

▪ C#, XAML, TypeScript, Azure

www.thomasclaudiushuber.com

@ThomasClaudiusH

Thomas Claudius Huber

Page 3: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Agenda

Git Grundlagen

Init, Commit, Branching

Remote Repositories

Page 4: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

GIT GRUNDLAGEN

Page 5: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Ohne Version Control System (VCS)

Page 6: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Ohne Version Control System (VCS)

Page 7: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

VCS Arten

▪ Lokale

▪ Zentralisierte

▪ Verteilte

Page 8: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Lokale VCS

Versions

Datenbank

Datei Version 3

Version 2

Version 1

Checkout

Page 9: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Zentraler VCS Server

Zentralisierte VCS

Versions Datenbank

Version 3

Version 2

Version 1

Computer 1

Datei

Computer 2

Datei

Page 10: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Verteilte VCS

Server Comp.

Versions

Datenbank

Version 2

Version 1

Computer 2

Versions

Datenbank

Version 2

Version 1

Datei

Computer 1

Versions

Datenbank

Version 2

Version 1

Datei

Page 11: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DER LINUX-KERNEL

Git Grundlagen

Page 12: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Verwaltung des Linux Kernels

20021991 2005

Änderungen am

Linux Kernel via

patches und archive

files

Linux Kernel wird mit

BitKeeper verwaltet

Bruch zwischen

Community und

BitKeeper

Page 13: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

2005 – Git Anforderungen

Geschwindigkeit

Einfaches Design

Starke nicht lineare

Entwicklung

Verteiltes VCS

Umgang mit riesigen

Codebasen(Linux-Kernel)

Page 14: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

2005 – die Geburt von Git

“Git” => englisch fürBlödmann

Linus Torvalds: “Ich bin ein egoistischer Bastard, und

ich benenne alle Projekte nach mir selbst, erst Linux,

jetzt Git“

▪ Gründe für den Namen: Kurz, leicht auszusprechen,

leicht zu tippen, einzigartig, kein belegtes Standard

Command auf der Konsole

Page 15: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

SNAPSHOTS

Git Grundlagen

Page 16: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Klassische Versionierung

v2

Version 1

Datei A

Version 2 Version 3 Version 4 Version 5

Datei B

Datei C v2

v2

v3

v3 v4

v3

Page 17: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Snapshots in Git

Version 1

Datei A

Version 2 Version 3 Version 4 Version 5

Datei B

Datei C C2

B2

A3

C3 C4

B3

A2

B1B1

A3 A3

C2

Page 18: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Snapshots in Git

▪ Werden über einen Hash-Wert identifiziert

▪ SHA-1 hash

– String mit 40 Zeichen

b8bef49f3ff89c41b585d994489efd8fe8b2949b

Page 19: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

GIT INSTALLIEREN

Git Grundlagen

Page 20: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Git installieren

▪ Installieren via https://git-scm.com/downloads

– Enthält neben Git auch die Git Bash und Git GUI

– Erlaubt Git auf der Commandline

▪ Visual Studio enthält Git

Page 21: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Git konfigurieren

▪ Konfiguration anzeigen:

git config -l

git config --global user.name "Thomas Claudius Huber"git config --global user.email "[email protected]"

▪ Benutzer einrichten (in jedem Commit):

▪ Einzelne Konfiguration abfragen:

git config user.name

Page 22: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Git konfigurieren

▪ Config wird in verschiedenen Ebenen gespeichert

C:/ProgramData/Git/config

C:\Users\$USER

▪ Darüber hinaus pro Repository in

.git/config

▪ Ursprung der Konfiguration anzeigen:

git config –l --show-origin

Page 23: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

Git konfigurieren

Page 24: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Agenda

Git Grundlagen

Init, Commit, Branching

Remote Repositories

Page 25: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

▪ Den Status in Kurzform abfragen

Ein Repository erstellen

▪ Repository initialisieren

git init

▪ Den Status abfragen

git status

git status -s

Page 26: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

Repository erstellen

Page 27: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DAS ARBEITSVERZEICHNIS

Mit Repositories arbeiten

Page 28: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Staging Bereich(.git-Ordner)

Das ArbeitsverzeichnisArbeits-

verzeichnis

Repository /

Datenbank(.git-Ordner)

1. Checkout

2. Staging 3. Commit

Page 29: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

“Stagen”Entfernen

Ändern

Die Dateizustände

untracked unmodified modified staged

Datei “stagen”

Commit

Page 30: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Git auf der Kommandozeile nutzen

▪ Status abfragen

git status

▪ Datei “stagen”

git add dateiname.txt git add .

▪ Committen

git commit –m “Meine Commit-Nachricht”

Page 31: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

Mit Dateien arbeiten

Page 32: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Git auf der Kommandozeile nutzen

▪ Datei entfernen

git rm dateiname.txt

▪ Diff anzeigen

git diff

▪ Diff in Tool anzeigen

git difftool

git diff --staged

git difftool --tool-help

Page 33: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

Diff anzeigen

Page 34: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Log ansehen

▪ Zeigt Commits an (mit Snapshot-Hash (SHA1)):

▪ git checkout “Hashanfang” checkt den commit aus:

git log

git checkout fea23ce22

git log --pretty=oneline

Page 35: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

Logs ansehen und

Commits laden

Page 36: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Dateien ignorieren

▪ .gitIgnore-Datei anlegen

▪ Syntax:

– Leere und mit # startende Zeilen werden ignoriert

– Negation mit einem Ausrufezeichen (!)

– Erlaubt standard Glob patterns (=wie einfache Regex)

– / am Anfang, um Rekursion zu vermeiden

– / am Ende, um Verzeichnis zu wählen

Page 37: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Dateien ignorieren: Glob Patterns

* - keines, eines oder mehrere Zeichen

? – genau ein Zeichen

[abc] – einen Buchstaben in den Klammern

[0-9] – ein Zeichen in der Reihe (Zahlen von 0 bis 9)

** - um verschachtelte Verzeichnisse zu erhalten:

a/**/x findet a/x, a/b/x, a/b/c/x etc.

Page 38: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

.gitIngore# Alle txt-Dateien ignorieren*.txt# Nur txt-dateien aus root-Ordner ignorieren/*.txt# Aber nicht die readme.txt!readme.txt# Alle Dateien im myProject/bin-Verzeichnis ignorierenmyProject/bin/# Alle .suo-Dateien im myProject-Verzeichnis# (incl. Unterverzeichnisse ignorieren)myProject/**/*.suo

Page 39: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

.gitIngore

▪ Viele gute .gitIngore-Beispiele sind auf

https://github.com/github/gitignore

Page 40: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

.gitIngore anlegen

Page 41: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Branches erstellen

▪ Branches anzeigen (Aktueller mit * gekennzeichnet

▪ Branch erstellen und ins Arbeitsverzeichnis auschecken

▪ Zurück zum master wechseln

git branch

git branch myNewFeature

git checkout myNewFeature

git checkout master

Page 42: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Branches mergen

▪ Branches mergen:

▪ Neben merging gibt es auch das sog. “rebasing”

– Commits werden auf branch appliziert

▪ Niemals rebasing auf remote-branch machen!

▪ Mit --graph den Graph auf der Console sehen:

git merge myNewFeature

git log --pretty=oneline --graph

Page 43: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

Mit Branches arbeiten

Page 44: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Tags erstellen

▪ Tag erstellen

▪ Tag auschecken

▪ Zurück zum master-branch wechseln

git tag –a MeinTag –m “Ein schöner Tag”

git checkout MeinTag

git checkout master

Page 45: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

Tags nutzen

Page 46: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Agenda

Git Grundlagen

Init, Commit, Branching

Remote Repositories

Page 47: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Remotes hinzufügen

▪ Remotes abfragen

▪ Remotes anlegen

git remote

git remote add <name> <url>

Page 48: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Remote aktualisieren

▪ Branch in Remote pushen

▪ Upstream mit –u-parameter setzen:

git push <remote-name> <branch-name>

git push –u origin master

git push origin master

git push

Page 49: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Lokales Repo aktualisieren

▪ Zum ersten Mal in aktuelles Verzeichnis kopieren:

– fügt remote automatisch unter Namen “origin” hinzu

▪ Neue Daten laden und mergen:

▪ Oder mit gesetztem Upstream einfach

git clone <remote-url> .

git pull origin master

git pull

Page 50: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Pulling

▪ Git pull merged remote-branch in lokalen:

▪ Auch in zwei Schritten möglich

git pull

git fetch

git merge

Page 51: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Remotes auflisten

▪ Alle Branches anzeigen, nicht nur lokale:

git branch -a

Page 52: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

In GitHub-Repo

pushen/pullen

Page 53: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Was ist ein Pull-Request

▪ Anfrage, den eigenen Branch in den Hauptbranch zu

mergen

▪ git pull = git fetch und git merge

Page 54: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

DEMO:

Pull-Request

durchführen

Page 55: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Agenda

Git Grundlagen

Init, Commit, Branching

Remote Repositories

Page 56: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Genutzte Befehle

git clone <repo-url>git add .git statusgit commit –m “Comment”git push –u origin mastergit fetchgit merge

git --helpgit <befehl> -help

Page 57: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Summary

▪ Git ist ein verteiltes Versionskontrollsystem

▪ Es gibt drei Bereiche

– Repository

– Staging

– Arbeitsverzeichnis

▪ Fast alle Befehle lassen sich lokal ausführen

Page 58: Git-Grundlagen für Entwickler - Thomas Claudius Huber · Version 2 Version 1 Computer 1 Datei Computer 2 Datei. Verteilte VCS Server Comp. Versions ... 1991 2002 2005 Änderungen

Danke

[email protected]

www.trivadis.com

www.thomasclaudiushuber.com

@ThomasClaudiusH