Keri sisuni

Git Versioonikontrolli Labor: Git & GitHub Praktiline Rakendamine

Navigeerimine

Kasuta paremal olevat sisukorda kiireks navigeerimiseks ↗️

Eesmärk: Praktiliselt harjutada kõiki Git'i peamisi funktsioone ja GitHub workflow'd


1. Git Alused ja Kohalik Kasutamine

1.1 Git Seadistamine ja Esimene Repository

Enne Git'i kasutamist tuleb see korralikult seadistada. Git vajab kasutaja identiteeti, et teada, kes muudatusi teeb.

Avage terminal ja kontrollige, kas Git on teie arvutis installeeritud:

Bash
git --version
```bash

Kui Git ei ole installeeritud, installige see oma operatsioonisüsteemi jaoks.

Seadistage oma kasutajainfo (kasutage oma tegelikke andmeid):

```bash
git config --global user.name "Teie Nimi"
```text

Seadistage email:

```bash
git config --global user.email "teie.email@example.com"
```text

Kontrollige, et seadistused on õigesti salvestatud:

```bash
git config --list
```text

Valikuliselt määrake tekstiredaktor:

```bash
git config --global core.editor "code --wait"
```text

Looge uus kaust oma projektile:

```bash
mkdir git-practice-lab
```text

Minge selle kausta sisse:

```bash
cd git-practice-lab
```bash

Algatage selles kaustas Git repository:

```bash
git init
```text

Kontrollige repository olukorda:

```bash
git status
```text

Looge README fail käsitsi või käsureaga:

```bash
echo "# Git Praktika Projekt" > README.md
```text

Lisage faili veel sisu:

```bash
echo "See on Git'i õppimise projekt." >> README.md
echo "" >> README.md
echo "Siin harjutame kõiki Git'i põhifunktsioone." >> README.md
```text

Kontrollige uuesti repository olukorda:

```bash
git status
```text

Lisage README fail staging area'sse:

```bash
git add README.md
```text

Kontrollige olukorda pärast add käsku:

```bash
git status
```text

Tehke oma esimene commit:

```bash
git commit -m "Algne commit: lisa README fail"
```text

Vaadake commit'ide ajalugu:

```bash
git log
```text

Vaadake ka lühemat versiooni:

```bash
git log --oneline
```bash

**Kontrollpunkt:** Kontrollige, et teil on `.git` kaust ja üks commit ajaloos.

### 1.2 Failide Haldamine ja Workflow

Git'i põhiline töövoog koosneb kolmest etapist: töökataloog → staging area → repository. Harjutame seda workflow'd.

Looge uus Python fail nimega `kalkulaator.py`:

```bash
touch kalkulaator.py
```text

Avage fail tekstiredaktoris ja sisestage järgmine kood:

```python
def liida(a, b):
    """Liida kaks arvu."""
    return a + b

def lahuta(a, b):
    """Lahuta teine arv esimesest.""" 
    return a - b

if __name__ == "__main__":
    print("Kalkulaator: 5 + 3 =", liida(5, 3))
    print("Kalkulaator: 10 - 4 =", lahuta(10, 4))
```text

Salvestage fail ja sulgege redaktor.

Kontrollige repository olukorda:

```bash
git status
```text

Lisage fail staging area'sse:

```bash
git add kalkulaator.py
```text

Kontrollige olukorda pärast add käsku:

```bash
git status
```text

Tehke commit:

```bash
git commit -m "Lisa põhiline kalkulaator"
```text

Nüüd laiendame kalkulaatorit. Avage `kalkulaator.py` uuesti ja lisage faili lõppu:

```python

def korruta(a, b):
    """Korruta kaks arvu."""
    return a * b

def jaga(a, b):
    """Jaga esimene arv teisega."""
    if b != 0:
        return a / b
    return 'Viga: nulliga jagamine!'
```text

Salvestage fail.

Vaadake, millised muudatused on tehtud:

```bash
git diff
```text

Kontrollige repository olukorda:

```bash
git status
```text

Lisage muudatused staging area'sse:

```bash
git add kalkulaator.py
```text

Tehke commit:

```bash
git commit -m "Lisa korrutamise ja jagamise funktsioonid"
```text

```mermaid
graph TD
    WD[Töökataloog<br/>Working Directory]
    SA[Staging Area<br/>Index]
    LR[Repository<br/>Local]

    WD -->|git add| SA
    SA -->|git commit| LR
    LR -->|git checkout| WD

    style WD fill:#e1f5fe
    style SA fill:#fff3e0
    style LR fill:#e8f5e8
