presentation.tex 14.4 KB
Newer Older
Lukas Nagel's avatar
Lukas Nagel committed
1
\documentclass[]{beamer}
Lukas Nagel's avatar
Lukas Nagel committed
2
3
4

\include{theme}

5
\title[\faGit\ Git \& \faGithub\ GitHub]{Versions Kontrolle mit Git und GitHub}
Lukas Nagel's avatar
Lukas Nagel committed
6
7
8
9
10
11
\author{Lukas Nagel}
\email{lukasngl@mail.upb.de}
\source{git.cs.upb.de/lukasngl/itt}
\date[ITT WS21/22]{IT Technologie Trends WS21/22}

\begin{document}
Lukas Nagel's avatar
Lukas Nagel committed
12
13
14
%
% Titelseite
%
15
\setbeamertemplate{footline}{}
Lukas Nagel's avatar
Lukas Nagel committed
16
17
18
\begin{frame}
	\titlepage
\end{frame}
19
20
21
\setbeamertemplate{footline}{\footline}
\setcounter{framenumber}{0}

Lukas Nagel's avatar
Lukas Nagel committed
22

Lukas Nagel's avatar
Lukas Nagel committed
23
24
25
26
%
% Überblick über git
%
\section{Überblick über git}
Lukas Nagel's avatar
Lukas Nagel committed
27
\subsection{Versionsverwaltungssystem}
Lukas Nagel's avatar
Lukas Nagel committed
28
\begin{frame}
29
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
30
31
32
33
34
35
36
	\code{git} ist ein Versionsverwaltungssystem\\
	\begin{itemize}
		\item \emph{Versionsverwaltung:} System zur Erfassung von Änderungen and Dokumenten
		\item Neue Version nach Logisch zusammenhägender Menge von Änderungen
			explizit durch den Nutzer
		\item Versionen liegen im \code{Repository} (kurz: Repo)
	\end{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
37
	\code{git} wird über die Kommandozeile bedient
Lukas Nagel's avatar
Lukas Nagel committed
38
39
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
40
\subsection{Dezentrale Topologie}
Lukas Nagel's avatar
Lukas Nagel committed
41
\begin{frame}
42
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
43
44
45
46
47
48
49
50
51
	\code{git} ist dezentral
	\begin{itemize}
		\item Jeder Nutzer hat eigenes \code{lokales} Repository
		\item Repositories anderer Nutzer sind \code{remotes}
		\item Repositories können untereinander synchronisiert werden
		\item Häufig (aber nicht Notwendig): Ein Hauptrepo
	\end{itemize}
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
52
\subsection{Arbeitsverzeichniss, Index und Repository}
Lukas Nagel's avatar
Lukas Nagel committed
53
\begin{frame}
54
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
55
56
	\code{git} versioniert Dateien im \code{Arbeitsverzeichniss}
	\begin{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
57
		\item Ort für Änderungen der nächsten Version
Lukas Nagel's avatar
Lukas Nagel committed
58
59
60
61
62
63
64
65
66
	\end{itemize}
	Änderungen werden in den \code{index} aufgenommen
	\begin{itemize}
		\item Enthält somit Kopie der aktuellen Version,
			mit den Änderungen für die nächste Version
		\item Erlaubt das sammeln von Änderungen
	\end{itemize}
	Eine neue Version wird durch einen \code{commit} erzeugt
	\begin{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
67
		\item Beschreibung und Informationen zum Autor
Lukas Nagel's avatar
Lukas Nagel committed
68
		\item Referenzen auf beliebig viele Vorgänger\code{commit}s
Lukas Nagel's avatar
Lukas Nagel committed
69
		\item Schnappschuss aller Dateien der aktuellen Version
Lukas Nagel's avatar
Lukas Nagel committed
70
	\end{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
71
72
	\code{Repository} speichert \code{commit}s
	unter ihrem SHA1 \code{Hash}
Lukas Nagel's avatar
Lukas Nagel committed
73
74
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
75
\subsection{Versionsgeschichte}
Lukas Nagel's avatar
Lukas Nagel committed
76
\begin{frame}
77
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
78
79
	Die Menge aller \code{commit}s, ergibt die Versionsgeschichte als \code{DAG}
	\begin{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
80
81
82
83
		\item Mehrere Vorgänger bzw. Nachfolger: \code{Zweig}e (\code{branches})
		\item Zeiger auf commits: Spitze des \code{branches}
		\item \code{HEAD}: Symbolische Referenzen auf akutellen Zweig
		\item Zeiger wird mit jedem Commit vorwärts bewegt
Lukas Nagel's avatar
Lukas Nagel committed
84
85
86
87
88
	\end{itemize}
	\center
	\huge\alert{Grafik: Versionsgraph}
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
89
%
Lukas Nagel's avatar
Lukas Nagel committed
90
% Git Objekte
Lukas Nagel's avatar
Lukas Nagel committed
91
%
Lukas Nagel's avatar
Lukas Nagel committed
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
\section{Die git Objektdatenbank}
\subsection{Datenstruktur des git Objekts}
\begin{frame}
	\frametitle{\subsecname}
	\begin{itemize}
		\item Git speichert intern \code{objekt}e
		\item Referenz auf objekte durch Hash des Zielobjekts
	\end{itemize}
	\center{} {\huge UMLartig git objekt}
\end{frame}

\subsection{Konsequenz}
\begin{frame}
	\frametitle{\subsecname}
	\begin{itemize}
		\item Integritäts Mechanismus Ähnlich zu Block Chain \\
			jeder commit hash enthält:
			\begin{itemize}
				\item Hash des \code{tree}s und somit Hashes der \code{blob}s
				\item Hashes der Vorgänger
			\end{itemize}
			\item Deduplizierung: Objekte mit gleichem Inhalt werden nur einmal gespeichert
		\item Umbnennung muss nicht gesondert behandelt werden, kleine änderung im \code{tree} objekt
		\item Effizienz: Branches benötigen nur Zeiger
	\end{itemize}
\end{frame}


%
% Anwendungs Beispiel
%
\section{Anwendungs Beispiel}
Lukas Nagel's avatar
Lukas Nagel committed
124
\begin{frame}
125
	\frametitle{\secname}
Lukas Nagel's avatar
Lukas Nagel committed
126
127
128
129
130
131
132
133
	\begin{Beispiel}
		\begin{itemize}
			\item Alice und Bob arbeiten für eine Vorlesung zusammen
			\item Ein Algorithmus soll implementiet und Bewiesen werden
			\begin{itemize}
				\item Dokument: \code{proof.tex}
				\item Implemtation: \code{algo.py}
			\end{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
134
		\item Sie wollen \code{git} zur Versionsverwaltung verwenden
Lukas Nagel's avatar
Lukas Nagel committed
135
136
		\end{itemize}
	\end{Beispiel}
Lukas Nagel's avatar
Lukas Nagel committed
137
138
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
139
140
\subsection{Initialisierung}
\begin{frame}[fragile]
Lukas Nagel's avatar
Lukas Nagel committed
141
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
142
143
144
145
146
147
148
149
150
151
152
153
154
155
	\begin{Beispiel}
		Zunächst muss das Repository initialisiert werden:
		\begin{commandline}
			\cmd{ls -a}    & \cmt{Zeige Verzeichniss Inhalt an} \\
			\out{proof.tex algo.py} \\
			\cmd{git init} & \cmt{Initialisiere Repo} \\
			\cmd{ls -a}    & \cmt{.git Verzeichniss wurde angelegt} \\
			\out{\textbf{.git} proof.tex algo.py} \\
		\end{commandline}
	\end{Beispiel}
\end{frame}

\subsection{Status anzeigen}
\begin{frame}[fragile]
Lukas Nagel's avatar
Lukas Nagel committed
156
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
157
158
159
160
161
162
163
164
165
166
167
168
	\begin{Beispiel}
		Der sehr nützliche Befehl \code{status} gibt schnellen Überblick
		\begin{commandline}
			\cmd{git status}    & \cmt{Ausgabe leicht gekürzt} \\
			\out{Auf Branch master} \\
			\out{} \\
			\out{Noch keine Commits} \\
			\out{} \\
			\out{Unversionierte Dateien:} \\
				\out{algo.py} \\
				\out{proof.tex} \\
			\out{} \\
Lukas Nagel's avatar
Lukas Nagel committed
169
			\out{nichts zum Commit vorgemerkt} \\
Lukas Nagel's avatar
Lukas Nagel committed
170
171
172
173
174
175
		\end{commandline}
	\end{Beispiel}
\end{frame}

\subsection{Dateien versionieren}
\begin{frame}[fragile]
Lukas Nagel's avatar
Lukas Nagel committed
176
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
	\begin{Beispiel}
		\begin{commandline}
			\cmd{git add} proof.tex algo.py & \cmt{zum index hinzufügen} \\
			\cmd{git status} & \cmt{Ausgabe gekürtz} \\
			\out{[...]} \\
			\out{Zum Commit vorgemerkte Änderungen:} \\
			\out{~~~~neue Datei:     algo.py} \\
			\out{~~~~neue Datei:     proof.tex} \\
			\cmd{git commit -m} \str{inital} & \cmt{Änderungen commiten} \\
			\out{[master (Root-Commit) 4db27dd] initial} \\
			\out{~2 files changed, 22 insertions(+)} \\
			\out{~create mode 100755 algo.py} \\
			\out{~create mode 100644 proof.tex} \\
		\end{commandline}
	\end{Beispiel}
\end{frame}

\subsection{Änderungen versionieren}
\begin{frame}[fragile]
Lukas Nagel's avatar
Lukas Nagel committed
196
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
197
198
199
200
201
202
203
204
205
206
207
208
209
	\begin{Beispiel}
		\begin{commandline}
			\cmd{vim} algo.py & \cmt{nach pep8 formatieren} \\
			\cmd{git status} & \cmt{Ausgabe gekürtz} \\
			\out{Änderungen, die nicht zum Commit vorgemerkt sind:} \\
			\out{~~~~geändert:       algo.py} \\
			\cmd{git add} algo.py & \cmt{Änderung in index} \\
			\cmd{git status} & \cmt{Ausgabe gekürtz} \\
			\out{Zum Commit vorgemerkte Änderungen:} \\
			\out{~~~~geändert:       algo.py} \\
			\cmd{git commit -m} \str{pep8} & \cmt{Änderungen commiten} \\
		\end{commandline}
	\end{Beispiel}
Lukas Nagel's avatar
Lukas Nagel committed
210
211
	\center
	\begin{figure}
Lukas Nagel's avatar
Lukas Nagel committed
212
		\includegraphics{../grafiken/ex1-graph}
Lukas Nagel's avatar
Lukas Nagel committed
213
	\end{figure}
Lukas Nagel's avatar
Lukas Nagel committed
214
\end{frame}
Lukas Nagel's avatar
Lukas Nagel committed
215
216
217
218

%
% Vorstellung zu lösender Probleme
%
Lukas Nagel's avatar
Lukas Nagel committed
219
\subsection{Welche Probleme löst git?}
Lukas Nagel's avatar
Lukas Nagel committed
220
\begin{frame}
221
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
222
223
224
225
226
227
	\keyword{Versionsgeschichte Nachvollziehen}
	\begin{itemize}
		\item Wann wurde eine Änderung vorgenommen?
		\item Warum wurde die funktion entfernt?
		\item Wer hat den Absatz geschrieben?
	\end{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
228
229
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
230
\begin{frame}
231
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
232
233
234
235
236
237
238
239
240
	\keyword{Alle Versionen bleiben erreichbar}
	\begin{itemize}
		\item Welche war die letzte läuffähige Version?
		\item Modul wurde gelöcht das später wichtig ist
		\item Neue Features ausprobieren
	\end{itemize}
\end{frame}

\begin{frame}
241
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
242
243
244
245
246
247
248
249
250
251
252
253
	\keyword{Effizientes Verzweigen}
	\begin{itemize}
		\item Mehrer Features können in eigenen Zweigen entwickelt werden
		\item Einfaches zusammenführen divergierter Zweige
			\begin{itemize}
				\item Größtenteils automatisch
				\item Konflikte müssen manuell aufgelöst werden
			\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}
254
255
	\frametitle{\subsecname}
	\keyword{Kollaboration}
Lukas Nagel's avatar
Lukas Nagel committed
256
	\begin{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
257
258
		\item Mechanismen zum synchronisieren verteilter Repos
		\item Änderungen werden am lokalen Repo vorgenommen
Lukas Nagel's avatar
Lukas Nagel committed
259
			\begin{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
260
261
				\item Vermeidet Konflikte
				\item Kein Server notwendig
Lukas Nagel's avatar
Lukas Nagel committed
262
			\end{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
263
		\item Viele Workflows möglich
Lukas Nagel's avatar
Lukas Nagel committed
264
	\end{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
265
266
267
\end{frame}


Lukas Nagel's avatar
Lukas Nagel committed
268

Lukas Nagel's avatar
Lukas Nagel committed
269
270
271
%
% Branches
%
Lukas Nagel's avatar
Lukas Nagel committed
272
\section{Branches}
Lukas Nagel's avatar
Lukas Nagel committed
273
\subsection{Kommandos}
Lukas Nagel's avatar
Lukas Nagel committed
274
275
276
277
278
279
280
281
282
283
284
285
286
287
\begin{frame}
	\frametitle{\subsecname}
	Neuen Branch erstellen
	\begin{commandline}
		\cmd{git branch <branchname>} & \\
	\end{commandline}
	~\\
	Zum branch wechseln
	\begin{commandline}
		\cmd{git checkout -b <branchname>} & \\
	\end{commandline}
\end{frame}

\section{Branches}
Lukas Nagel's avatar
Lukas Nagel committed
288
\subsection{Beispiel}
Lukas Nagel's avatar
Lukas Nagel committed
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
\begin{frame}
	\frametitle{\subsecname}
	\begin{Beispiel}
		Der Algorithmus ist extrem langsam,\\
		Alice probiert ihn durch Vorsortieren zu beschleunigen
		\begin{commandline}
			\cmd{git checkout -b} \str{performance} & \\
			\cmd{vim} algo.py & \\
			\cmd{git add} algo.py & \\
			\cmd{git commit -m} \str{presort input} & \\
		\end{commandline}
		\center{} {\huge \alert{Grafik: Angepasster Versionsgraph}}
	\end{Beispiel}
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
304
\subsection{Mergen}
Lukas Nagel's avatar
Lukas Nagel committed
305
306
307
308
309
310
311
312
313
314
315
316
\begin{frame}
	\frametitle{\subsecname}
	\begin{itemize}
		\item Ein zweig soll in einen anderen integriert werden
		\item Folgende Möglichekteiten
		\begin{itemize}
			\item Fast Forward
			\item Drei-Wege-Merge
		\end{itemize}
	\end{itemize}
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
317
\subsection{Fast-Forward Merge}
Lukas Nagel's avatar
Lukas Nagel committed
318
\begin{frame}
Lukas Nagel's avatar
Lukas Nagel committed
319
320
321
322
323
324
325
326
327
	\frametitle{\subsecname}
	Branch \code{A} soll in \code{B} gemerget werden
	\begin{itemize}
		\item Nur möglich wenn B direkter Vorgänger von A
		\item Dann Zeiger von branch B auf A verschieben
		\item Erzeugt keinen Merge Commit (!)
	\end{itemize}
	\center {\huge \alert{Grafik: Example für ff}} \\
	{\huge \alert{Grafik: ergebnis}}
Lukas Nagel's avatar
Lukas Nagel committed
328
329
330
\end{frame}


Lukas Nagel's avatar
Lukas Nagel committed
331
\subsection{3-Wege-Merge}
Lukas Nagel's avatar
Lukas Nagel committed
332
333
334
335
336
337
338
339
340
341
342
343
344
345
\begin{frame}
	\frametitle{\subsecname}
	Branch \code{A} soll in \code{B} gemerget werden,
	ihr nächster gemeinsamer Vorgägner ist \code{C}
	\begin{itemize}
		\item Erzeugt neuen commit mit Vorgänger
			\code{A} und \code{B}
		\item branch \code{B} zeigt nun auf diesen commit
		\item \code{tree} des commits enthält gemerget Version
	\end{itemize}
	\center {\huge \alert{Grafik: Example für 3wm}} \\
	{\huge \alert{Grafik: ergebnis}}
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
346
\subsection{Beispiel merge}
Lukas Nagel's avatar
Lukas Nagel committed
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
\begin{frame}
	\frametitle{\subsecname}
	Bob hat auf dem \code{master} branch am Beweis weitergearbeitet. \\
	Alice ist fertig im \code{performance} branch
	und möchte in den \code{master} mergen.
	\begin{Beispiel}
		\begin{commandline}
			\cmd{git checkout} master & \\
			\cmd{git merge} performance & \\
			\out{Merge made by the 'ort' strategy.} \\
			\out{~algo.py | 4 +++-} \\
			\out{~1 file changed, 3 insertions(+), 1 deletion(-)} \\
		\end{commandline}
		\only<1>{\center{} {\huge \alert{Grafik: zustand}}}
		\only<2>{\center{} {\huge \alert{Grafik: ergebnis}}}
	\end{Beispiel}
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
365
366
367
%
% Remotes
%
Lukas Nagel's avatar
Lukas Nagel committed
368
\section{Remotes}
Lukas Nagel's avatar
Lukas Nagel committed
369
\begin{frame}
Lukas Nagel's avatar
Lukas Nagel committed
370
371
372
373
374
375
376
377
378
379
380
381
382
	\frametitle{\secname}
	\begin{itemize}
		\item git kann lokale mit remote Repositories synchronisieren
		\item \code{remote} wird mit Name und URL konfiguriert
		\item branches des \code{remote}s sind lokal \code{<name>/<branch>}
	\end{itemize}
	~\\
	Häufig kopiert man ein entferntes Repository.
	\begin{commandline}
		\cmd{git clone <url>} & \cmt{name defaults to origin} \\
	\end{commandline}
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
383
\subsection{Grundlegende Kommandos}
Lukas Nagel's avatar
Lukas Nagel committed
384
\begin{frame}
Lukas Nagel's avatar
Lukas Nagel committed
385
	\frametitle{\subsecname}
Lukas Nagel's avatar
Lukas Nagel committed
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
	Remote zu bestehendem Repo hinzufügen
	\begin{commandline}
		\cmd{git remote add} <name> <url> & \\
	\end{commandline}
	~\\
	Änderungen von remote lesen
	\begin{commandline}
		\cmd{git fetch} <name> <branch> & \\
		\cmd{git pull} <name> <branch> & \cmt{zusätzlicher merge} \\
	\end{commandline}
	~\\
	Änderungen an entferntes repo schicken
	\begin{commandline} 
		\cmd{git push} <name> <branch> & \\
	\end{commandline}
Lukas Nagel's avatar
Lukas Nagel committed
401
402
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
\subsection{Beispiel}
\begin{frame}
	\frametitle{\subsecname}
	Bob will Anderungen von Alice in sein lokales Repo einpflegen
	\begin{Beispiel}
		\begin{commandline}
			\visible<1->{\cmd{git remote add} alice \str{git.upb.de/alice/bogo}} & \\
			\visible<2->{\cmd{git fetch} alice master} & \\
			\visible<3->{\cmd{git merge} alice/master} & \\
		\end{commandline}
		\only<1>{\center{} {\huge \alert{Grafik: zustand}}}
		\only<2>{\center{} {\huge \alert{Grafik: nach fetch}}}
		\only<3>{\center{} {\huge \alert{Grafik: nach merge}}}
	\end{Beispiel}
\end{frame}
Lukas Nagel's avatar
Lukas Nagel committed
418
419
420
421

%
% Überblick über GitHub
%
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
\section{\faGithub\ GitHub}

\begin{frame}
	\frametitle{\secname}
	\begin{itemize}
		\item Größter Hoster für Open Source git Projekte
		\item Viele zusätzliche Services
			\begin{itemize}
				\item Issues
				\item Wiki
				\item Actions
				\item Pages
			\end{itemize}
		\item Projekte werden Nutzern untergeordnet
			\begin{itemize}
				\item Ein Hauptrepo
				\item Vereinfacht beitragen von Änderungen
439
				\item URL Schema: \code{github.com/<user>/<project>}
440
441
442
			\end{itemize}
	\end{itemize}
\end{frame}
Lukas Nagel's avatar
Lukas Nagel committed
443

444
445
446
447
448
449
450
\begin{frame}
	\frametitle{\secname}
	\center\small
	\begin{figure}
		\includegraphics[width=0.8\textwidth]{github-userpage.png}
	\end{figure}
		GitHub Nutzer Seite\\(\url{https:/github.com/lukasngl})
Lukas Nagel's avatar
Lukas Nagel committed
451
\end{frame}
Lukas Nagel's avatar
Lukas Nagel committed
452
453
454
455
456
457
458
459
\begin{frame}
	\frametitle{\secname}
	\center\small
	\begin{figure}
		\includegraphics[width=0.8\textwidth]{github-repo.png}
	\end{figure}
		GitHub Projekt Seite\\(\url{https:/github.com/git/git})
\end{frame}
Lukas Nagel's avatar
Lukas Nagel committed
460
461
462
463
464


%
% Kollaboration in GitHub über Forks und Pull Request
%
Lukas Nagel's avatar
Lukas Nagel committed
465
\subsection{Forks und Pullrequests}
Lukas Nagel's avatar
Lukas Nagel committed
466
\begin{frame}
467
468
469
470
471
472
473
474
475
	\frametitle{\subsecname}
	GitHub nutzt zum Beitragen primär Forks und Pullrequests
	\begin{itemize}
		\item Forken legt kopie des Projekts im Nutzernamensraum an
		\item Dieser Fork wird dann geklont bzw als remote hinzugefügt
		\item Um commits ins Hauptrepo zu übernehemen kann eine Pullrequest erstellt werden
		\item Alle nutzer können Pullrequests Kommentare hinterlassen
		\item Der Maintainer des Hauptepos kann die Pullrequests mergen odeschließen
	\end{itemize}
Lukas Nagel's avatar
Lukas Nagel committed
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
	\center{\Huge An Grafik Zeigen}
\end{frame}

\section{Fazit}
\subsection{Was sind die Vorteile?}
\begin{frame}
	\frametitle{\subsecname}
	\begin{itemize}
		\item git hilft dabei die Versionsgeschichte nachvollziehen
		\item branching erlaubt nebenläufge Entwickelung
		\item Mit git ist einpflegen von Änderungen einfach
		\item GitHub bietet einen einfachen Weg Projekte zu veröffentlichen und bei Anderen Änderunen beizutragen
		\item GitHub erlaubt Bedienung ohne Kommandozeile
	\end{itemize}
\end{frame}

\subsection{Wo liegen die Probleme?}
\begin{frame}
	\frametitle{\subsecname}
	\begin{itemize}
		\item GitHub ist selbst nicht Open Source und gehört zu MS
			\begin{itemize}
				\item Alternativen: z.B. GitLab
			\end{itemize}
		\item Bedienung äußert Komplex
			\begin{itemize}
					\item "unusually rich command set"
					\item Bedienung über Kommandozeile \\
						(Natürlich ist es so effizienter und automatisierbar)
					\item GUIs und alternative CLIs existieren
			\end{itemize}
			\item und...
	\end{itemize}
\end{frame}
\begin{frame}
	\frametitle{\subsecname}
512
	\center
Lukas Nagel's avatar
Lukas Nagel committed
513
514
515
516
517
	Digitale Signaturen möglich aber nicht verpflichtend
	\begin{figure}
		\includegraphics[width=0.8\textwidth]{kinda-sus.png}
	\end{figure}
		\tiny(\url{https://github.com/Amog-OS/AmogOS/commit/5eaa2b0a15b4c4e63b790895c92db3361fed03d9})
Lukas Nagel's avatar
Lukas Nagel committed
518
519
\end{frame}

Lukas Nagel's avatar
Lukas Nagel committed
520
\end{document}