Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Einführung in git
Johannes Gilger & Matthias LederhoferRechen- und Kommunikationszentrum der RWTH Aachen
Network Operation Center
14. Juli 2010
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Übersicht
I Begriffe in der VersionsverwaltungI Unterschiede zentrale und dezentrale VCSI Warum man git benutzen sollteI Wie git funktioniertI Wie wir git benutzenI Weiterführende Literatur und Software
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Begriffe
I DVCS, VCS, SCM - (Verteilte) VersionsverwaltungI Repository - Enthält die Geschichte (alle Versionen) eines
ProjektsI Commit, Revision - Identifiziert eine Version
SVN: 423, git: b8bba41...I Branch - Ein Entwicklungszweig in der GeschichteI Worktree - Das aktuelle Arbeitsverzeichnis (Dateien)I Checkout - Die angelegten Dateien die einem bestimmten
Stand entsprechen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Zentrale Versionskontrolle ...
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Dezentrale Versionskontrolle
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Typischer zentralisierter Workflow
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Typischer verteiler Workflow
Festlegung auf Master-Repository ist nur Konvention.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Kurze Geschichte von git
I 2005: Linus Torvalds schreibt git für die Entwicklung desLinux-KernelsAnfangs sehr low-level und kompliziert
I 2005-2010: Linus gibt die Entwicklung ab, schnellwachsende und aktive Community
I 2010: git 1.7.1.1 ist aktuell, viele Open-Source Projektesind inzwischen auf git umgestiegenAndroid, Debian, Eclipse, Fedora, GIMP, Gnome,openSUSE, Perl, Ruby on Rails, Samba, VLC, Wine, X.org
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Motivation”Warum die ganze Arbeit?”
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Warum sollte man git benutzen?
I Viele neue Konzepte, anfangs evtl. schwer zu verstehenUngefähr einen Monat Einarbeitungszeit, zahlt sich jedochschnell aus
I ”SVN funktioniert doch / Viele Leute benutzen noch SVN”git-svn hilft bei der Umstellung. Die meistenOSS-Projekte wechseln auf ein DVCS
I ”Ich hab nicht vor Open-Source Software zu schreiben”git ist genauso hilfreich wenn man nur allein arbeitet
I Andere Gründe?
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Vorteile von git gegenüber SVN
I Geschwindigkeitgit ist sehr schnell und speicherzeffizient, alle Operationensind lokal (offline)
I Kein Setupgit init und sofort loslegen, keine Erstellung vonzentralen Projekten nötig
I Einfache RechtevergabeNormale Dateisystemberechtigungen, Zugriff lokal oderz.B. über SSH
I Schnelle parallele EntwicklungKeine Festlegung auf Regeln oder Rollen
Siehe auch http://www.whygitisbetterthanx.com ;)
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
”Nachteile” von git
I Kein Checkout von SubdirsKein wirklicher Nachteil, bedeutet dass man Projekte eherin einzelne Repositories aufteilt
I Keine feine Rechtevergabe für ServerOft nicht nötig durch Workflow (Maintainer, Teams)
I Potentielles Chaos mit mehreren LeutenWenn sich nicht auf einen Workflow geeignigt wird
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Technischer Hintergrund”Behind the curtain. . . ”
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git Datenstrukturen und Dateilayout
Die Datenstrukturen von git zu kennen...
I Hilft enorm die Funktion der Befehle zu verstehen.I Vermeidet falsche Arbeitsabläufe.I Ist kein großer Aufwand.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Delta-Storage vs. Snapshotssource control taxonomy
deltastorage
file A !1
file B
file C
C1 C2 C3 C4 C5
!2
!1 !2
!1 !2 !3
A
B
C
C1 C2 C3 C4 C5
A1
B
C1
A1
B
C2
A2
B1
C2
A2
B2
C3
DAGstorage
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git ist ein Dateisystem mit Versionen
Wichtigstes Konzept: Die History ist eine einfach verlinkte Listevon Commits. Die Links zeigen ”zurück”, zeitlich gesehen.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git ist eine Objekt-Datenbank
!"##$%
%&'
%())
*+"*
%())
%())
!"##$%
%())
*+"*
%())
%()) *+"*
!"##$%
%())
*+"*
*+"*
*(&,!-
./01
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Commits und Branches
Branches sind nur Zeiger (”references”) auf existierendeCommits
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
HEAD - der aktuelle Branch
HEAD zeigt an auf welchem Branch aktuell Commitsgespeichert werden
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git checkout - den aktuellen Branch ändern
Ein Checkout aktualisiert den Worktree und den HEAD-Zeiger
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git commit - einen Commit erstellen
Da HEAD auf ”testing” zeigte wurde hier der Commit angelegt
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git checkout - zum ersten Branch zurück
Es müssen währenddessen noch Änderungen amHauptentwicklungszweig vorgenommen werden
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git commit - ein paralleler Branch
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Branching und Merging
!"
#$%&'(
!)
!* !+
',-'(.#'/&!"
#$%&'(
!)
!* !+
!,
'-.'(/#'0&
!1
2"
git checkout -b experiment
HEAD
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Branching und Merging
!"
#$%&'(
!)
!* !+
',-'(.#'/&
!"
#$%&'(
!)
!* !+
!,
'-.'(/#'0&
!1
2"
git commit
HEAD
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Branching und Merging
!"
#$%&'(
!)
!* !+
',-'(.#'/&
!"
#$%&'(
!)
!* !+
!,
'-.'(/#'0&
!1
2"
git commit
git commit
HEAD
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Branching und Merging
!"
#$%&'(
!)
!* !+
',-'(.#'/&
!"
#$%&'(
!)
!* !+
!,
'-.'(/#'0&
!1
2"
HEAD
git checkout master
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Branching und Merging
!"
#$%&'(
!)
!* !+
!,
'-.'(/#'0&
!1
2"
!"
#$%&'(
!)
!* !+
!,
'-.'(/#'0&
!1
2"git commit
HEAD
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Branching und Merging
!"
#$%&'(
!)
!* !+
!,
'-.'(/#'0&
!1
2"
git checkout experimentgit commit
HEAD
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Branching und Merging
!"!#
!$ !%
!&
'()'*+,'-.
!/
!0
,12.'*3"
git checkout mastergit merge experiment
HEAD
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Remotes
I Remotes sind Kürzel um mit anderen Repositories zuarbeiten. Namespaces nach Repository: jojo/master
I Remote Branches (Tracking Branches) dienen dazu derArbeit in anderen Repositories zu folgen
I Entwickelt wird immer auf lokalen BranchesI Auf Remote Branches kann nicht committed werdenI Remote Branches werden nur durch fetch / pull geändert
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Tracking Branch
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Tracking Branch
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Tracking Branch
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Der Index / Stage
Der Index ist sehr mächtig und Alleinstellungsmerkmal von git
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Der Index / Stage
Typische Arbeitsweise mit git (links).Workflow wie bei SVN (rechts) auch möglich.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Dateizustände
Anfangs evtl. verwirrend, git status zeigt immer Hilfe an.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
PraxisBefehle, Dateien, Programme
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Wichtige git-Befehle - Arbeiten
I git help <command>Hilfe zu git-commands, wichtigster Befehl ;)
I git initEin git-Repo im aktuellen Verzeichnis beginnen
I git addDatei dem Index hinzufügen
I git statusStatus der Dateien im Arbeitsverzeichnis
I git diffAktuelle Änderungen als diff anzeigen
I git commitCommit erstellen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Wichtige git-Befehle - History
I git logLog (History) anzeigen
I git branchBranches anzeigen (aktueller Branch hervorgehoben)
I git checkout <branch>Branch auschecken
I git show <object>Objekt (Branch, Commit, HEAD) anzeigen
I git blame - <file>Anzeigen wer zuletzt welche Zeile geändert hat
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Wichtige git-Befehle - Kollaboration
I git branch -aAlle Branches anzeigen
I git checkout -b <new_branch> <old_branch>Branch erzeugen und auschecken
I git pull bzw. git fetchAktualisierung des Repositories vom Server
I git pushAktualisierung des Repositories auf den Server
I git merge <branch>Einbinden eines anderen Branches
I git remoteAnzeigen von eingetragenen Servern
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git revisions
Für Befehle wie git log, git diff, git checkout, gitshow etc.
I dae86e1950b1277e545cee180551750029cfe735 oderdae86e (falls eindeutig)SHA1 des Commits
I master oder origin/masterBranch-Namen (References)
I master˜5Der fünfte Vorgänger des letzten Commits auf master
I master@{yesterday}Zustand von master gestern
Siehe auch git help rev-parse für weitere Optionen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git revisions
Für Befehle wie git log, git diff etc.
I master..testingÄnderungen in testing aber nicht in master
I master..Änderungen im aktuellen Branch die nicht in master sind
I ..masterÄnderungen die in master aber nicht im aktuellen Branch sind
I master...testingSymmetrische Differenz
Siehe auch git help rev-parse für weitere Optionen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Wichtige git-Dateien
I $HOME/.gitconfiggit Benutzerkonfiguration
I .gitignoreZum Ignorieren bestimmter Dateien bzw. Dateitypen,Verzeichnisweise und rekursiv
I .gitgit Repository, nur einmal, im obersten Verzeichnis
I .git/configKonfiguration auf Repository-Ebene, z.B. Remotes
I .git/objectsObjektdatenbank (Dateien, Commits, Tags)
I .git/refsBranches (References)
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Wichtige git-Dateien - Branches
Namespaces für refs (”references”) in .git:I .git/refs/heads
Lokale BranchesI .git/refs/remotes
Remote BranchesI .git/refs/tags
Tags (Versionsnummern)Gearbeitet wird immer auf lokalen Branches, Remote Brancheswerden nur von git pull bzw. git fetch geändert.Commits ohne Branch gehen früher oder später verloren!
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git Tutorial
Initiale Konfiguration:git config −−global user.name ”Johannes Gilger”
git config −−global user.email ”[email protected]”
Eventuell noch:git config −−global color.ui ”auto”
git config −−global color.status.changed ”yellow”
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Das erste Repository
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Das erste Repository
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Das erste Repository
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git Installation & Interfaces
I Linux: Installation mittels DistributionGrafische Programme: gitk und git gui
I Mac OS X: Installation mittels fink / MacPorts odergit-osx-installerGrafische Programme: gitk oder GitX
I Windows: Installation per msysgitGrafische Programme: tortoisegit
I Web: GitWeb (privat), GitHub (Hosted)
⇒Wie immer ist die git-Webseite der beste AnlaufpunktAber: Eigentlich kein GUI nötig um mit git zu arbeiten
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git GUIs - GitX
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git GUIs - gitk
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git GUIs - git gui
Dateien können abschnittsweise committed werden
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git GUIs - tortoisegit
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
git GUIs - tortoisegit
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Wie wir im NOC git benutzen
I Szenario 1: Entwicklung (kleinerer) WebanwendungenMeistens an Ort und Stelle (.git), sehr schnell und einfach
I Szenario 2: Änderung an externer Software festhalten(z.B. wenn Software von uns ”shibbolized” wird)
I Szenario 3: Größere Projekte mit mehreren Mitarbeitern.Ausgezeichnete Versionen (v0.5) direkt unterstützt
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Wie wir im NOC git benutzen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Wie wir im NOC git benutzen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Benutzung von git lernen
1. git installierenLinux: Package-Manager
2. Kopie von bisherigem Code in neues VerzeichnisDann ein git init und weiterentwickeln
3. Regelmäßig Doku / manpages lesen4. Alle Befehle ausprobieren
Insbesondere destruktive Aktionen und Recovery5. Im Zweifelsfall vorher das ganze Verzeichnis kopieren
Als Backup wenn man sich noch nicht ganz sicher ist6. Dateien in .git anschauen
Was sind Objekte? Was sind Branches?
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
Literatur zu git
I Pro Git - http://progit.org/book/Sehr ausführliches Online-Buch das alle Themenbehandelt
I ”Getting Git” -http://www.gitcasts.com/git-talkGuter Vortrag (mit Folien) zur Benutzung undDatenstrukturen
I git ref - http://gitref.org/Die wichtigsten git-Befehle kurz erklärt
I git - SVN crash course -http://git-scm.com/course/svn.htmlEinführung in git mit Vergleichen zu svn
I Git - kurz & gut - O’Reilly, ISBN: 978-3-89721-914-4Gute und umfassende Einführung in Deutsch (e9,90)
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git
The End
Fragerunde!
Folgefragen können gerne an [email protected] [email protected] gerichtet werden.
Oder einfach vorbei schauen ;)
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in git