```bash

### 1.3 Täiendavad Git Operatsioonid

Looge uus Python fail:

```bash
touch tervitus.py
```text

Avage fail ja sisestage:

```python
print("Tere, Git maailm!")
```text

Salvestage fail.

Looge `.gitignore` fail:

```bash
touch .gitignore
```text

Avage `.gitignore` ja sisestage:
*.pyc pycache/ .env *.log
Text Only
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
Salvestage fail.

Lisage mõlemad failid korraga:

```bash
git add .
```text

Kontrollige olukorda:

```bash
git status
```text

Tehke commit:

```bash
git commit -m "Lisa tervitusskript ja gitignore"
```text

Nüüd harjutame muudatuste tagasivõtmist. Avage `kalkulaator.py` ja lisage faili lõppu:

```python
print("Vigane kood siin")
```text

Salvestage fail.

Vaadake muudatust:

```bash
git diff
```text

Võtke muudatus tagasi:

```bash
git restore kalkulaator.py
```text

Kontrollige, et muudatus on tagasi võetud:

```bash
git status
```bash

**Kontrollpunkt:** Teil peaks olema 3-4 commit'i erinevate failidega.

---

## 2. Branching ja Merging

### 2.1 Harude Loomine ja Arendamine

Git'i harud võimaldavad parallel arendust. Loome kaks erinevat feature haru.

Vaadake praeguseid harusid:

```bash
git branch
```text

Looge uus haru ja lülituge sellele:

```bash
git checkout -b feature/string-utils
```bash

Looge uus Python fail:

```bash
touch string_tools.py
```text

Avage fail ja sisestage:

```python
def pöörda_tekst(tekst):
    """Pööra tekst tagurpidi."""
    return tekst[::-1]

def loe_sõnu(tekst):
    """Loe sõnade arv tekstis."""
    return len(tekst.split())

def suure_tähega(tekst):
    """Muuda iga sõna esimene täht suureks."""
    return ' '.join(sõna.capitalize() for sõna in tekst.split())

if __name__ == "__main__":
    test_tekst = "tere git maailm"
    print("Algne:", test_tekst)
    print("Tagurpidi:", pöörda_tekst(test_tekst))
    print("Sõnade arv:", loe_sõnu(test_tekst))
    print("Suurtähtedega:", suure_tähega(test_tekst))
```text

Salvestage fail.

Lisage fail ja tehke commit:

```bash
git add string_tools.py
git commit -m "Lisa string'ide töötlemise moodul"
```text

Looge teine feature haru:

```bash
git checkout -b feature/advanced-math
```bash

Looge uus Python fail:

```bash
touch täpsem_matemaatika.py
```text

Avage fail ja sisestage:

```python
import math

def astenda(alus, eksponent):
    """Tõsta arv astmesse."""
    return alus ** eksponent

def ruutjuur(arv):
    """Arvuta ruutjuur."""
    if arv < 0:
        return "Viga: negatiivne arv"
    return math.sqrt(arv)

def faktoriaal(n):
    """Arvuta faktoriaal."""
    if n < 0:
        return "Viga: negatiivne arv"
    if n <= 1:
        return 1
    return n * faktoriaal(n - 1)

if __name__ == "__main__":
    print("2^3 =", astenda(2, 3))
    print("√16 =", ruutjuur(16))
    print("5! =", faktoriaal(5))
```text

Salvestage fail.

Lisage fail ja tehke commit:

```bash
git add täpsem_matemaatika.py
git commit -m "Lisa täpsema matemaatika moodul"
```text

Vaadake harude ajalugu graafiliselt:

```bash
git log --oneline --graph --all
```text

```mermaid
graph TD
    A[README] --> B[Kalkulaator]
    B --> C[Tervitus + .gitignore]
    C --> D[String tools]
    D --> E[Advanced math]

    style A fill:#e1f5fe
    style E fill:#c8e6c9
```text

### 2.2 Harude Merge'imine

Minge main harule:

```bash
git checkout main
```text

Merge'ige string-utils haru:

```bash
git merge feature/string-utils
```text

Testage tulemust:

```bash
python3 string_tools.py
```text

Merge'ige advanced-math haru:

```bash
git merge feature/advanced-math
```yaml

Testage:

```bash
python3 täpsem_matemaatika.py
```text

Vaadake lõplikku ajalugu:

```bash
git log --oneline --graph
```text

### 2.3 Merge Konfliktide Lahendamine

Loome tahtlikult merge konflikti, et harjutada selle lahendamist.

Looge konflikt tekitav haru:

```bash
git checkout -b fix/kalkulaator-väljund
```text

Avage `kalkulaator.py` ja muutke print laused:

```python
if __name__ == "__main__":
    print("KALKULAATOR: 5 + 3 =", liida(5, 3))
    print("KALKULAATOR: 10 - 4 =", lahuta(10, 4))
