Interner Git-Power-Workshop am Lehrstuhl für Informatik III
Dauer: 2,45 h
Teilnehmer hatten die Gelegenheit, Gelerntes direkt am eigenen Laptop auszuprobieren.
DWX 2017 - GIT im Leben eines VS EntwicklersMarc Müller
GIT gilt als die beliebteste und erfolgreichste verteilte Quellcode-Verwaltung überhaupt und ergänzt seit nun fast drei Jahren das Portfolio der ALM Plattform Team Foundation Server. Für eingefleischte TFVC Benutzer stellt Git oftmals noch Neuland dar und es gilt einigen Stolperfallen geschickt aus dem Weg zu gehen. Im Vortrag zeigen wir mit viel Hintergrundinformationen und Beispielen, welche Konzeptänderungen auf einen warten. Nebst Visual Studio zeigen wir auch Shell Extensions und die Kommandozeilen-Tools als Ergänzung zum gewohnten Tool-Sets. Themen wie Git-Flow oder Large File Support (LFS) dürfen natürlich ebenfalls nicht fehlen.
Cleaning Up the Dirt of the Nineties - How New Protocols are Modernizing the WebSteffen Gebert
About HTTP/2, QUIC, and Multipath TCP.
Download of PDF file recommended (Slideshare screws backgrounds up)
Talk at the TYPO3camp Vienna
Vienna, Austria, 06.-08.05.2016
DWX 2017 - GIT im Leben eines VS EntwicklersMarc Müller
GIT gilt als die beliebteste und erfolgreichste verteilte Quellcode-Verwaltung überhaupt und ergänzt seit nun fast drei Jahren das Portfolio der ALM Plattform Team Foundation Server. Für eingefleischte TFVC Benutzer stellt Git oftmals noch Neuland dar und es gilt einigen Stolperfallen geschickt aus dem Weg zu gehen. Im Vortrag zeigen wir mit viel Hintergrundinformationen und Beispielen, welche Konzeptänderungen auf einen warten. Nebst Visual Studio zeigen wir auch Shell Extensions und die Kommandozeilen-Tools als Ergänzung zum gewohnten Tool-Sets. Themen wie Git-Flow oder Large File Support (LFS) dürfen natürlich ebenfalls nicht fehlen.
Cleaning Up the Dirt of the Nineties - How New Protocols are Modernizing the WebSteffen Gebert
About HTTP/2, QUIC, and Multipath TCP.
Download of PDF file recommended (Slideshare screws backgrounds up)
Talk at the TYPO3camp Vienna
Vienna, Austria, 06.-08.05.2016
Neuigkeiten aus dem TYPO3-Projekt - der aktuelle Stand von TYPO3 CMS 6.0, TYPO3 Neos und TYPO3 Flow.
Vortrag auf der 1. CMS Night Nürnberg, im Rahmen der Nürnberg Web Week
Nürnberg, 23.10.2012
1. Institute of Computer Science
Chair of Communication Networks
Prof. Dr.-Ing. P. Tran-Gia
Git Crashkurs
Steffen Gebert
steffen punkt gebert ät informatik punkt uni-wuerzburg punkt de
www3.informatik.uni-wuerzburg.de
2. Warum Git?
u Git ist hipp! (u.a. wegen Github)
u Git ist schnell – vieles geht lokal
u Git ermöglicht bessere Zusammenarbeit / lokale Abweichungen
u Arbeit in Branches funktioniert
u uvm. (als Text sicher nicht soo überzeugend J)
2
2
Steffen Gebert
4. Git-Datenstrukturen
u Objekte identifiziert über SHA-1 hashes
u Blob: zB Inhalt einer Datei
§ Ohne Dateiname
§ Ohne Meta-Information
Vieles geklaut von:
http://eagain.net/articles/git-for-computer-scientists/
4
4
Steffen Gebert
5. Git-Datenstrukturen
u Tree-Objekt verknüpft Meta-Informationen mit Datei- und
Verzeichnisinhalten
§ Beschreibt, welche Dateien mit welchen Inhalten existieren
http://www.slideshare.net/chacon/getting-git
5
5
Steffen Gebert
6. Git-Datenstrukturen
u Commit als Pointer auf einen Tree
u SHA-1 des Commits (u.a.) aus SHA-1 des Trees gebildet
§ Integrität gewährleistet
6
6
Steffen Gebert
7. Git-Datenstrukturen
u Branch als Pointer auf einen Commit
§ Menschen-les/merkbar
u HEAD als Pointer auf Stand des
eigenen Working Trees („Checkout“)
7
7
Steffen Gebert
8. Das .git-Verzeichnis
u Enthält alle Meta- und History-Informationen
$
ls
-‐l
.git
total
1028
Aktueller
-‐rw-‐r-‐-‐r-‐-‐
1
st
23
Feb
28
14:44
HEAD
Commit
drwxr-‐xr-‐x
2
st
68
Feb
28
14:43
branches
-‐rw-‐r-‐-‐r-‐-‐
1
st
295
Feb
28
14:44
config
config
-‐rw-‐r-‐-‐r-‐-‐
1
st
73
Feb
28
14:43
description
drwxr-‐xr-‐x
10
st
340
Feb
28
14:43
hooks
-‐rw-‐r-‐-‐r-‐-‐
1
st
1019488
Feb
28
14:44
index
drwxr-‐xr-‐x
3
st
102
Feb
28
14:43
info
drwxr-‐xr-‐x
4
st
136
Feb
28
14:44
logs
blobs,
drwxr-‐xr-‐x
4
st
136
Feb
28
14:43
objects
commits
-‐rw-‐r-‐-‐r-‐-‐
1
st
19379
Feb
28
14:44
packed-‐refs
drwxr-‐xr-‐x
5
st
170
Feb
28
14:44
refs
branches,
tags
8
8
Steffen Gebert
9. Das .git-Verzeichnis
Branch: „trunk“ bei
u cat
.git/HEAD
master SVN
ref:
ref/heads/master
Commit
u cat
.git/refs/heads/master
60117b50a7ad22ba2be2c2b1c1b282bc3649fd02
Tree
u git
cat-‐file
–p
60117b50a7ad22ba2be2c2b1c1b282bc3649fd02
tree
0d55691a8e7b252c1a4b04568619fafaaf9ea6e3
Vorheriger
parent
72cc822724effb930feff2f1b8c1bb5c3651fdde
Commit
author
Steffen
Gebert
<steffen.gebert@typo3.org>
1362056598
+0100
committer
Steffen
Gebert
<steffen.gebert@typo3.org>
1362056598
+0100
Here
comes
the
comit
message
u git
cat-‐file
–p
0d55691a8e7b252c1a4b04568619fafaaf9ea6e3
100644
blob
40c7064c2a5f56e6f3129616f11448c87e444ff8
README.md
u git
cat-‐file
–p
40c7064c2a5f56e6f3129616f11448c87e444ff8
Willkommen
…
9
9
Steffen Gebert
11. Lokales Repository anlegen
u mkdir
myrepo
u cd
myrepo
u git
init
Initialized
empty
Git
repository
in
myrepo/.git/
u ls
–a
.
..
.git
11
11
Steffen Gebert
12. Initiales Setup
u git
config
-‐-‐global
user.name
„John
Doe“
u git
config
-‐-‐global
user.email
„example@uni-‐wuerzburg.de“
u Wird wegen -‐-‐global in ~/.gitconfig gespeichert
u Ansonsten in .git/config
(repo-spezifisch)
u git
config
-‐-‐global
color.ui
auto
u Show current branch in prompt:
http://wiki.typo3.org/Tips_and_Tricks_(Git)#Current_branch_in_prompt
12
12
Steffen Gebert
13. Datei erstellen
u echo
Willkommen
>
README.md
u git
status
Immer lesen, was Git uns sagt!
#
On
branch
master
(hat tendenziell gute Ideen)
#
#
Initial
commit
#
zum Index
hinzufügen
#
Untracked
files:
#
(use
"git
add
<file>..."
to
include
in
what
will
be
committed)
#
#
README.md
nothing
added
to
commit
but
untracked
files
present
(use
"git
add"
to
track)
Gebert
Steffen
13
13
14. Datei dem Index hinzufügen
u git
add
README.md
u git
status
#
On
branch
master
#
#
Initial
commit
#
#
Changes
to
be
committed:
#
(use
"git
rm
-‐-‐cached
<file>..."
to
unstage)
#
#
new
file:
README.md
#
14
14
Steffen Gebert
16. Lebenszyklus einer Datei
git add
u untracked (nicht versioniert)
u unmodified (versioniert, aber nicht verändert)
u modified (versioniert, verändert, nicht im Stage)
u staged (versioniert, verändert und im Stage, aber nicht commited)
http://bit.ly/PHPUG_JUN_GITvsSVN
16
16
Steffen Gebert
17. Änderungen Rückgängig machen
u Uncommittet:
git
checkout
-‐-‐
README.md
u Add rückgängig machen:
§ git
reset
HEAD
README.md
u Generell: Lesen, was git
status
vorschlägt
17
17
Steffen Gebert
22. Remote Repositories
u GIT ist dezentrales Versionskontrollsystem (DVCS)
§ viele Aktionen ohne Netzwerkkommunikation möglich
§ es gibt nicht den einen zentralen Server
fetch / pull
push
22
22
Steffen Gebert
23. Protokolle
u file://
u git://
§ nur pull, kein push
u ssh://
§ push + pull
§ Repository im normalen Dateisystem
§ Auth über System
u http(s):// (SmartHTTP)
§ push + pull
§ Auth über Passwort, kann über Credential Helper gecached werden
https://help.github.com/articles/set-up-git#password-caching
u Performance-technisch kaum Unterschiede
23
23
Steffen Gebert
25. Arbeiten mit Remotes
u git
pull
= git
fetch;
git
rebase
u git
fetch
-‐-‐all
holt Änderungen aller Remotes
u git
rebase
bringt aktuellen Branch vorwärts (auf Stand des
getrackten Branch)
u git
fetch
-‐-‐tags
holt auch Tags
u git
log
§ HEAD..origin/master
listet Unterschiede von HEAD zu o/m
§ origin/master..HEAD
listet Unterschiede von o/m zu HEAD
25
25
Steffen Gebert
26. Pushen
u Neuen oder andersnamigen Branch pushen:
§ git
push
<remote>
<branch>
u Alle lokalen und remote existierenden <branch>
nach
<remote>/<branch> pushen
§ git
push
26
26
Steffen Gebert
27. Branches auschecken
u git
branch
-‐a
listet alle bekannten Branches auf
u git
checkout
<zielbranch> wechselt Branch
u git
checkout
-‐b
<new_branch>
erstellt Branch basierend auf HEAD
u Tracking branches Branch erstellen
§ Hält „Verbindung“ des lokalen Branches mit remote Branch
§ git
pull
weiß sonst nicht, was rebased werden soll / push wohin gepusht
§ git
checkout
-‐b
-‐-‐track
<new_branch>
<remote>/<branch>
§ Nachträglich:
git
-‐-‐set-‐upstream
<branch>
<remote>/<branch>
u Detached head (ausgelöst durch git
checkout
<remote>/<branch>)
§ Arbeiten losgelöst von jeglichen Branches
27
27
Steffen Gebert
29. Eigenen Branch pflegen
u git
checkout
–b
TYPO3_4-‐5-‐rzuw
u git
commit
u git
fetch
-‐-‐all
u git
log
HEAD..typo3org/TYPO3_4-‐5
u git
log
typo3org/TYPO3_4-‐5..HEAD
u git
merge
origin/TYPO3_4-‐5
u git
rebase
ebenfalls möglich, aber nur lokal ungefährlich!
u git
cherry-‐pick
holt Commit(s) aus anderem Branch
29
29
Steffen Gebert
30. Git Tipps
u Essenziell
§ Shell completion, $PROMPT einrichten (branch anzeigen, show dirty state)
§ git
stash, die Zwischenablage
§ git
alias
(git
alias.st
status)
§ ~,
~2,
^
etc. als Referenzen auf parent commits (git
show
HEAD~25)
u Nett
§ git
bisect
zum finden „böser“ Commits
§ git
svn
zum Arbeiten mit SVN repositories
§ submodules (wie svn:external)
u Lesen
§ „Pro Git“ (http://git-scm.com/book, kostenlos)
§ AlBlue‘s „Git Tip of the Week“
http://alblue.bandlem.com/Tag/gtotw/
30
30
Steffen Gebert
31. Vorsicht!
u Niemals tun!
§ git
commit
-‐-‐amend
oder git
rebase
schon veröffentlichter
Änderungen
§ git warnt, push lässt sich mit -‐-‐force
erzwingen
u Aufpassen!
§ Mit git
reset
-‐-‐hard Branch auf anderen SHA setzen
– Niemals danach pushen!
– Verlorene Commits können nur über git
reflog
wiedergeholt werden
31
31
Steffen Gebert