title | tags | description |
---|---|---|
Netz39 -- Advanced Git Workshop |
Git, Workshop, Workshop, |
Slides für den Git Workshop im Netz39 |
- git branches
- git forks
- git submodule
- git lfs
- branch
- github.com/netz39
- Fork
- Arbeit an Features/Update (feature workflow)
- Nutzung als Ablage (stash)
- git reset/rebase [--interactive]/log [--reflog,--pretty-format,...]
- git commit --amend, git push --force
- Branches
- Forks
- Pull/Merge Requests
- git pull --rebase
- branch
- github.com/netz39
- Jasper-Ben/freifunk-praesentation
- Forks
:::info Forks koennen auch Mirror (Spiegel) sein. Manchmal sind aber weitere "remotes" sinnvoller. z.B. Arbeit an AUR-Package :::
- 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>...]
$ git submodule add <repository-url> (<subfolder name>*)
$ git submodule update --init --recursive
War in älteren git-Versionen nötig, mittlerweile in git submodule add
und git clone
$ git clone --recursive <project url>
- 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.
- 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>
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'
- 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, ...
- 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
- 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
Git Doc worktree Git Worktrees
{%youtube 9gaTargV5BY %}
- 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
- Git Internals PDF
- Pro Git book
- OhShitGit
- Atlassian - Comparing Workflows
- Praqma git course summary
- subrepo
- Getting Started w/ git annex
- Jabber MUC 👥
- Fax 📠
- Brief 📬