|
2 | 2 |
|
3 | 3 | \begin{frame} |
4 | 4 | \frametitle{Vad är versionshantering?} |
5 | | - |
| 5 | + |
6 | 6 | \begin{itemize} |
7 | 7 | \ii{Har du någonsin... } |
8 | 8 | \begin{itemize} |
|
11 | 11 | \ii{Skrivit över en fil av misstag?} |
12 | 12 | \ii{Behövt hålla koll på olika versioner av samma dokument?} |
13 | 13 | \end{itemize} |
14 | | - \ii{Versionshantering hjälper dig att lösa dessa problem!} |
| 14 | + \ii{Versionshantering hjälper dig att hantera dessa problem!} |
15 | 15 | \end{itemize} |
16 | 16 | \end{frame} |
17 | 17 |
|
|
34 | 34 | \ii{Möjlighet att återgå till äldre versioner av filer vid behov.} |
35 | 35 | \ii{Möjliggör parallellt arbete och konflikthantering.} |
36 | 36 | \end{itemize} |
37 | | - |
| 37 | + |
38 | 38 | \end{frame} |
39 | 39 |
|
40 | 40 | \begin{frame} |
41 | 41 | \frametitle{Typer av versionshanteringssystem (1/2)} |
42 | | - |
| 42 | + |
43 | 43 | \begin{block}{Centraliserade system} |
44 | 44 | \begin{itemize} |
45 | 45 | \ii{En central server lagrar alla filer och versioner. (\emph{repository})} |
|
48 | 48 | \ii{Exempel: Subversion (SVN), Perforce} |
49 | 49 | \end{itemize} |
50 | 50 | \end{block} |
51 | | - |
| 51 | + |
52 | 52 | \end{frame} |
53 | 53 |
|
54 | 54 | \begin{frame} |
|
94 | 94 |
|
95 | 95 | \blankline |
96 | 96 | \ti{Testa: \code{git rev-list --max-parents=0 HEAD}} |
97 | | - |
| 97 | + |
98 | 98 | \end{frame} |
99 | 99 |
|
100 | 100 | \begin{frame} |
|
113 | 113 | \ii{Använder Git internt för att hantera repositories, precis som lokala installationer av Git.} |
114 | 114 | \end{itemize} |
115 | 115 | \end{block} |
116 | | - |
| 116 | + |
117 | 117 | \end{frame} |
118 | 118 |
|
119 | 119 | \begin{frame} |
|
127 | 127 | \di{git push}{Laddar upp dina lokala ändringar till ett fjärrrepository (t.ex. GitHub).} |
128 | 128 | \di{git pull}{Hämtar och integrerar ändringar från ett fjärrrepository.} |
129 | 129 | \end{description} |
130 | | - |
| 130 | + |
131 | 131 | \end{frame} |
132 | 132 |
|
133 | 133 |
|
134 | 134 | \begin{frame} |
135 | 135 | \frametitle{Git-modellen} |
136 | | - |
| 136 | + |
137 | 137 | \begin{itemize} |
138 | 138 | \ii{\emph{Workspace}: En vanlig mapp på datorn där du jobbar med filer.} |
139 | 139 | \ii{\emph{Staging Area}: En "kopia" av workspace där du förbereder ändringar inför nästa sparning.} |
140 | 140 | \ii{\emph{Repository}: Ett arkiv som lagrar alla tidigare versioner av projektet.} |
141 | 141 | \end{itemize} |
142 | 142 |
|
143 | 143 | \begin{center} |
144 | | - \includegraphics[height=.5\textheight]{figs/model-add-commit.png} |
| 144 | + \includegraphics[height=.5\textheight]{figs/model-add-commit.png} |
145 | 145 | \end{center} |
146 | | - |
| 146 | + |
147 | 147 | \end{frame} |
148 | 148 |
|
149 | 149 | \begin{frame} |
|
163 | 163 | \begin{tikzpicture} |
164 | 164 | % Draw the vertical line |
165 | 165 | \draw[thick] (0, 0) -- (0, 3); |
166 | | - |
| 166 | + |
167 | 167 | % Draw the commit nodes |
168 | 168 | \foreach \y in {0, 1, 2, 3} { |
169 | | - \filldraw (0, \y) circle (3pt); |
170 | | - } |
171 | | - |
| 169 | + \filldraw (0, \y) circle (3pt); |
| 170 | + } |
| 171 | + |
172 | 172 | % Label the commits |
173 | 173 | \node[right, xshift=5pt] at (0, 3) {Commit 1}; |
174 | 174 | \node[right, xshift=5pt] at (0, 2) {Commit 2}; |
175 | 175 | \node[right, xshift=5pt] at (0, 1) {Commit 3}; |
176 | 176 | \node[right, xshift=5pt] at (0, 0) {Commit 4}; |
177 | 177 | \end{tikzpicture} |
178 | | - |
| 178 | + |
179 | 179 | \end{center} |
180 | 180 | \end{minipage} |
181 | | - |
| 181 | + |
182 | 182 | \end{frame} |
183 | 183 |
|
184 | 184 | \begin{frame} |
|
187 | 187 | \begin{minipage}{0.7\textwidth} |
188 | 188 |
|
189 | 189 | \ti{Man kan skapa parallella utvecklingsgrenar, som sedan kan slås samman (\emph{merge}) med huvudgrenen igen.} |
190 | | - |
| 190 | + |
191 | 191 | \begin{itemize} |
192 | 192 | \ii{Varför vill man göra det?} |
193 | 193 | \ii{Vilka problem kan uppstå?} |
|
199 | 199 | % Rita huvudgrenen (main) |
200 | 200 | \draw[thick] (0, 0) -- (0, 5); |
201 | 201 | \foreach \y in {0, 1, 3, 4, 5} { |
202 | | - \filldraw (0, \y) circle (3pt); |
203 | | - } |
| 202 | + \filldraw (0, \y) circle (3pt); |
| 203 | + } |
204 | 204 | \node[above, yshift=2pt] at (0, 5) {\emph{main}}; |
205 | | - |
| 205 | + |
206 | 206 | % Rita parallellgrenen (branch) |
207 | 207 | \draw[thick] (0, 4) -- (1, 3) -- (1, 2) -- (0, 1); |
208 | 208 | \foreach \y in {2, 3} { |
209 | | - \filldraw (1, \y) circle (3pt); |
210 | | - } |
| 209 | + \filldraw (1, \y) circle (3pt); |
| 210 | + } |
211 | 211 | \node[above, yshift=2pt, xshift=15pt] at (1, 3) {\emph{branch}}; |
212 | 212 | \end{tikzpicture} |
213 | 213 | \end{minipage} |
214 | | - |
| 214 | + |
215 | 215 | \end{frame} |
216 | 216 |
|
217 | 217 | \begin{frame} |
|
224 | 224 | \ii{Skapa snabb fix för fel utan att stoppa ny utveckling.} |
225 | 225 | \ii{Branches i Git är lätta att skapa och använda!} |
226 | 226 | \end{itemize} |
227 | | - |
| 227 | + |
228 | 228 | \end{frame} |
229 | 229 |
|
230 | 230 | \begin{frame} |
|
237 | 237 | \ii{Exempel: Flera redigerar samma rad, eller ändrar/byter namn på samma filer.} |
238 | 238 | \ii{Konflikter måste lösas manuellt för att slutföra en \emph{merge}.} |
239 | 239 | \end{itemize} |
240 | | - |
| 240 | + |
241 | 241 | \end{frame} |
242 | 242 |
|
243 | 243 | \begin{frame}[fragile] |
|
246 | 246 | \begin{block}{\small Kod före merge} |
247 | 247 | \begin{GobbleCode}[0pt]{10} |
248 | 248 | def greet(): String = { |
249 | | - "Hello, world!" |
| 249 | + "Hello, world!" |
250 | 250 | } |
251 | 251 | \end{GobbleCode} |
252 | 252 | \end{block} |
|
255 | 255 | \begin{GobbleCode}[0pt]{10} |
256 | 256 | def greet(): String = { |
257 | 257 | <<<<<<< HEAD |
258 | | - "Hello, world!" |
| 258 | + "Hello, world!" |
259 | 259 | ======= |
260 | | - "Hi, everyone!" |
| 260 | + "Hi, everyone!" |
261 | 261 | >>>>>>> branch |
262 | 262 | } |
263 | 263 | \end{GobbleCode} |
|
267 | 267 | \ii{Konflikten visas med \texttt{<<<<<<<}, \texttt{=======}, och \texttt{>>>>>>>}.} |
268 | 268 | \ii{Utvecklaren måste välja vilken version som ska behållas eller kombinera dem manuellt.} |
269 | 269 | \end{itemize} |
270 | | - |
| 270 | + |
271 | 271 | \end{frame} |
272 | 272 |
|
273 | 273 |
|
|
276 | 276 |
|
277 | 277 | \begin{GobbleCode}[2pt]{6} |
278 | 278 | object Main { |
279 | | - def main(args: Array[String]): Unit = { |
280 | | - println("Starting calculation...") |
281 | | - println("Result: " + calculateSum(5, 10)) |
282 | | - } |
| 279 | + def main(args: Array[String]): Unit = { |
| 280 | + println("Starting calculation...") |
| 281 | + println("Result: " + calculateSum(5, 10)) |
| 282 | + } |
283 | 283 |
|
284 | | - def calculateSum(a: Int, b: Int): Int = { |
| 284 | + def calculateSum(a: Int, b: Int): Int = { |
285 | 285 | <<<<<<< HEAD |
286 | | - val sum = a + b |
287 | | - println("Sum calculated: " + sum) |
288 | | - sum |
| 286 | + val sum = a + b |
| 287 | + println("Sum calculated: " + sum) |
| 288 | + sum |
289 | 289 | ======= |
290 | | - val sum = a + b |
291 | | - println("Calculating sum for: " + a + " and " + b) |
292 | | - println("Sum is: " + sum) |
293 | | - sum * 2 // Doubles the result |
| 290 | + val sum = a + b |
| 291 | + println("Calculating sum for: " + a + " and " + b) |
| 292 | + println("Sum is: " + sum) |
| 293 | + sum * 2 // Doubles the result |
294 | 294 | >>>>>>> branch |
295 | | - } |
| 295 | + } |
296 | 296 | } |
297 | 297 | \end{GobbleCode} |
298 | | - |
| 298 | + |
299 | 299 | \end{frame} |
300 | 300 |
|
301 | 301 | \begin{frame} |
|
311 | 311 | \ii{Kallas ibland \emph{merge request}.} |
312 | 312 | \end{itemize} |
313 | 313 | \end{itemize} |
314 | | - |
| 314 | + |
315 | 315 | \end{frame} |
316 | 316 |
|
317 | 317 | \begin{frame} |
|
323 | 323 | \ii{Möjligt att ha flera remotes för olika kopior av projektet.} |
324 | 324 | \ii{Kolla med \texttt{git remote [-a, -v, -vv]}} |
325 | 325 | \end{itemize} |
326 | | - |
| 326 | + |
327 | 327 | \end{frame} |
328 | 328 |
|
329 | 329 | \begin{frame} |
330 | 330 | \frametitle{Påminnelse - Context} |
331 | 331 |
|
332 | 332 | \begin{center} |
333 | | - \includegraphics[height=.5\textheight]{figs/model-rm-reset.png} |
| 333 | + \includegraphics[height=.5\textheight]{figs/model-rm-reset.png} |
334 | 334 | \end{center} |
335 | | - |
| 335 | + |
336 | 336 | \end{frame} |
337 | 337 |
|
338 | 338 | \begin{frame} |
339 | 339 | \frametitle{Local vs remote: commit och push} |
340 | 340 |
|
341 | 341 | \begin{center} |
342 | | - \includegraphics[width=.9\textwidth]{figs/local_remote_commit_push.png} |
| 342 | + \includegraphics[width=.9\textwidth]{figs/local_remote_commit_push.png} |
343 | 343 | \end{center} |
344 | 344 |
|
345 | 345 | \end{frame} |
|
348 | 348 | \frametitle{Local vs remote: fetch och merge} |
349 | 349 |
|
350 | 350 | \begin{center} |
351 | | - \includegraphics[width=.9\textwidth]{figs/local_remote_fetch_merge.png} |
| 351 | + \includegraphics[width=.9\textwidth]{figs/local_remote_fetch_merge.png} |
352 | 352 | \end{center} |
353 | 353 |
|
354 | 354 | \end{frame} |
|
357 | 357 | \frametitle{Båda samtidigt!? -- push} |
358 | 358 |
|
359 | 359 | \begin{center} |
360 | | - \includegraphics[width=\textwidth]{figs/local_remote_push_conflict.png} |
| 360 | + \includegraphics[width=\textwidth]{figs/local_remote_push_conflict.png} |
361 | 361 | \end{center} |
362 | 362 |
|
363 | 363 | \end{frame} |
|
366 | 366 | \frametitle{Båda samtidigt!? -- fetch} |
367 | 367 |
|
368 | 368 | \begin{center} |
369 | | - \includegraphics[width=\textwidth]{figs/local_remote_fetch_conflict.png} |
| 369 | + \includegraphics[width=\textwidth]{figs/local_remote_fetch_conflict.png} |
370 | 370 | \end{center} |
371 | 371 |
|
372 | 372 | \end{frame} |
|
375 | 375 | \frametitle{Båda samtidigt!? -- merge efter fetch} |
376 | 376 |
|
377 | 377 | \begin{center} |
378 | | - \includegraphics[width=\textwidth]{figs/local_remote_fetch_merge_conflict.png} |
| 378 | + \includegraphics[width=\textwidth]{figs/local_remote_fetch_merge_conflict.png} |
379 | 379 | \end{center} |
380 | 380 |
|
381 | 381 | \end{frame} |
|
525 | 525 | \ii{Se avsnitt 1.1, 1.2, 1.3, 1.6 samt 1.7 av youtube-serien ``Git and GitHub for Poets''.} |
526 | 526 | \ii{Läs kapitel 1, 2 och 3.1--3.2 i Pro Git-boken (Chacon \& Straub).} |
527 | 527 | \ii{Länkar till materialet finns på kurshemsidan: |
528 | | - |
529 | | - \halfblankline |
530 | | - \url{https://cs.lth.se/dod/datorlaborationer/}} |
| 528 | + |
| 529 | + \halfblankline |
| 530 | + \url{https://cs.lth.se/dod/datorlaborationer/}} |
531 | 531 | \end{itemize} |
532 | 532 |
|
533 | 533 | \end{frame} |
0 commit comments