Institute of Computer Science                                     Chair of Communication Networks                         ...
Warum Git?u    Git ist hipp! (u.a. wegen Github)u    Git ist schnell – vieles geht lokalu    Git ermöglicht bessere Zus...
GIT INTERNALS                             3                             3            Steffen Gebert
Git-Datenstrukturen u    Objekte identifiziert über SHA-1 hashes u    Blob: zB Inhalt einer Datei        §  Ohne Datein...
Git-Datenstrukturenu    Tree-Objekt verknüpft Meta-Informationen mit Datei- und      Verzeichnisinhalten      §  Beschre...
Git-Datenstrukturenu    Commit als Pointer auf einen Treeu    SHA-1 des Commits (u.a.) aus SHA-1 des Trees gebildet     ...
Git-Datenstrukturenu    Branch als Pointer auf einen Commit      §  Menschen-les/merkbaru    HEAD als Pointer auf Stand...
Das .git-Verzeichnisu    Enthält alle Meta- und History-Informationen           $	  ls	  -­‐l	  .git	             total	 ...
Das .git-Verzeichnis                                               Branch:                    „trunk“ beiu    cat	  .git/...
GIT BENUTZEN                                10                                10               Steffen Gebert
Lokales Repository anlegenu    mkdir	  myrepo	  u    cd	  myrepo	  u    git	  init	        Initialized	  empty	  Git	  ...
Initiales Setupu  git	  config	  -­‐-­‐global	  user.name	  „John	  Doe“	  u  git	  config	  -­‐-­‐global	  user.email	 ...
Datei erstellenu  echo	  Willkommen	  >	  README.md	  u  git	  status	      	                                           ...
Datei dem Index hinzufügenu  git	  add	  README.md	      	  u  git	  status	      	      #	  On	  branch	  master	      ...
Commit erstellenu  git	  commit	      	  u  export	  GIT_EDITOR=nano	  u  git	  log	  u  git	  log	  –p	  u    Abkürz...
Lebenszyklus einer Datei                                                                  git addu  untracked (nicht vers...
Änderungen Rückgängig machenu    Uncommittet:      git	  checkout	  -­‐-­‐	  README.md	  u    Add rückgängig machen:    ...
BRANCHES                            18                            18           Steffen Gebert
Mit Branches arbeitenu  Jede Arbeit sollte in einem Feature-Branch erledigt werdenu  git	  branch	  myfeature	  u  git	...
Mergesu    git	  checkout	  -­‐b	  myfeature2	  u    Neue Datei erstellen,	  git	  commit	  u    git	  checkout	  maste...
ARBEITEN MIT REMOTES                             21                             21            Steffen Gebert
Remote Repositoriesu    GIT ist dezentrales Versionskontrollsystem (DVCS)      §  viele Aktionen ohne Netzwerkkommunikat...
Protokolleu  file://u  git://       §  nur pull, kein pushu    ssh://       §  push + pull       §  Repository im no...
Repository clonen     u    git	  clone	  ≙	  svn	  checkout	       u    git	  clone	  https://dike.informatik.uni-­‐wuer...
Arbeiten mit Remotesu    git	  pull	  = git	  fetch;	  git	  rebase	  u    git	  fetch	  -­‐-­‐all	  holt Änderungen all...
Pushenu    Neuen oder andersnamigen Branch pushen:       §  git	  push	  <remote>	  <branch>	  u    Alle lokalen und re...
Branches auscheckenu    git	  branch	  -­‐a	  listet alle bekannten Branches aufu    git	  checkout	  <zielbranch> wechs...
Remote hinzufügen                                                                       Name des                          ...
Eigenen Branch pflegenu    git	  checkout	  –b	  TYPO3_4-­‐5-­‐rzuw	  u    git	  commit	  u    git	  fetch	  -­‐-­‐all	...
Git Tippsu    Essenziell       §    Shell completion, $PROMPT einrichten (branch anzeigen, show dirty state)       §   ...
Vorsicht!u    Niemals tun!       §  git	  commit	  -­‐-­‐amend	  oder git	  rebase	  schon veröffentlichter           Än...
Upcoming SlideShare
Loading in …5
×

Git Power-Workshop

1,300 views
1,199 views

Published on

Interner Git-Power-Workshop am Lehrstuhl für Informatik III
Dauer: 2,45 h
Teilnehmer hatten die Gelegenheit, Gelerntes direkt am eigenen Laptop auszuprobieren.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,300
On SlideShare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Git Power-Workshop

  1. 1. Institute of Computer Science Chair of Communication Networks Prof. Dr.-Ing. P. Tran-Gia Git Crashkurs Steffen Gebertsteffen punkt gebert ät informatik punkt uni-wuerzburg punkt de www3.informatik.uni-wuerzburg.de
  2. 2. Warum Git?u  Git ist hipp! (u.a. wegen Github)u  Git ist schnell – vieles geht lokalu  Git ermöglicht bessere Zusammenarbeit / lokale Abweichungenu  Arbeit in Branches funktioniertu  uvm. (als Text sicher nicht soo überzeugend J) 2 2 Steffen Gebert
  3. 3. GIT INTERNALS 3 3 Steffen Gebert
  4. 4. Git-Datenstrukturen u  Objekte identifiziert über SHA-1 hashes u  Blob: zB Inhalt einer Datei §  Ohne Dateiname §  Ohne Meta-InformationVieles geklaut von:http://eagain.net/articles/git-for-computer-scientists/ 4 4 Steffen Gebert
  5. 5. Git-Datenstrukturenu  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. 6. Git-Datenstrukturenu  Commit als Pointer auf einen Treeu  SHA-1 des Commits (u.a.) aus SHA-1 des Trees gebildet §  Integrität gewährleistet 6 6 Steffen Gebert
  7. 7. Git-Datenstrukturenu  Branch als Pointer auf einen Commit §  Menschen-les/merkbaru  HEAD als Pointer auf Stand des eigenen Working Trees („Checkout“) 7 7 Steffen Gebert
  8. 8. Das .git-Verzeichnisu  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. 9. Das .git-Verzeichnis Branch: „trunk“ beiu  cat  .git/HEAD   master SVN ref:  ref/heads/master   Commitu  cat  .git/refs/heads/master     60117b50a7ad22ba2be2c2b1c1b282bc3649fd02   Treeu  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
  10. 10. GIT BENUTZEN 10 10 Steffen Gebert
  11. 11. Lokales Repository anlegenu  mkdir  myrepo  u  cd  myrepo  u  git  init   Initialized  empty  Git  repository  in  myrepo/.git/  u  ls  –a   .    ..    .git   11 11 Steffen Gebert
  12. 12. Initiales Setupu  git  config  -­‐-­‐global  user.name  „John  Doe“  u  git  config  -­‐-­‐global  user.email  „example@uni-­‐wuerzburg.de“  u  Wird wegen -­‐-­‐global in ~/.gitconfig gespeichertu  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. 13. Datei erstellenu  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. 14. Datei dem Index hinzufügenu  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
  15. 15. Commit erstellenu  git  commit    u  export  GIT_EDITOR=nano  u  git  log  u  git  log  –p  u  Abkürzung  git  add  +  git  commit:  git  commit  -­‐a   15 15 Steffen Gebert
  16. 16. Lebenszyklus einer Datei git addu  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. 17. Änderungen Rückgängig machenu  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
  18. 18. BRANCHES 18 18 Steffen Gebert
  19. 19. Mit Branches arbeitenu  Jede Arbeit sollte in einem Feature-Branch erledigt werdenu  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 19 19 Steffen Gebert
  20. 20. Mergesu  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 20 20 Steffen Gebert
  21. 21. ARBEITEN MIT REMOTES 21 21 Steffen Gebert
  22. 22. Remote Repositoriesu  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. 23. Protokolleu  file://u  git:// §  nur pull, kein pushu  ssh:// §  push + pull §  Repository im normalen Dateisystem §  Auth über Systemu  http(s):// (SmartHTTP) §  push + pull §  Auth über Passwort, kann über Credential Helper gecached werden https://help.github.com/articles/set-up-git#password-cachingu  Performance-technisch kaum Unterschiede 23 23 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)  Default-Name 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   24 24 Steffen Gebert
  25. 25. Arbeiten mit Remotesu  git  pull  = git  fetch;  git  rebase  u  git  fetch  -­‐-­‐all  holt Änderungen aller Remotesu  git  rebase  bringt aktuellen Branch vorwärts (auf Stand des getrackten Branch)u  git  fetch  -­‐-­‐tags  holt auch Tagsu  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. 26. Pushenu  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. 27. Branches auscheckenu  git  branch  -­‐a  listet alle bekannten Branches aufu  git  checkout  <zielbranch> wechselt Branchu  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
  28. 28. Remote hinzufügen Name des neuen Remotes 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  aktueller    remotes/origin/HEAD      -­‐>  origin/master   Branch    remotes/origin/master  a97d21d  Explain  URLs  better   28 28 Steffen Gebert
  29. 29. Eigenen Branch pflegenu  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. 30. Git Tippsu  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. 31. Vorsicht!u  Niemals tun! §  git  commit  -­‐-­‐amend  oder git  rebase  schon veröffentlichter Änderungen §  git warnt, push lässt sich mit -­‐-­‐force  erzwingenu  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

×