# Instrukcja pracy z Git i Gitea

Ten dokument zawiera kompletną instrukcję pracy z systemem kontroli wersji Git oraz platformą Gitea dla studentów seminarium. Instrukcja jest zorganizowana od podstaw do bardziej zaawansowanych operacji.

---

## Spis treści

1. [Co to jest Git?](#1-co-to-jest-git)
2. [Instalacja Git](#2-instalacja-git)
3. [Pierwsze logowanie do Gitea](#3-pierwsze-logowanie-do-gitea)
4. [Konfiguracja Git na komputerze](#4-konfiguracja-git-na-komputerze)
5. [Pierwsze pobieranie repozytorium](#5-pierwsze-pobieranie-repozytorium)
6. [Codzienna praca z Git](#6-codzienna-praca-z-git)
7. [Sprawdzanie statusu pracy](#7-sprawdzanie-statusu-pracy)
8. [Rozwiązywanie problemów](#8-rozwiązywanie-problemów)
9. [Zaawansowane operacje](#9-zaawansowane-operacje)
10. [Dobre praktyki](#10-dobre-praktyki)

---

## 1. Co to jest Git?

Git to narzędzie do **kontroli wersji** plików, które umożliwia:

- Śledzenie historii zmian w plikach
- Współpracę wielu osób nad tym samym projektem
- Przywracanie poprzednich wersji plików
- Równoległą pracę nad różnymi wersjami projektu (gałęzie)

**Gitea** to platforma webowa (podobna do GitHub), która pozwala na wygodne przeglądanie repozytoriów przez przeglądarkę internetową.

---

## 2. Instalacja Git

Przed rozpoczęciem pracy musisz zainstalować Git na swoim komputerze.

### Windows

1. Pobierz instalator ze strony: **https://git-scm.com/download/windows**
2. Uruchom pobrany plik i postępuj zgodnie z instrukcjami instalatora
3. Podczas instalacji pozostaw domyślne ustawienia (klikaj „Next")
4. Po instalacji otwórz **Git Bash** lub **PowerShell** i sprawdź instalację:

```bash
git --version
```

Alternatywnie możesz zainstalować Git przez winget (w PowerShell):

```bash
winget install --id Git.Git -e --source winget
```

### macOS

**Opcja 1 – Xcode Command Line Tools** (najprostsza):

```bash
xcode-select --install
```

**Opcja 2 – Homebrew** (zalecana dla aktualnej wersji):

```bash
brew install git
```

Po instalacji sprawdź wersję:

```bash
git --version
```

### Linux (Ubuntu/Debian)

```bash
sudo apt-get update
sudo apt-get install git
```

### Linux (Fedora)

```bash
sudo dnf install git
```

Po instalacji sprawdź wersję:

```bash
git --version
```

---

## 3. Pierwsze logowanie do Gitea

1. Otwórz przeglądarkę internetową i przejdź na adres:  
   **http://150.254.88.90:3000**

2. Zaloguj się używając:
   - **Login**: Twój adres uczelniany (np. `pawkle1@st.amu.edu.pl`)
   - **Hasło początkowe**: `HakerzyZnają` (zmień je przy pierwszym logowaniu!)

3. Po zalogowaniu przejdź do **Ustawień profilu** i uzupełnij:
   - Imię i nazwisko
   - Avatar (opcjonalnie)

1. Kliknij **Odkrywaj**, aby zobaczyć dostępne repozytoria.
	1. Otwórz repozytorium.
	2. Możesz edytować i przeglądać pliki, README, literaturę lub materiały przez stronę www.

---

## 4. Konfiguracja Git na komputerze

Po instalacji Git musisz skonfigurować swoje dane. Otwórz terminal (Git Bash na Windows) i wykonaj:

```bash
git config --global user.name "Twoje Imię i Nazwisko"  # zapisane w Gitea
git config --global user.email "twoj.email@st.amu.edu.pl"
```

Te dane będą widoczne przy każdej wprowadzonej przez Ciebie zmianie. Jeśli chcesz używać inne repozytoria, np. na GitHub od Microsoftu pomiń `--global` aby ustawienia były lokalne, tylko do danego repozytorium.

Sprawdź konfigurację:

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

---

## 5. Pierwsze pobieranie repozytorium

### Przez terminal

1. Otwórz terminal (na windowsie PowerShell lub CMD) i przejdź do katalogu, w którym chcesz mieć repozytorium:

```bash
cd /ścieżka/do/katalogu
```

2. Sklonuj repozytorium:

```bash
git clone http://150.254.88.90:3000/Seminaria-KLEKA/Seminarium-Psychologia-2027.git
# jeśli pojawi sie info o braku uwierzytelnienia - zaloguj sie do repozytorium w przeglądarce
# jesli nie masz programu git ściągnij go ze strony https://git-scm.com/install/
```

3. Jeśli pojawi się prośba o uwierzytelnienie – podaj login i hasło z Gitea.

4. Wejdź do sklonowanego katalogu:

```bash
cd Seminarium-Psychologia-2027
```

### Przez aplikację graficzną

Możesz też używać aplikacji graficznych takich jak:
- **GitHub Desktop** (https://desktop.github.com)
- **Sourcetree** (https://www.sourcetreeapp.com)

---

## 6. Codzienna praca z Git

### Model 1: Praca na wspólnej gałęzi `main`

Ten model jest odpowiedni, gdy wszyscy pracują nad wspólnymi plikami. Tak np. jest w naszym seminarium na początku. W miarę rozrostu projektów możemy przenosić się na indywidualne gałęzie lub wręcze prywatne repozytoria.

#### Krok 1: Pobierz najnowsze zmiany (ZAWSZE na początku pracy!)

```bash
git pull
```

#### Krok 2: Wprowadź zmiany

Edytuj lub dodaj pliki w katalogu repozytorium (np. notatki w `.md`, skrypty R, dane).

#### Krok 3: Dodaj pliki do zapisu

Dodaj konkretny plik:

```bash
git add NAZWA-PLIKU.md
```

Lub dodaj wszystkie zmienione pliki:

```bash
git add .  # dodaje wszystkie pliki na listę do wysyłki
```

#### Krok 4: Zatwierdź zmiany z opisem

```bash
git commit -m "Opis zmiany, np. Dodano pomysł na badanie X"
```

#### Krok 5: Wyślij zmiany na serwer

```bash
git push origin main   # wysyła pliki do repozytorium na główną gałąź
```

#### Krok 6: Sprawdź na stronie Gitea

Zaloguj się do Gitea i sprawdź w zakładce **Code**, czy Twoje pliki się pojawiły.

---

### Model 2: Praca na własnej gałęzi

Ten model jest odpowiedni, gdy każdy  pracuje nad własnymi danymi/plikami niezależnie od innych.

#### Tworzenie własnej gałęzi (jednorazowo)

```bash
git checkout main
git pull
git checkout -b nazwa-twojej-galezi
```

Na przykład: `dane-katarzyna`, `rozdzial-3`, `oliwia-wniosek`

#### Codzienna praca na swojej gałęzi

```bash
# Upewnij się, że jesteś na swojej gałęzi
git checkout nazwa-twojej-galezi

# Wprowadź zmiany w plikach...

# Dodaj i zatwierdź zmiany
git add .
git commit -m "Aktualizacja danych"

# Wyślij na serwer
git push origin nazwa-twojej-galezi
```

#### Przełączanie między gałęziami

```bash
git checkout main           # przejście na gałąź główną
git checkout dane-katarzyna # przejście na gałąź Katarzyny
```
### Lista wszystkich gałęzi

```bash
git branch -a
```

---

## 7. Sprawdzanie statusu pracy

### Sprawdź status zmian

Pokazuje zmodyfikowane pliki oraz pliki oczekujące na zatwierdzenie:

```bash
git status
```

### Historia commitów

Wyświetla listę ostatnich zmian:

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

### Sprawdź aktualną gałąź

```bash
git branch
```

Gwiazdka (\*) oznacza gałąź, na której aktualnie pracujesz.

### Sprawdź zdalne repozytorium

```bash
git remote -v
```

---

## 8. Rozwiązywanie problemów

### Merge conflict (konflikt scalania)

Pojawia się, gdy dwie osoby edytowały ten sam fragment pliku.

**Rozwiązanie:**
1. Git oznaczy konfliktowe miejsca w pliku znacznikami `<<<<<<<`, `=======`, `>>>>>>>`
2. Otwórz plik i ręcznie wybierz właściwą wersję
3. Usuń znaczniki konfliktu
4. Zapisz plik i wykonaj:

```bash
git add nazwa-pliku
git commit -m "Rozwiązano konflikt"
git push
```

### Brak zmian po `git push`

Sprawdź:
- Czy jesteś w odpowiednim katalogu repozytorium?
- Czy jesteś na właściwej gałęzi? (`git branch`)
- Czy wykonałeś `git add` i `git commit` przed `git push`?

### Błąd uwierzytelnienia

Zaloguj się najpierw do Gitea przez przeglądarkę, a następnie spróbuj ponownie.

---

## 9. Zaawansowane operacje

### Ignorowanie plików (`.gitignore`)

Aby Git ignorował określone pliki, utwórz plik `.gitignore` w głównym katalogu repozytorium:

```
# Pliki tymczasowe R
.Rhistory
.RData
.Rproj.user/

# Katalog na pliki lokalne
_lokalnie/
```

Od tej pory GIt nie będzie zwracał uwagi co się dzieje w katalogu `_lokalnie`
### Usunięcie pliku/katalogu z repozytorium (zachowując lokalnie)

```bash
git rm -r --cached nazwa-katalogu
git commit -m "Usunięto katalog z repozytorium"
git push
```

### Usunięcie katalogu z gałęzi main

Jeśli przez pomyłkę dodano prywatny katalog do `main`:

```bash
git checkout main
git rm -r NazwaKatalogu/
git commit -m "Usunięto prywatny katalog"
git push
```

### Zmiana adresu zdalnego repozytorium

```bash
git remote set-url origin http://150.254.88.90:3000/Seminaria-KLEKA/NazwaRepo.git
```

### Nadpisanie zdalnej wersji lokalną (OSTROŻNIE!)

**Uwaga:** Ta operacja nadpisuje historię na serwerze!

```bash
git push origin main --force
```

---

## 11. Dobre praktyki

1. **Zawsze wykonuj `git pull` przed rozpoczęciem pracy** – unikniesz konfliktów.

2. **Używaj opisowych wiadomości w commitach** – np. „Dodano analizę rzetelności skali X" zamiast „update".

3. **Nie wysyłaj plików tymczasowych** – dodaj do `.gitignore`:
   - `.Rhistory`
   - `.RData`
   - `.Rproj.user/`

4. **Nie wysyłaj dużych plików binarnych** – Git nie jest optymalny dla dużych plików (np. baz danych, filmów).

5. **Regularnie zapisuj postępy** – małe, częste commity są lepsze niż jeden duży.

6. **Pracując na własnej gałęzi** – nie dodawaj katalogów innych.

7. **W README zapisuj postępy i refleksje** – to ułatwia orientację w projekcie.

---

## Szybka ściągawka

| Polecenie | Opis |
|-----------|------|
| `git clone URL` | Pobierz repozytorium |
| `git pull` | Pobierz najnowsze zmiany |
| `git status` | Sprawdź status zmian |
| `git add .` | Dodaj wszystkie pliki |
| `git commit -m "opis"` | Zatwierdź zmiany |
| `git push origin main` | Wyślij na serwer |
| `git branch` | Pokaż gałęzie |
| `git checkout nazwa` | Przełącz gałąź |
| `git checkout -b nazwa` | Utwórz nową gałąź |
| `git log --oneline` | Historia commitów |

---

**Wskazówka:**  
Jeśli zapomnisz hasła lub napotkasz problem techniczny, skontaktuj się z prowadzącym seminarium.
