-
262.gitignore
-
33Makefile
-
BINfigures/logos/Bitbucket.png
-
BINfigures/logos/Codeberg.png
-
BINfigures/logos/GitHub.png
-
BINfigures/logos/GitLab.png
-
BINfigures/logos/Gitea.png
-
BINfigures/logos/SourceHut.png
-
0presi.bib
-
609presi.tex
-
32shell.nix
-
50tikzfig.sty
@ -0,0 +1,262 @@ |
|||||
|
presi.pdf |
||||
|
.envrc |
||||
|
|
||||
|
## Core latex/pdflatex auxiliary files: |
||||
|
*.aux |
||||
|
*.lof |
||||
|
*.log |
||||
|
*.lot |
||||
|
*.fls |
||||
|
*.out |
||||
|
*.toc |
||||
|
*.fmt |
||||
|
*.fot |
||||
|
*.cb |
||||
|
*.cb2 |
||||
|
.*.lb |
||||
|
|
||||
|
## Intermediate documents: |
||||
|
*.dvi |
||||
|
*.xdv |
||||
|
*-converted-to.* |
||||
|
# these rules might exclude image files for figures etc. |
||||
|
# *.ps |
||||
|
# *.eps |
||||
|
# *.pdf |
||||
|
|
||||
|
## Generated if empty string is given at "Please type another file name for output:" |
||||
|
.pdf |
||||
|
|
||||
|
## Bibliography auxiliary files (bibtex/biblatex/biber): |
||||
|
*.bbl |
||||
|
*.bcf |
||||
|
*.blg |
||||
|
*-blx.aux |
||||
|
*-blx.bib |
||||
|
*.run.xml |
||||
|
|
||||
|
## Build tool auxiliary files: |
||||
|
*.fdb_latexmk |
||||
|
*.synctex |
||||
|
*.synctex(busy) |
||||
|
*.synctex.gz |
||||
|
*.synctex.gz(busy) |
||||
|
*.pdfsync |
||||
|
|
||||
|
## Build tool directories for auxiliary files |
||||
|
# latexrun |
||||
|
latex.out/ |
||||
|
|
||||
|
## Auxiliary and intermediate files from other packages: |
||||
|
# algorithms |
||||
|
*.alg |
||||
|
*.loa |
||||
|
|
||||
|
# achemso |
||||
|
acs-*.bib |
||||
|
|
||||
|
# amsthm |
||||
|
*.thm |
||||
|
|
||||
|
# beamer |
||||
|
*.nav |
||||
|
*.pre |
||||
|
*.snm |
||||
|
*.vrb |
||||
|
|
||||
|
# changes |
||||
|
*.soc |
||||
|
|
||||
|
# comment |
||||
|
*.cut |
||||
|
|
||||
|
# cprotect |
||||
|
*.cpt |
||||
|
|
||||
|
# elsarticle (documentclass of Elsevier journals) |
||||
|
*.spl |
||||
|
|
||||
|
# endnotes |
||||
|
*.ent |
||||
|
|
||||
|
# fixme |
||||
|
*.lox |
||||
|
|
||||
|
# feynmf/feynmp |
||||
|
*.mf |
||||
|
*.mp |
||||
|
*.t[1-9] |
||||
|
*.t[1-9][0-9] |
||||
|
*.tfm |
||||
|
|
||||
|
#(r)(e)ledmac/(r)(e)ledpar |
||||
|
*.end |
||||
|
*.?end |
||||
|
*.[1-9] |
||||
|
*.[1-9][0-9] |
||||
|
*.[1-9][0-9][0-9] |
||||
|
*.[1-9]R |
||||
|
*.[1-9][0-9]R |
||||
|
*.[1-9][0-9][0-9]R |
||||
|
*.eledsec[1-9] |
||||
|
*.eledsec[1-9]R |
||||
|
*.eledsec[1-9][0-9] |
||||
|
*.eledsec[1-9][0-9]R |
||||
|
*.eledsec[1-9][0-9][0-9] |
||||
|
*.eledsec[1-9][0-9][0-9]R |
||||
|
|
||||
|
# glossaries |
||||
|
*.acn |
||||
|
*.acr |
||||
|
*.glg |
||||
|
*.glo |
||||
|
*.gls |
||||
|
*.glsdefs |
||||
|
|
||||
|
# gnuplottex |
||||
|
*-gnuplottex-* |
||||
|
|
||||
|
# gregoriotex |
||||
|
*.gaux |
||||
|
*.gtex |
||||
|
|
||||
|
# htlatex |
||||
|
*.4ct |
||||
|
*.4tc |
||||
|
*.idv |
||||
|
*.lg |
||||
|
*.trc |
||||
|
*.xref |
||||
|
|
||||
|
# hyperref |
||||
|
*.brf |
||||
|
|
||||
|
# knitr |
||||
|
*-concordance.tex |
||||
|
# TODO Comment the next line if you want to keep your tikz graphics files |
||||
|
#*.tikz |
||||
|
#*-tikzDictionary |
||||
|
|
||||
|
# listings |
||||
|
*.lol |
||||
|
|
||||
|
# makeidx |
||||
|
*.idx |
||||
|
*.ilg |
||||
|
*.ind |
||||
|
*.ist |
||||
|
|
||||
|
# minitoc |
||||
|
*.maf |
||||
|
*.mlf |
||||
|
*.mlt |
||||
|
*.mtc[0-9]* |
||||
|
*.slf[0-9]* |
||||
|
*.slt[0-9]* |
||||
|
*.stc[0-9]* |
||||
|
|
||||
|
# minted |
||||
|
_minted* |
||||
|
*.pyg |
||||
|
|
||||
|
# morewrites |
||||
|
*.mw |
||||
|
|
||||
|
# nomencl |
||||
|
*.nlg |
||||
|
*.nlo |
||||
|
*.nls |
||||
|
|
||||
|
# pax |
||||
|
*.pax |
||||
|
|
||||
|
# pdfpcnotes |
||||
|
*.pdfpc |
||||
|
|
||||
|
# sagetex |
||||
|
*.sagetex.sage |
||||
|
*.sagetex.py |
||||
|
*.sagetex.scmd |
||||
|
|
||||
|
# scrwfile |
||||
|
*.wrt |
||||
|
|
||||
|
# sympy |
||||
|
*.sout |
||||
|
*.sympy |
||||
|
sympy-plots-for-*.tex/ |
||||
|
|
||||
|
# pdfcomment |
||||
|
*.upa |
||||
|
*.upb |
||||
|
|
||||
|
# pythontex |
||||
|
*.pytxcode |
||||
|
pythontex-files-*/ |
||||
|
|
||||
|
# tcolorbox |
||||
|
*.listing |
||||
|
|
||||
|
# thmtools |
||||
|
*.loe |
||||
|
|
||||
|
# TikZ & PGF |
||||
|
*.dpth |
||||
|
*.md5 |
||||
|
*.auxlock |
||||
|
|
||||
|
# todonotes |
||||
|
*.tdo |
||||
|
|
||||
|
# vhistory |
||||
|
*.hst |
||||
|
*.ver |
||||
|
|
||||
|
# easy-todo |
||||
|
*.lod |
||||
|
|
||||
|
# xcolor |
||||
|
*.xcp |
||||
|
|
||||
|
# xmpincl |
||||
|
*.xmpi |
||||
|
|
||||
|
# xindy |
||||
|
*.xdy |
||||
|
|
||||
|
# xypic precompiled matrices |
||||
|
*.xyc |
||||
|
|
||||
|
# endfloat |
||||
|
*.ttt |
||||
|
*.fff |
||||
|
|
||||
|
# Latexian |
||||
|
TSWLatexianTemp* |
||||
|
|
||||
|
## Editors: |
||||
|
# WinEdt |
||||
|
*.bak |
||||
|
*.sav |
||||
|
|
||||
|
# Texpad |
||||
|
.texpadtmp |
||||
|
|
||||
|
# LyX |
||||
|
*.lyx~ |
||||
|
|
||||
|
# Kile |
||||
|
*.backup |
||||
|
|
||||
|
# KBibTeX |
||||
|
*~[0-9]* |
||||
|
|
||||
|
# auto folder when using emacs and auctex |
||||
|
./auto/* |
||||
|
*.el |
||||
|
|
||||
|
# expex forward references with \gathertags |
||||
|
*-tags.tex |
||||
|
|
||||
|
# standalone packages |
||||
|
*.sta |
@ -0,0 +1,33 @@ |
|||||
|
.PHONY: all watch check clean |
||||
|
|
||||
|
src = \
|
||||
|
presi.tex \
|
||||
|
presi.bib \
|
||||
|
$(wildcard *.tex) \
|
||||
|
$(wildcard figures/*) \
|
||||
|
$(wildcard listings/*) |
||||
|
|
||||
|
latexmkopts = \
|
||||
|
-pdflua \
|
||||
|
-shell-escape \
|
||||
|
-use-make \
|
||||
|
-synctex=1 \
|
||||
|
-interaction=nonstopmode \
|
||||
|
-file-line-error |
||||
|
|
||||
|
all: presi.pdf |
||||
|
|
||||
|
presi.pdf: $(src) |
||||
|
latexmk $(latexmkopts) \
|
||||
|
-Werror \
|
||||
|
presi.tex |
||||
|
|
||||
|
watch: $(src) |
||||
|
latexmk $(latexmkopts) \
|
||||
|
-pvc \
|
||||
|
-view=none \
|
||||
|
presi.tex |
||||
|
|
||||
|
clean: |
||||
|
latexmk -c presi.tex |
||||
|
rm -fR presi.pdf |
After Width: 2552 | Height: 364 | Size: 70 KiB |
After Width: 914 | Height: 207 | Size: 35 KiB |
After Width: 864 | Height: 232 | Size: 17 KiB |
After Width: 2011 | Height: 615 | Size: 44 KiB |
After Width: 556 | Height: 134 | Size: 22 KiB |
After Width: 993 | Height: 239 | Size: 15 KiB |
@ -0,0 +1,609 @@ |
|||||
|
\year=2021 |
||||
|
\month=9 |
||||
|
\day=14 |
||||
|
|
||||
|
\documentclass[aspectratio=1610,xcolor=dvipsnames]{beamer} |
||||
|
|
||||
|
\usepackage{pgfplots} |
||||
|
\pgfplotsset{compat=1.17} |
||||
|
|
||||
|
\usepackage{fontspec} |
||||
|
\usepackage{polyglossia} |
||||
|
\setdefaultlanguage{german} |
||||
|
|
||||
|
\usepackage[font=scriptsize]{caption} |
||||
|
|
||||
|
\usepackage{fontawesome} |
||||
|
|
||||
|
\usepackage{graphicx} |
||||
|
\usepackage{tikzfig} |
||||
|
\usetikzlibrary{positioning} |
||||
|
\graphicspath{{./figures/}} |
||||
|
|
||||
|
\usepackage{csquotes} |
||||
|
\usepackage{fancyvrb} |
||||
|
|
||||
|
\usepackage[ |
||||
|
backend=biber, |
||||
|
style=verbose-ibid, |
||||
|
block=ragged, |
||||
|
]{biblatex} |
||||
|
\addbibresource{presi.bib} |
||||
|
|
||||
|
\usecolortheme{seahorse} |
||||
|
\setbeamerfont{footnote}{size=\tiny} |
||||
|
|
||||
|
\usepackage{minted} |
||||
|
\usemintedstyle{friendly} |
||||
|
\setminted{ |
||||
|
baselinestretch=1, |
||||
|
breaklines=true, |
||||
|
autogobble=true, |
||||
|
bgcolor=lightgray!50, |
||||
|
} |
||||
|
|
||||
|
\newmintinline[x]{console}{} |
||||
|
|
||||
|
\colorlet{bgl}{cyan!50!lightgray!50} |
||||
|
\colorlet{bgr}{orange!50!lightgray!50} |
||||
|
|
||||
|
\title{Git SCM} |
||||
|
\subtitle{Crash-Course in Versionsverwaltung and kolaborativem bearbeiten von Textdateien} |
||||
|
|
||||
|
\author{Dustin Frisch\\ |
||||
|
Fachbereich Angewandte Informatik\\ |
||||
|
Hochschule Fulda\\ |
||||
|
Fulda, Deutschland\\ |
||||
|
E-Mail: {\tt dustin.frisch@ai.hs-fulda.de}} |
||||
|
|
||||
|
\begin{document} |
||||
|
|
||||
|
\frame{\titlepage} |
||||
|
|
||||
|
\begin{frame}{Agenda} |
||||
|
\tableofcontents |
||||
|
\end{frame} |
||||
|
|
||||
|
\section{Was soll das alles?} |
||||
|
|
||||
|
\begin{frame}{Was ist Versionverwaltung?} |
||||
|
\begin{columns}[t] |
||||
|
\begin{column}{0.5\textwidth} |
||||
|
\centering |
||||
|
\large{Ohne Versionverwaltung} |
||||
|
|
||||
|
\begin{figure}[H] |
||||
|
\begin{tikzpicture}[] |
||||
|
\tikzstyle{state}+=[circle, draw=cyan!60, fill=cyan!5, very thick, minimum size=2.5em] |
||||
|
\tikzstyle{file}+=[rectangle, draw=green!60, fill=green!5, very thick, minimum size=2.5em] |
||||
|
\tikzstyle{update}+=[->, thick, dotted] |
||||
|
\tikzstyle{save}+=[->, thick] |
||||
|
|
||||
|
\node[state](s1){+A}; |
||||
|
\node[state](s2)[right=1em of s1]{+B}; |
||||
|
\node[state](s3)[right=1em of s2]{-A}; |
||||
|
\node[state](s4)[right=1em of s3]{+C}; |
||||
|
|
||||
|
\node[file](f) at (2,-3) {$doc$}; |
||||
|
|
||||
|
\draw[update] (s1.east) -- (s2.west); |
||||
|
\draw[update] (s2.east) -- (s3.west); |
||||
|
\draw[update] (s3.east) -- (s4.west); |
||||
|
|
||||
|
\draw[save] (s1.south) -- ([xshift=-0.9em] f.north); |
||||
|
\draw[save] (s2.south) -- ([xshift=-0.3em] f.north); |
||||
|
\draw[save] (s3.south) -- ([xshift=0.3em] f.north); |
||||
|
\draw[save] (s4.south) -- ([xshift=0.9em] f.north); |
||||
|
\end{tikzpicture} |
||||
|
\end{figure} |
||||
|
\end{column} |
||||
|
\begin{column}{0.5\textwidth} |
||||
|
\centering |
||||
|
\large{Mit Versionverwaltung} |
||||
|
|
||||
|
\begin{figure}[H] |
||||
|
\begin{tikzpicture}[] |
||||
|
\tikzstyle{state}+=[circle, draw=cyan!60, fill=cyan!5, very thick, minimum size=2.5em] |
||||
|
\tikzstyle{file}+=[rectangle, draw=green!60, fill=green!5, very thick, minimum size=2.5em] |
||||
|
\tikzstyle{update}+=[->, thick, dotted] |
||||
|
\tikzstyle{save}+=[->, thick] |
||||
|
|
||||
|
\node[state](s1){+A}; |
||||
|
\node[state](s2)[right=1em of s1]{+B}; |
||||
|
\node[state](s3)[right=1em of s2]{-A}; |
||||
|
\node[state](s4)[right=1em of s3]{+C}; |
||||
|
|
||||
|
\node[file](f1)[below=2 of s1]{$doc_1$}; |
||||
|
\node[file](f2)[below=2 of s2]{$doc_2$}; |
||||
|
\node[file](f3)[below=2 of s3]{$doc_3$}; |
||||
|
\node[file](f4)[below=2 of s4]{$doc_4$}; |
||||
|
|
||||
|
\draw[update] (s1.east) -- (s2.west); |
||||
|
\draw[update] (s2.east) -- (s3.west); |
||||
|
\draw[update] (s3.east) -- (s4.west); |
||||
|
|
||||
|
\draw[save] (s1.south) -- (f1.north); |
||||
|
\draw[save] (s2.south) -- (f2.north); |
||||
|
\draw[save] (s3.south) -- (f3.north); |
||||
|
\draw[save] (s4.south) -- (f4.north); |
||||
|
\end{tikzpicture} |
||||
|
\end{figure} |
||||
|
\end{column} |
||||
|
\end{columns} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}{Wo kann ich das einsetzen?} |
||||
|
\begin{itemize} |
||||
|
\item Source-Code |
||||
|
\item Konfiguration |
||||
|
\item Dokumente |
||||
|
\item Daten |
||||
|
\end{itemize} |
||||
|
|
||||
|
\vspace{1em} |
||||
|
|
||||
|
Also alles, was \emph{Text} ist. |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}{Was bringt mir das?} |
||||
|
\centering |
||||
|
|
||||
|
{ |
||||
|
\fontsize{40}{48}\selectfont |
||||
|
Zeitmaschinen |
||||
|
}\\ |
||||
|
\vspace{1em} |
||||
|
\small{und}\\ |
||||
|
\vspace{1em} |
||||
|
{ |
||||
|
\fontsize{40}{48}\selectfont |
||||
|
Paralleluniversen |
||||
|
} |
||||
|
\end{frame} |
||||
|
|
||||
|
\section{Warum jetzt genau Git?} |
||||
|
|
||||
|
\begin{frame}{Kurze Histore} |
||||
|
\begin{figure}[H] |
||||
|
\begin{tikzpicture}[] |
||||
|
\tikzstyle{kind}+=[rectangle, very thick, minimum size=3.5em] |
||||
|
\tikzstyle{prod}+=[] |
||||
|
|
||||
|
\node[kind, draw=red!90!yellow!60, fill=red!90!yellow!5] (l) at(0,6) {Lokale Versionsverwaltung}; |
||||
|
\node[kind, draw=red!60!yellow!60, fill=red!60!yellow!5] (c) at(0,3) {Zentrale Versionsverwaltung}; |
||||
|
\node[kind, draw=red!30!yellow!60, fill=red!30!yellow!5] (d) at(0,0) {Verteilte Versionsverwaltung}; |
||||
|
|
||||
|
\draw[->,thick] (l.south) -- (c.north); |
||||
|
\draw[->,thick] (c.south) -- (d.north); |
||||
|
|
||||
|
\node[prod] (l1) [right=of l, yshift=+1em] {SCCS}; |
||||
|
\node[prod] (l2) [right=of l, yshift=-1em] {RCS}; |
||||
|
|
||||
|
\node[prod] (c1) [right=of c, yshift=+1em] {CSV}; |
||||
|
\node[prod] (c2) [right=of c, yshift=-1em] {SVN}; |
||||
|
|
||||
|
\node[prod] (d1) [right=of d, yshift=+1em] {Git}; |
||||
|
\node[prod] (d2) [right=of d, yshift= 0em] {Bazaar}; |
||||
|
\node[prod] (d3) [right=of d, yshift=-1em] {Mercurial}; |
||||
|
|
||||
|
\draw[->] (l.east) -- (l1.west); |
||||
|
\draw[->] (l.east) -- (l2.west); |
||||
|
|
||||
|
\draw[->] (c.east) -- (c1.west); |
||||
|
\draw[->] (c.east) -- (c2.west); |
||||
|
|
||||
|
\draw[->] (d.east) -- (d1.west); |
||||
|
\draw[->] (d.east) -- (d2.west); |
||||
|
\draw[->] (d.east) -- (d3.west); |
||||
|
|
||||
|
\end{tikzpicture} |
||||
|
\end{figure} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}{Git is everywhere} |
||||
|
\begin{columns}[c] |
||||
|
\begin{column}{0.5\textwidth} |
||||
|
\centering |
||||
|
\includegraphics[width=0.9\textwidth]{logos/GitHub.png} |
||||
|
\end{column} |
||||
|
\begin{column}{0.5\textwidth} |
||||
|
\centering |
||||
|
\includegraphics[width=0.9\textwidth]{logos/Codeberg.png} |
||||
|
\end{column} |
||||
|
\end{columns} |
||||
|
\vspace{1em} |
||||
|
\begin{columns}[c] |
||||
|
\begin{column}{0.5\textwidth} |
||||
|
\centering |
||||
|
\includegraphics[width=0.9\textwidth]{logos/GitLab.png} |
||||
|
\end{column} |
||||
|
\begin{column}{0.5\textwidth} |
||||
|
\centering |
||||
|
\includegraphics[width=0.9\textwidth]{logos/SourceHut.png} |
||||
|
\end{column} |
||||
|
\end{columns} |
||||
|
\vspace{1em} |
||||
|
\begin{columns}[c] |
||||
|
\begin{column}{0.5\textwidth} |
||||
|
\centering |
||||
|
\includegraphics[width=0.9\textwidth]{logos/Gitea.png} |
||||
|
\end{column} |
||||
|
\begin{column}{0.5\textwidth} |
||||
|
\centering |
||||
|
\includegraphics[width=0.9\textwidth]{logos/Bitbucket.png} |
||||
|
\end{column} |
||||
|
\end{columns} |
||||
|
\end{frame} |
||||
|
|
||||
|
\section{Einrichtung und Installation} |
||||
|
|
||||
|
\begin{frame}[fragile]{Installation} |
||||
|
\begin{description} |
||||
|
\item[Windows] https://gitforwindows.org/ oder \\ |
||||
|
\x^# choco install git^ |
||||
|
|
||||
|
\item[Linux] \x^# sudo dnf install git-all^ oder \\ |
||||
|
\x^# sudo apt install git-all^ oder ... |
||||
|
|
||||
|
\item[macOS] \x^# git --version^ |
||||
|
\end{description} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Einrichtung} |
||||
|
\begin{minted}{console} |
||||
|
# git config --global user.name "Dustin Frisch" |
||||
|
# git config --global user.email "dustin.frisch@ai.hs-fulda.de" |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame} |
||||
|
\centering |
||||
|
\LARGE |
||||
|
Pause |
||||
|
\end{frame} |
||||
|
|
||||
|
\section{Aller Anfang ist schwer} |
||||
|
|
||||
|
\begin{frame}[fragile]{Neues Projekt} |
||||
|
Neuen Ordner anlegen und in diesen wechseln. |
||||
|
|
||||
|
\begin{minted}{console} |
||||
|
# git init |
||||
|
Initialized empty Git repository in /home/fooker/tmp/myproject/.git/ |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Den überblick behalten} |
||||
|
Eine Datei in dem Ordner anlegen. |
||||
|
|
||||
|
\begin{minted}{console} |
||||
|
# git status |
||||
|
On branch main |
||||
|
|
||||
|
No commits yet |
||||
|
|
||||
|
Untracked files: |
||||
|
(use "git add <file>..." to include in what will be committed) |
||||
|
test.c |
||||
|
|
||||
|
nothing added to commit but untracked files present (use "git add" to track) |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Der Staging-Bereich} |
||||
|
\begin{minted}{console} |
||||
|
# git add test.c |
||||
|
|
||||
|
# git status |
||||
|
On branch main |
||||
|
|
||||
|
No commits yet |
||||
|
|
||||
|
Changes to be committed: |
||||
|
(use "git rm --cached <file>..." to unstage) |
||||
|
new file: test.c |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Mein erstes mal} |
||||
|
\begin{minted}{console} |
||||
|
# git commit |
||||
|
main (root-commit) 27cda20] A wonderful commit message |
||||
|
1 file changed, 6 insertions(+) |
||||
|
create mode 100644 test.c |
||||
|
|
||||
|
# git status |
||||
|
On branch main |
||||
|
nothing to commit, working tree clean |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Oh, ein wie konnte das nur passieren} |
||||
|
Die Datei in dem Ordner wird geändert. |
||||
|
|
||||
|
\begin{minted}{console} |
||||
|
# git add test.c |
||||
|
|
||||
|
# git commit |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Was bisher geschah...} |
||||
|
\begin{minted}{console} |
||||
|
# git log |
||||
|
commit 7163f25b8e477a43accc28c30f3bd4351a2d72a2 |
||||
|
Author: Dustin Frisch <fooker@lab.sh> |
||||
|
Date: Mon Oct 18 22:12:28 2021 +0200 |
||||
|
|
||||
|
Fixed dumb mistake |
||||
|
|
||||
|
commit 27cda204ad4caae123b44f1fc8d3ac6645e66d3f |
||||
|
Author: Dustin Frisch <fooker@lab.sh> |
||||
|
Date: Mon Oct 18 22:07:31 2021 +0200 |
||||
|
|
||||
|
A wonderful commit message |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{So langsam wird es} |
||||
|
Eine weitere Datei anlegen. |
||||
|
|
||||
|
\begin{minted}{console} |
||||
|
# git add example.c |
||||
|
|
||||
|
# git commit -m "Added example" |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Namesgebung ist schwierig} |
||||
|
Eine Datei umbenennen. |
||||
|
|
||||
|
\begin{minted}{console} |
||||
|
# git status |
||||
|
On branch main |
||||
|
Changes not staged for commit: |
||||
|
(use "git add/rm <file>..." to update what will be committed) |
||||
|
(use "git restore <file>..." to discard changes in working directory) |
||||
|
deleted: test.c |
||||
|
|
||||
|
Untracked files: |
||||
|
(use "git add <file>..." to include in what will be committed) |
||||
|
main.c |
||||
|
|
||||
|
no changes added to commit (use "git add" and/or "git commit -a") |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Namensgebung ist schwierig} |
||||
|
\begin{minted}{console} |
||||
|
# git add test.c main.c |
||||
|
|
||||
|
# git status |
||||
|
On branch main |
||||
|
Changes to be committed: |
||||
|
(use "git restore --staged <file>..." to unstage) |
||||
|
renamed: test.c -> main.c |
||||
|
|
||||
|
# git commit -m "Naming fixed" |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Und weg damit} |
||||
|
Eine Datei löschen. |
||||
|
\begin{minted}{console} |
||||
|
# git rm example.c |
||||
|
|
||||
|
# git commit -m "This was a mistake" |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Was hab ich nur getan} |
||||
|
Eine Datei ändern. |
||||
|
\begin{minted}{console} |
||||
|
# git diff |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Keine Fehler} |
||||
|
\begin{minted}{console} |
||||
|
# git restore main.c |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Was werde ich nur getan haben} |
||||
|
Eine Datei ändern. |
||||
|
\begin{minted}{console} |
||||
|
# git add main.c |
||||
|
|
||||
|
# git diff --staged |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Nee, doch nicht} |
||||
|
Datei nochmal ändern |
||||
|
\begin{minted}{console} |
||||
|
# git restore --staged main.c |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\section{Ein Baum ist ein Baum ist ein Baum} |
||||
|
|
||||
|
\begin{frame}[fragile]{Alles hat ein Ende} |
||||
|
\begin{minted}{console} |
||||
|
# git branch |
||||
|
* main |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Nur der Baum hat viele} |
||||
|
\begin{minted}{console} |
||||
|
# git branch feature-x |
||||
|
|
||||
|
# git branch |
||||
|
feature-x |
||||
|
* main |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Wer die Wahl hat} |
||||
|
\begin{minted}{console} |
||||
|
# git checkout feature-x |
||||
|
Switched to branch 'feature-x' |
||||
|
|
||||
|
# git branch |
||||
|
* feature-x |
||||
|
main |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Als währe nichts gewesen} |
||||
|
Ein paar Commits erzeugen. |
||||
|
\begin{minted}{console} |
||||
|
# git checkout main |
||||
|
Switched to branch 'main' |
||||
|
|
||||
|
# git log |
||||
|
... |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Realität ist subjektiv} |
||||
|
Eine paar Commits erzeugen. |
||||
|
\begin{minted}{console} |
||||
|
# git checkout feature-x |
||||
|
Switched to branch 'feature-x' |
||||
|
|
||||
|
# git log |
||||
|
... |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Zusammen was zusammen gehört} |
||||
|
\begin{minted}{console} |
||||
|
# git merge main |
||||
|
Merge made by the 'recursive' strategy. |
||||
|
... |
||||
|
|
||||
|
# git log |
||||
|
... |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame} |
||||
|
\centering |
||||
|
\LARGE |
||||
|
Pause |
||||
|
\end{frame} |
||||
|
|
||||
|
\section{Mein, dein. Das sind doch bürgerliche Kategorien} |
||||
|
|
||||
|
\begin{frame}[fragile]{So klein und schon bei den Sturmtruppen?} |
||||
|
\begin{minted}[bgcolor=bgr]{console} |
||||
|
# git clone http://git.open-desk.net/git/_.git project |
||||
|
\end{minted} |
||||
|
|
||||
|
\begin{minted}[bgcolor=bgr]{console} |
||||
|
# git remote -v |
||||
|
origin http://git.open-desk.net/git/_.git (fetch) |
||||
|
origin http://git.open-desk.net/git/_.git (push) |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Jeder fängt mal klein an} |
||||
|
|
||||
|
\begin{minted}[bgcolor=bgl]{console} |
||||
|
# git remote add origin http://git.open-desk.net/git/_.git |
||||
|
# git push origin main |
||||
|
... |
||||
|
To http://git.open-desk.net/git/_.git |
||||
|
* [new branch] main -> main |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Zieh, zeih, zieh!} |
||||
|
\begin{minted}[bgcolor=bgr]{console} |
||||
|
# git pull |
||||
|
... |
||||
|
From http://git.open-desk.net/git/_ |
||||
|
* [new branch] main -> origin/main |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Und jetzt alle zusammen} |
||||
|
In beiden Ordnern einen Commit erzeugen |
||||
|
|
||||
|
\begin{minted}[bgcolor=bgl]{console} |
||||
|
# git push origin main |
||||
|
... |
||||
|
To http://git.open-desk.net/git/a.git |
||||
|
ba998dd..a5069cc main -> main |
||||
|
\end{minted} |
||||
|
|
||||
|
\begin{minted}[bgcolor=bgr]{console} |
||||
|
# git push origin main |
||||
|
To http://git.open-desk.net/git/_.git |
||||
|
! [rejected] main -> main (fetch first) |
||||
|
error: failed to push some refs to 'http://git.open-desk.net/git/_.git' |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Ständiges Hin und Her} |
||||
|
\begin{minted}[bgcolor=bgr]{console} |
||||
|
# git pull |
||||
|
... |
||||
|
From http://git.open-desk.net/git/a |
||||
|
+ 07493c7...a5069cc main -> origin/main (forced update) |
||||
|
Successfully rebased and updated refs/heads/main. |
||||
|
|
||||
|
# git push |
||||
|
... |
||||
|
To http://git.open-desk.net/git/a.git |
||||
|
a5069cc..baf125b main -> main |
||||
|
\end{minted} |
||||
|
\end{frame} |
||||
|
|
||||
|
\section{Alles immer bitte gleich richtig machen} |
||||
|
|
||||
|
\begin{frame}[fragile]{Ich meine es nur gut} |
||||
|
\begin{itemize} |
||||
|
\item Nutzt SSH-Schlüssel mit einem SSH-Agent. \\ |
||||
|
Tutorials gibt es von GitHub. |
||||
|
\item Signiert eure Commits. \\ |
||||
|
Auch hier hilft GitHub weiter. |
||||
|
\end{itemize} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Ja, wirklich} |
||||
|
\begin{itemize} |
||||
|
\item Konfiguriert euch einen Shell-Prompt für Git. |
||||
|
\item Macht kleine und strukturierte Commits. \\ |
||||
|
\x{# git add -p -i .} |
||||
|
\end{itemize} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame}[fragile]{Falls noch Zeit bleibt} |
||||
|
\begin{itemize} |
||||
|
\item \x{# git commit --amend} |
||||
|
\item \x{# git stash} |
||||
|
\item \x{# git blame} |
||||
|
\item \x{# git rebase -i} |
||||
|
\item \x{# git rebase --onto} |
||||
|
\end{itemize} |
||||
|
\end{frame} |
||||
|
|
||||
|
\begin{frame} |
||||
|
\centering |
||||
|
|
||||
|
\vspace{3em} |
||||
|
|
||||
|
{ |
||||
|
\LARGE |
||||
|
Danke |
||||
|
} |
||||
|
|
||||
|
\vspace{3em} |
||||
|
|
||||
|
https://ohmygit.org |
||||
|
\end{frame} |
||||
|
|
||||
|
\end{document} |
@ -0,0 +1,32 @@ |
|||||
|
{ pkgs ? import <nixpkgs> {} }: |
||||
|
|
||||
|
let |
||||
|
pkgs = import (builtins.fetchTarball { |
||||
|
name = "nixos-21.05"; |
||||
|
url = "https://github.com/nixos/nixpkgs/archive/21b696caf392ad6fa513caf3327d0aa0430ffb72.tar.gz"; |
||||
|
sha256 = "1056r3383aaf5zhf7rbvka76gqxb8b7rwqxnmar29vxhs9h56m5k"; |
||||
|
}) {}; |
||||
|
|
||||
|
in pkgs.mkShell { |
||||
|
buildInputs = with pkgs; [ |
||||
|
(hunspellWithDicts [ |
||||
|
hunspellDicts.en-us |
||||
|
hunspellDicts.de-de |
||||
|
]) |
||||
|
|
||||
|
(texlive.combine { |
||||
|
inherit (texlive) scheme-full; |
||||
|
}) |
||||
|
|
||||
|
python38Packages.pygments |
||||
|
|
||||
|
(pkgs.vscode-with-extensions.override { |
||||
|
vscode = pkgs.vscodium; |
||||
|
vscodeExtensions = with pkgs.vscode-extensions; [ |
||||
|
james-yu.latex-workshop |
||||
|
]; |
||||
|
}) |
||||
|
|
||||
|
qtikz |
||||
|
]; |
||||
|
} |
@ -0,0 +1,50 @@ |
|||||
|
\usepackage{tikz} |
||||
|
\usepackage{pgfplots} |
||||
|
\usetikzlibrary{trees} |
||||
|
\usetikzlibrary{topaths} |
||||
|
\usetikzlibrary{decorations.pathmorphing} |
||||
|
\usetikzlibrary{fadings} |
||||
|
\usetikzlibrary{decorations.pathreplacing} |
||||
|
\usetikzlibrary{decorations.markings} |
||||
|
\usetikzlibrary{matrix,backgrounds,folding} |
||||
|
\usetikzlibrary{chains,scopes,positioning,fit} |
||||
|
\usetikzlibrary{arrows,shadows} |
||||
|
\usetikzlibrary{calc} |
||||
|
\usetikzlibrary{chains} |
||||
|
\usetikzlibrary{shapes,shapes.geometric,shapes.misc} |
||||
|
\usetikzlibrary{circuits.ee.IEC} |
||||
|
|
||||
|
\newcommand{\tikzfigg}[1]{\tikz[baseline=-0.5em]{\node[draw=red,font=\color{red},fill=red!10!white] {\textit{#1}};}} |
||||
|
|
||||
|
\newcommand{\ctikzfigg}[1]{\begin{center} |
||||
|
\tikz[baseline=-0.5em]{\node[draw=red,font=\color{red},fill=red!10!white] {\textit{#1}};} |
||||
|
\end{center}} |
||||
|
|
||||
|
\newcommand{\tikzfigTODO}[1]{\textbf{\color{red}(figure: #1)}} |
||||
|
\newcommand{\ctikzfigTODO}[1]{\begin{center} |
||||
|
\textbf{\color{red}(figure: #1)} |
||||
|
\end{center}} |
||||
|
|
||||
|
|
||||
|
\newcommand{\tikzfig}[1]{% |
||||
|
\IfFileExists{#1.tikz} |
||||
|
{\input{#1.tikz}} |
||||
|
{% |
||||
|
\IfFileExists{./figures/#1.tikz} |
||||
|
{\input{./figures/#1.tikz}} |
||||
|
{\tikz[baseline=-0.5em]{\node[draw=red,font=\color{red},fill=red!10!white] {\textit{#1}};}}% |
||||
|
}% |
||||
|
} |
||||
|
\newcommand{\ctikzfig}[1]{% |
||||
|
\begin{center}\rm |
||||
|
\tikzfig{#1} |
||||
|
\end{center}} |
||||
|
|
||||
|
%\newcommand{\inlinetikzfig}[1]{\InputIfFileExists{#1.tikz}{}{\input{./figures/#1.tikz}}} |
||||
|
|
||||
|
\pgfdeclarelayer{edgelayer} |
||||
|
\pgfdeclarelayer{nodelayer} |
||||
|
\pgfsetlayers{background,edgelayer,nodelayer,main} |
||||
|
\tikzstyle{none}=[inner sep=0mm] |
||||
|
\tikzstyle{every loop}=[] |
||||
|
\tikzstyle{mark coordinate}=[inner sep=0pt,outer sep=0pt,minimum size=3pt,fill=black,circle] |