Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Git: Konzepte & Workflows

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

Git: Konzepte & Workflows

Avatar for Nevik Rehnel

Nevik Rehnel

January 28, 2013

Other Decks in Programming

Transcript

  1. Inhalt • Git Geschichte (kurz) • Git Konzepte • Objekte,

    Commits, History • HEAD & Heads, Branches & Tags • Branching – Merging – Rebasing • Git Workflows • Branching-Strategien • Distributed Workflows Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [2]
  2. Git Geschichte • Urspr. entwickelt von Linus Torvalds • Ersatz

    für BitKeeper zur Entwicklung des Linux-Kernels • Design-Ziele: Unterstützung verteilter Workflows, sehr guter Schutz gegen Datenkorruption, sehr gute Performance Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [3]
  3. Objekte, Commits, History 4 Objektarten: • blob: binäre Daten (a

    bunch of bytes) • tree: Verzeichnis (Einträge) • commit: Snapshot aller Dateien • tag: konstanter Pointer auf commit Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [4]
  4. Objekte, Commits, History blob & tree • blob meist Inhalt

    einer Datei (kann aber beliebig sein) • Datei- & Unterordnernamen im tree gespeichert Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [5] blob tree file [filename, mode] subdir [filename]
  5. Objekte, Commits, History • Commit zeigt auf einen tree und

    ggf. auf direkte(n) Vorgänger • 0 Eltern: Initialer Commit • >1 Eltern: Merge-Commit Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [6] blob tree file [filename, mode] subdir [filename] commit [message] parent
  6. Objekte, Commits, History DAG directed acyclic graph Gerichteter azyklischer Graph

    Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [7]
  7. Objekte, Commits, History • Git Repo == DAG von Objekten

    • History ≈ DAG von Commits Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [8] blob tree file [filename, mode] subdir [filename] commit [message] parent 1 2 4 3 issue master HEAD
  8. HEAD & Heads, Branches & Tags • heads zeigen auf

    je genau ein Commit-Objekt • dienen zur Benennung • bewegen sich beim Erstellen von Commits mit Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [9] A B master
  9. HEAD & Heads, Branches & Tags • HEAD zeigt auf

    aktuell ausgecheckten Commit • meist eine sym-ref auf einen head • attached HEAD: zeigt auf head detached HEAD: zeigt auf Tag oder Commit Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [10] A B master HEAD
  10. HEAD & Heads, Branches & Tags • branch := head

    • Branches & Tags: Etiketten für Commits • Branches bewegen sich • Tags sind fest Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [11] A B master v1.0 origin/master
  11. Branching – Merging – Rebasing Vorträge von Studenten für Studenten

    2013-01-28 | Patrick Lehner [12] A B master HEAD git checkout -b devel A B master HEAD devel
  12. Branching – Merging – Rebasing Vorträge von Studenten für Studenten

    2013-01-28 | Patrick Lehner [13] A B master HEAD git checkout -b devel A A B master HEAD devel
  13. Branching – Merging – Rebasing git checkout X && git

    merge Y • fast-forward: wenn Y Nachfahre von X (X und Y als Commits aufgefasst) • non-fast-forward: wenn X und Y divergiert sind (X und Y als Branches aufgefasst) Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [14]
  14. Branching – Merging – Rebasing Vorträge von Studenten für Studenten

    2013-01-28 | Patrick Lehner [15] A B master HEAD git merge devel C devel master HEAD D D Merge-Commit non-fast-forward merge A B C devel git checkout devel git merge master master HEAD D A B C devel fast-forward merge
  15. Branching – Merging – Rebasing git checkout X && git

    rebase Y • transplantiert Änderungen von X nach Y • erzeugt lineare History • erzeugt neue Commits! (anderer Hash) Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [16]
  16. Branching – Merging – Rebasing Vorträge von Studenten für Studenten

    2013-01-28 | Patrick Lehner [17] A B master HEAD git rebase master C iss42 D E A B master HEAD C iss42 D' E' D E
  17. Git Workflows • Branching-Strategien • Langlebige Branches • Topic-Branches •

    Distributed Workflows • Zentralisierter Workflow • Integrator/Dictator Workflow Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [18]
  18. Branching-Strategien: • 2 bis 4 langlebige Branches: • master (stable):

    immer auslieferbar • next (develop): finale Tests ausstehend • pu (proposed): neue Features, die noch nicht in master gehören • maintenance: Bugfixes alter Releases • geeignet für große & komplexe Projekte und starre Release-Prozesse Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [19] Langlebige Branches
  19. Branching-Strategien: • Änderungen wandern aufwärts aber: abwärts mergen! • einfacher

    Fall: fast-forward merge Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [21] Langlebige Branches A master devel B C D E pu A master devel B C D E pu [master] git merge devel
  20. Branching-Strategien: • interessanter Fall: non-fast-forward merge Vorträge von Studenten für

    Studenten 2013-01-28 | Patrick Lehner [22] Langlebige Branches A master devel B C D E pu F G [devel] git merge pu A master devel B C D E pu F G G H Merge-Commits immer nur im weiter oben liegenden Branch!
  21. Branching-Strategien: • ein Branch pro Feature (oder Bugfix, etc) •

    sprechende Namen verwenden • wenn möglich, lokal halten Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [23] Topic/Feature Branches
  22. Branching-Strategien: Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner

    [24] Topic/Feature Branches A master B C D1 D2 add-db-support E1 E2 E3 E4 F1 F2 F3 fix-sound fix-sound-v2 A master B C D1 D2 add-db-support E1 E2 E3 E4 F1 F2 F3 fix-sound fix-sound-v2 G git merge add-db-support git merge fix-sound-v2
  23. Distributed Workflows: Vorträge von Studenten für Studenten 2013-01-28 | Patrick

    Lehner [25] Zentralisierter Workflow gemeinsames Repo Entwickler [Arbeitskopie] Entwickler [Arbeitskopie] Entwickler [Arbeitskopie] Wo ist das „distributed“ in diesem Workflow?
  24. Distributed Workflows: Vorträge von Studenten für Studenten 2013-01-28 | Patrick

    Lehner [26] Zentralisierter Workflow gemeinsames Repo in Git: bare repo (keine Arbeitskopie) privates Repo Arbeitskopie privates Repo Arbeitskopie privates Repo Arbeitskopie Jeder Entwickler hat eine Kopie des ganzen Repo!
  25. Distributed Workflows: Vorträge von Studenten für Studenten 2013-01-28 | Patrick

    Lehner [27] Integrator/Dictator Workflow offizielles Repo Entwickler [privates Repo] Entwickler [privates Repo] Entwickler [privates Repo] Integrations- manager [privates Repo] Entwickler [öffentl. Repo] Entwickler [öffentl. Repo] Entwickler [öffentl. Repo] pull push
  26. Distributed Workflows: Vorträge von Studenten für Studenten 2013-01-28 | Patrick

    Lehner [28] Integrator/Dictator Workflow offizielles Repo dictator [privates Repo] Entwickler [privates Repo] [öffentl. Repo] lieutenant [privates Repo] [öffentl. Repo] lieutenant [privates Repo] [öffentl. Repo] Entwickler [privates Repo] [öffentl. Repo] Entwickler [privates Repo] [öffentl. Repo] pull push
  27. Ressourcen – Startpunkte • Scott Chacon: Pro Git; Apress, 2009;

    http://git-scm.com/book • Sitaram Chamarty: Git concepts simplified; http://sitaramc.github.com/gcs/ • Tommi Virtanen: Git for Computer Scientists; http://eagain.net/articles/git-for-computer-scientists/ Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [29] Ressourcen – Konzepte & Intros • Offizielle Git-Website: http://www.git-scm.com • Offizielles Git Wiki: https://git.wiki.kernel.org/index.php/Main_Page • StackOverflow.com Git Tag: http://stackoverflow.com/tags/git/info
  28. Ressourcen – Workflows • Git-flow (Theorie): http://nvie.com/posts/a-successful-git-branching-model/ • Git-flow: https://github.com/nvie/gitflow

    • Seth Robertson: Git best practices, Abschnitt workflows; http://sethrobertson.github.com/GitBestPractices/#workflow Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [30] • Git live probieren – ohne Installation: http://try.github.com/ • Fragen finden und stellen: http://stackoverflow.com/questions/tagged/git • Direkte Hilfe von (meistens) erfahrenen Git-usern: #[email protected] • Bei Github-spezifischen Fragen: #[email protected] und [email protected] Ressourcen – Interaktiv
  29. Ressourcen – Videos • Linus Torvalds zu Gast bei Google:

    Geschichte und Konzepte von Git; http://goo.gl/z72s [YouTube] • Scott Chacon, Praktische Einführung in Git mit Live-Beispielen: http://goo.gl/R9H2q [YouTube] • Randal Schwartz, Einführung in Git (Konzepte & Workflows); http://vimeo.com/35778382 • Jessica Kerr, Git happens: Einführung in Git (Konzepte, aber ohne PowerPoint); http://vimeo.com/46010208 Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [31]
  30. Quellen • Scott Chacon: Pro Git; Apress, 2009; http://git-scm.com/book •

    Sitaram Chamarty: Git concepts simplified; http://sitaramc.github.com/gcs/ • Tommi Virtanen: Git for Computer Scientists; http://eagain.net/articles/git-for-computer-scientists/ • Seth Robertson: Git best practices; http://sethrobertson.github.com/GitBestPractices/ • Wikipedia: en http://en.wikipedia.org/wiki/Git_%28software%29 und de http://de.wikipedia.org/wiki/Git Vorträge von Studenten für Studenten 2013-01-28 | Patrick Lehner [32]