git power-workshop
DESCRIPTION
Interner Git-Power-Workshop am Lehrstuhl für Informatik III Dauer: 2,45 h Teilnehmer hatten die Gelegenheit, Gelerntes direkt am eigenen Laptop auszuprobieren.TRANSCRIPT
![Page 1: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/1.jpg)
www3.informatik.uni-wuerzburg.de
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
![Page 2: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/2.jpg)
Steffen Gebert 2 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)
![Page 3: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/3.jpg)
Steffen Gebert 3 3
GIT INTERNALS
![Page 4: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/4.jpg)
Steffen Gebert 4 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/
![Page 5: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/5.jpg)
Steffen Gebert 5 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
![Page 6: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/6.jpg)
Steffen Gebert 6 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
![Page 7: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/7.jpg)
Steffen Gebert 7 7
Git-Datenstrukturen
u Branch als Pointer auf einen Commit § Menschen-les/merkbar
u HEAD als Pointer auf Stand des eigenen Working Trees („Checkout“)
![Page 8: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/8.jpg)
Steffen Gebert 8 8
Das .git-Verzeichnis
u Enthält alle Meta- und History-Informationen
$ ls -‐l .git total 1028 -‐rw-‐r-‐-‐r-‐-‐ 1 st 23 Feb 28 14:44 HEAD drwxr-‐xr-‐x 2 st 68 Feb 28 14:43 branches -‐rw-‐r-‐-‐r-‐-‐ 1 st 295 Feb 28 14:44 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 drwxr-‐xr-‐x 4 st 136 Feb 28 14:43 objects -‐rw-‐r-‐-‐r-‐-‐ 1 st 19379 Feb 28 14:44 packed-‐refs drwxr-‐xr-‐x 5 st 170 Feb 28 14:44 refs
blobs, commits
branches, tags
config
Aktueller Commit
![Page 9: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/9.jpg)
Steffen Gebert 9 9
Das .git-Verzeichnis
u cat .git/HEAD ref: ref/heads/master
u cat .git/refs/heads/master 60117b50a7ad22ba2be2c2b1c1b282bc3649fd02
u git cat-‐file –p 60117b50a7ad22ba2be2c2b1c1b282bc3649fd02 tree 0d55691a8e7b252c1a4b04568619fafaaf9ea6e3 parent 72cc822724effb930feff2f1b8c1bb5c3651fdde author Steffen Gebert <[email protected]> 1362056598 +0100 committer Steffen Gebert <[email protected]> 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 …
Branch: master
„trunk“ bei SVN
Commit
Tree
Vorheriger Commit
![Page 10: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/10.jpg)
Steffen Gebert 10 10
GIT BENUTZEN
![Page 11: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/11.jpg)
Steffen Gebert 11 11
Lokales Repository anlegen
u mkdir myrepo
u cd myrepo
u git init
Initialized empty Git repository in myrepo/.git/
u ls –a
. .. .git
![Page 12: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/12.jpg)
Steffen Gebert 12 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
![Page 13: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/13.jpg)
Steffen Gebert 13 13
Datei erstellen
u echo Willkommen > README.md u git status
# On branch master # # Initial commit # # 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)
Immer lesen, was Git uns sagt! (hat tendenziell gute Ideen)
zum Index hinzufügen
![Page 14: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/14.jpg)
Steffen Gebert 14 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 #
![Page 15: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/15.jpg)
Steffen Gebert 15 15
Commit erstellen
u git commit
u export GIT_EDITOR=nano
u git log u git log –p
u Abkürzung git add + git commit: git commit -‐a
![Page 16: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/16.jpg)
Steffen Gebert 16 16
Lebenszyklus einer Datei
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)
git add
http://bit.ly/PHPUG_JUN_GITvsSVN
![Page 17: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/17.jpg)
Steffen Gebert 17 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
![Page 18: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/18.jpg)
Steffen Gebert 18 18
BRANCHES
![Page 19: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/19.jpg)
Steffen Gebert 19 19
Mit Branches arbeiten
u Jede Arbeit sollte in einem Feature-Branch erledigt werden u git branch myfeature u git checkout myfeature
(oder git checkout -‐b myfeature)
u git commit u Noch einer (und noch einer)
u git checkout master u git merge myfeature u Resultiert in Fast-Forward
![Page 20: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/20.jpg)
Steffen Gebert 20 20
Merges
u git checkout -‐b myfeature2
u Neue Datei erstellen, git commit
u git checkout master
u Neue Datei erstellen, git commit
u git merge myfeature2
u Resultiert in Merge commit
![Page 21: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/21.jpg)
Steffen Gebert 21 21
ARBEITEN MIT REMOTES
![Page 22: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/22.jpg)
Steffen Gebert 22 22
Remote Repositories
u GIT ist dezentrales Versionskontrollsystem (DVCS) § viele Aktionen ohne Netzwerkkommunikation möglich § es gibt nicht den einen zentralen Server
fetc
h / p
ull
push
![Page 23: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/23.jpg)
Steffen Gebert 23 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
![Page 24: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/24.jpg)
Steffen Gebert 24 24
Repository clonen u git clone ≙ svn checkout u git clone https://dike.informatik.uni-‐wuerzburg.de/git/test/workshop.git
u git remote –v origin https://dike.informatik.uni-‐wuerzburg.de/git/test/workshop.git (fetch)
origin https://dike.informatik.uni-‐wuerzburg.de/git/test/workshop.git (push)
u cat .git/config [remote "origin“]
fetch = +refs/heads/*:refs/remotes/origin/* url = https://dike.informatik.uni-‐wuerzburg.de/git/test/workshop.git
[branch "master"] remote = origin merge = refs/heads/master rebase = true
Default-Name
![Page 25: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/25.jpg)
Steffen Gebert 25 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
![Page 26: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/26.jpg)
Steffen Gebert 26 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
![Page 27: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/27.jpg)
Steffen Gebert 27 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 § 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
Branch erstellen
![Page 28: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/28.jpg)
Steffen Gebert 28 28
Remote hinzufügen
u git remote add github https://github.com/lsinfo3/workshop.git u git fetch -‐-‐all
Fetching origin Fetching github
u git branch -‐av * master a97d21d Explain URLs better remotes/github/master a97d21d Explain URLs better remotes/origin/HEAD -‐> origin/master remotes/origin/master a97d21d Explain URLs better
Name des neuen Remotes
aktueller Branch
![Page 29: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/29.jpg)
Steffen Gebert 29 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
![Page 30: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/30.jpg)
Steffen Gebert 30 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/
![Page 31: Git Power-Workshop](https://reader033.vdocuments.mx/reader033/viewer/2022052410/555a9038d8b42a3e268b45ce/html5/thumbnails/31.jpg)
Steffen Gebert 31 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