```text

Salvestage fail.

Lisage muudatus ja tehke commit:

```bash
git add kalkulaator.py
git commit -m "Muuda väljund suurtähtedega"
```text

Minge main harule:

```bash
git checkout main
```text

Avage `kalkulaator.py` ja muutke print laused teisiti:

```python
if __name__ == "__main__":
    print("Arvutus: 5 + 3 =", liida(5, 3))
    print("Arvutus: 10 - 4 =", lahuta(10, 4))
```text

Salvestage fail.

Lisage muudatus ja tehke commit:

```bash
git add kalkulaator.py
git commit -m "Muuda väljund lühemaks"
```text

Proovige merge'ida - tekib konflikt:

```bash
git merge fix/kalkulaator-väljund
```text

Vaadake konflikti:

```bash
cat kalkulaator.py
```text

Avage `kalkulaator.py` tekstiredaktoris ja lahendage konflikt. Eemaldage konfliktimärgid (`<<<<<<<`, `=======`, `>>>>>>>`) ja valige sobiv versioon.

Näiteks jätke:

```python
if __name__ == "__main__":
    print("KALKULAATOR: 5 + 3 =", liida(5, 3))
    print("KALKULAATOR: 10 - 4 =", lahuta(10, 4))
```text

Salvestage fail.

Lisage lahendatud fail:

```bash
git add kalkulaator.py
```text

Lõpetage merge:

```bash
git commit
```text

Kustutage kasutatud haru:

```bash
git branch -d fix/kalkulaator-väljund
```text

**Kontrollpunkt:** Olete edukalt merge konflikti lahendanud.

---

## 3. GitHub ja Remote Repositories

### 3.1 SSH Seadistamine GitHub'iga

SSH võtmed on turvaline viis GitHub'iga autentimiseks.

Kontrollige olemasolevaid SSH võtmeid:

```bash
ls -la ~/.ssh/
```text

Looge uus SSH võti (kasutage oma email'i):

```bash
ssh-keygen -t ed25519 -C "teie.email@example.com"
```text

Vajutage Enter vaikimisi failikoha jaoks.

Vajutage Enter tühja parooliga (või sisestage parool).

Käivitage SSH agent:

```bash
eval "$(ssh-agent -s)"
```text

Lisage võti SSH agentisse:

```bash
ssh-add ~/.ssh/id_ed25519
```text

Kopeerige avalik võti:

```bash
cat ~/.ssh/id_ed25519.pub
```text

**GitHub'is:**
1. Minge Settings → SSH and GPG keys
2. Klikkige "New SSH key"
3. Kleepige avalik võti
4. Salvestage

Testege SSH ühendust:

```bash
ssh -T git@github.com
```bash

### 3.2 Remote Repository ja Koostöö

**GitHub'is looge uus repository:**
1. Klikkige "New repository"
2. Nimi: `git-practice-lab`
3. Public repository
4. ÄRA lisage README (teil on juba olemas)
5. Create repository

Ühendage kohalik repo GitHub'iga:

```bash
git remote add origin git@github.com:TEIE-KASUTAJANIMI/git-practice-lab.git
```text

Kontrollige remote'e:

```bash
git remote -v
```text

Push'ige esimest korda:

```bash
git push -u origin main
```text

```mermaid
graph LR
    LR[Lokaalne<br/>Repository]
    RR[GitHub<br/>Repository]

    LR -->|git push| RR
    RR -->|git pull| LR
    RR -->|git clone| LR2[Teine kohalik<br/>Repository]

    style LR fill:#e8f5e8
    style RR fill:#fff3e0
    style LR2 fill:#e1f5fe
```text

### 3.3 Pull Requests ja Koostöö

Looge uus feature dokumentatsiooni jaoks:

```bash
git checkout -b feature/dokumentatsioon
```text

Looge uus fail:

```bash
touch KASUTAMINE.md
```text

Avage fail ja sisestage:

```markdown
# Git Praktika Projekti Kasutamine

## Failide kirjeldus

- `kalkulaator.py` - Põhilised matemaatilised operatsioonid
- `täpsem_matemaatika.py` - Keerukamad matemaatikafunktsioonid  
- `string_tools.py` - Tekstide töötlemise tööriistad
- `tervitus.py` - Lihtne tervitusprogramm

## Programmide käivitamine

```bash
python3 kalkulaator.py
python3 täpsem_matemaatika.py
python3 string_tools.py
python3 tervitus.py
```text

## Arendamisjuhised

1. Tehke uus feature haru
2. Arendage funktsioon
3. Testite koodi
4. Tehke commit
5. Looge Pull Request

## Testimine

Kõik programmid peaks töötama ilma vigadeta.

