Skip to content

Latest commit

 

History

History
381 lines (235 loc) · 9.56 KB

presentation.md

File metadata and controls

381 lines (235 loc) · 9.56 KB
title tags description
Netz39 -- Advanced Git Workshop
Git, Workshop, Workshop,
Slides für den Git Workshop im Netz39

Advanced Git Workshop

von therojam & zipzob


Was ist denn GIT noch mal? ℹ️


Git Commit ↪️


running order 📝

  • git branches
  • git forks
  • git submodule
  • git lfs

Arbeit mit Branches und Forks 🔀

  • branch
    • github.com/netz39
  • Fork

Einsatz für Arbeit in Eigenregie 👤

  • Arbeit an Features/Update (feature workflow)
  • Nutzung als Ablage (stash)
  • git reset/rebase [--interactive]/log [--reflog,--pretty-format,...]
  • git commit --amend, git push --force

Teamwork 👯


Zusammenarbeit 👥

  • Branches
  • Forks
  • Pull/Merge Requests
  • git pull --rebase

Arbeit mit Branches und Forks 🔀

:::info Forks koennen auch Mirror (Spiegel) sein. Manchmal sind aber weitere "remotes" sinnvoller. z.B. Arbeit an AUR-Package :::


Links 🔗

Git Doc: Branching Basics


git submodule 📑


Was ist es? Wozu?

  • anderes (eingebundenes) Projekt, welches bereit in git versioniert ist
  • Submodul Worktree liegt in Unterverzeichnis
  • Versionierung des Unterverzeichnis erfolgt separat

$ git submodule foreach --help
usage: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
   or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
   or: git submodule [--quiet] init [--] [<path>...]
   or: git submodule [--quiet] deinit [-f|--force] (--all| [--] <path>...)
   or: git submodule [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--] [<path>...]
   or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
   or: git submodule [--quiet] foreach [--recursive] <command>
   or: git submodule [--quiet] sync [--recursive] [--] [<path>...]
   or: git submodule [--quiet] absorbgitdirs [--] [<path>...]


Submodul anlegen/einbetten

$ git submodule add <repository-url> (<subfolder name>*)

Aktuellen Stand der Submodule laden

$ git submodule update --init --recursive

War in älteren git-Versionen nötig, mittlerweile in git submodule add und git clone


Clonen mit Submodulen 📂

$ git clone --recursive <project url>

Git Submodule foreach

  • Shellkommandos in jedem ausgechecktem Submodul ausführen
  • Platzhalter für Submodulparameter
$ git submodule foreach 'echo $path `git rev-parse HEAD`'

  • Weitere Variablen: 💲
    • $name - name of the relevant submodule section in .gitmodules
    • $sm_path - path of the submodule as recorded in the immediate superproject
    • $displaypath - relative path from the current working directory to the submodules root directory
    • $sha1 - commit as recorded in the immediate superproject
    • $toplevel - absolute path to the top-level of the immediate superproject.

Tracking Branch 📂

  • Bei Submodulen wird standardmäßig die Branchzugehörigkeit nicht mit betrachtet/gespeichert
  • Mittels config kann das aber angepasst werden
$ git submodule foreach 'git config --file
  $toplevel/.gitmodules submodule.$name.branch
  `git rev-parse --abbrev-ref HEAD --`'
  • Oder beim Intialen einrichten
$ git submodule add -b <branch name>
  <repository-url> <subfolder name>

Rekursives Updaten

Ein Gefühl für die Variablen bekommen:

$ git submodule foreach --quiet --recursive
  'echo $name $displaypath $path $sm_path
  $sha1 $toplevel'

Submodule Bottom-Up bearbeiten:

$ git submodule foreach --quiet --recursive
  'echo `pwd`' | tac | xargs -I {} bash -c 'pushd "{}"
  >/dev/null; pwd ; popd >/dev/null'

Pros/Cons ➕ ➖

  • Git lädt die Inhalte von Submodulen nicht selbständig/automatisch nach
    • Empfehlung: Nutzt andere Varianten um Abhängigkeiten zu tracken, wenn möglich: NPM, Bower, rubygems, ...
  • Da Submodule nur eine SHA-Referenz sind muss hier das Vorgehen bei Updates von Submodulen aufgepasst werden: Detached HEAD, nested push/pull, ...

Pros/Cons ➕ ➖

  • Kollegen/Zuarbeitende müssen ggf. über updates informiert werden
  • Verschachtelung möglich, macht aber mit zunehmender Tiefe vieles umständlich
  • Komplexe Setups werden schnell unhandlich

Links about submodules 🔗


git worktree

  • Verwalten mehrerer Working Trees aus einem Repository
  • Z.B. Parallel compilen und programmieren

$ git worktree add <name-of-our-worktree> <branch-name>

$ git worktree list
$ git worktree prune

Links 🔗

Git Doc worktree Git Worktrees


git lfs

{%youtube 9gaTargV5BY %}


git lfs 📎

  • git large file storage
  • replaces large files like graphics with text pointers inside Git while storing the file contents on a remote server like GitHub
  • needs packackage git-lfs (via your package manager) installed

Links


Further Reading 📚


Offene Fragen?


💯 💪 🎉 💟

Danke

  • Jabber MUC 👥
  • Fax 📠
  • Brief 📬