Salvestage fail.

Lisage fail ja tehke commit:

bash git add KASUTAMINE.md git commit -m "Lisa kasutamise dokumentatsioon"text

Push'ige haru:

bash git push origin feature/dokumentatsioontext

GitHub'is looge Pull Request: 1. Minge oma repository lehele 2. Klikkige "Compare & pull request" 3. Kirjutage hea pealkiri ja kirjeldus 4. Create pull request 5. Review ja merge pull request 6. Delete branch

Kohalikult uuendage ja puhastage:

bash git checkout main git pull origin main git branch -d feature/dokumentatsioon git remote prune originbash

Kontrollpunkt: Olete edukalt teinud Pull Request workflow.


4. Täpsemad Git Funktsioonid

4.1 Git Stash - Ajutine Salvestamine

Alustage tööd. Avage kalkulaator.py ja lisage lõppu:

```python

Pooleli olev funktsioon

TODO: lõpeta see

```text

Salvestage fail.

Aga vajate kiirestina teist tööd teha:

bash git stashtext

Kontrollige olukorda:

bash git statustext

Tehke kiire parandus. Avage README.md ja lisage lõppu:

```markdown

Viimati uuendatud

$(date) ```text

Salvestage fail.

Lisage ja commit'ige:

bash git add README.md git commit -m "Lisa kuupäev README'sse"text

Taastage stash'itud töö:

bash git stash poptext

Lõpetage töö. Avage kalkulaator.py ja muutke kommentaar:

```python

Pooleli olev funktsioon - nüüd valmis

print("Uus funktsioon lisatud!") ```text

Salvestage fail.

Lisage ja commit'ige:

bash git add kalkulaator.py git commit -m "Lisa pooleli olnud funktsioon"bash

4.2 Git Rebase - Ajaloo Puhastamine

Looge mitu väikest commit'i. Looge fail:

bash touch VERSIOON.mdtext

Avage fail ja sisestage:

```markdown

Versioon 1.0

```text

Salvestage, lisage ja commit'ige:

bash git add VERSIOON.md git commit -m "Lisa versiooni fail"text

Avage VERSIOON.md uuesti ja lisage:

markdown - Kalkulaatortext

Salvestage ja commit'ige:

bash git add VERSIOON.md git commit -m "Lisa kalkulaator versiooni"text

Lisage veel:

markdown - String toolstext

Commit'ige:

bash git add VERSIOON.md git commit -m "Lisa string tools versiooni"text

Lisage veel:

markdown - Täpsem matemaatikatext

Commit'ige:

bash git add VERSIOON.md git commit -m "Lisa matemaatika versiooni"text

Ühendage viimased 4 commit'i üheks:

bash git rebase -i HEAD~4bash

Editor avaneb. Muutke viimased 3 "pick" → "squash" (või "s"). Salvestage ja sulgege. Uues editoris redigeerige commit sõnumit.

Kontrollpunkt: Oskate kasutada Git'i täpsemaid funktsioone.


5. Projekti Lõpetamine ja Hindamine

5.1 Lõplik Kontroll

Kontrollige projekti struktuuri:

bash ls -labash

Vaadake Git ajalugu:

bash git log --oneline --graph -10text

Kontrollige remote'e:

bash git remote -vtext

Kontrollige harusid:

bash git branch -atext

Vaadake viimased commit'id:

bash git log --oneline -5bash

Kontrollige Git seadistusi:

bash git config --list | grep userbash

5.2 Git Aliases - Boonusülesanne

Seadistage kasulikud lühendid:

bash git config --global alias.st statustext

bash git config --global alias.co checkouttext

bash git config --global alias.br branchtext

bash git config --global alias.ci committext

bash git config --global alias.lg 'log --oneline --graph --all'text

Testage aliaseid:

bash git st git lgbash


Esitamine ja Hindamine

Esitamisnõuded: - GitHub repository link: https://github.com/TEIE-KASUTAJANIMI/git-practice-lab - Repository peab sisaldama kõiki harjutuste faile - Nähtav clean Git history - Vähemalt üks Pull Request tehtud ja merge'itud - README.md peab sisaldama projekti kirjeldust

Hindamiskriteeriumid:

Kriteerium Punktid Kirjeldus
Repository seadistamine 15% Õige Git config, SSH seadistus
Põhilised Git käsud 25% add, commit, status, log
Branching ja merging 25% Harude loomine, merge'imine, konfliktide lahendamine
GitHub workflow 20% Remote repo, pull requests
Täpsemad funktsioonid 10% stash, rebase vms
Koodi kvaliteet 5% Clean history, head commit sõnumid

Õnnitleme! Olete läbinud Git'i põhilise praktika.