Wprowadzenie do Git

1. Czym jest Git?

Git to rozproszony system kontroli wersji (Version Control System - VCS) stworzony przez Linusa Torvaldsa w 2005 roku. Pozwala na śledzenie zmian w kodzie źródłowym i współpracę wielu programistów nad jednym projektem.

Kluczowe cechy Git:

  • Rozproszony – każdy developer ma pełną kopię repozytorium
  • Szybki – większość operacji wykonywana lokalnie
  • Bezpieczny – każdy commit jest checksumowany (SHA-1)
  • Rozgałęzienia (branches) – łatwe tworzenie i łączenie gałęzi
  • Open Source – darmowy i otwarty kod źródłowy
  • Popularne – standard w branży IT

2. Po co używać systemu kontroli wersji?

2.1. Problemy bez VCS

Bez systemu kontroli wersji programiści napotykają problemy:

  • ❌ Trudno śledzić, kto i kiedy wprowadził zmiany
  • ❌ Brak historii zmian – niemożność cofnięcia się do poprzedniej wersji
  • ❌ Konflikty przy współpracy wielu osób
  • ❌ Ryzyko utraty danych
  • ❌ Problemy z przechowywaniem kopii zapasowych

Typowy projekt bez VCS:

projekt_v1/
projekt_v2/
projekt_v2_final/
projekt_v2_final_poprawki/
projekt_v2_final_naprawde_ostateczny/
projekt_v2_final_do_klienta/

😱 Chaos!

2.2. Zalety Git

  • Historia zmian – możesz cofnąć się do dowolnego momentu
  • Współpraca – wiele osób może pracować jednocześnie
  • Branches – eksperymentuj bez ryzyka zepsucia głównej wersji
  • Backup – kod przechowywany w chmurze (GitHub, GitLab)
  • Code review – przeglądaj zmiany przed ich zaakceptowaniem
  • Śledzenie błędów – wiesz, kto i kiedy wprowadził bug

3. Podstawowe koncepcje Git

3.1. Repository (Repozytorium)

Repozytorium to katalog z projektem, w którym Git śledzi wszystkie zmiany.

moj-projekt/
├── .git/           # Tutaj Git przechowuje historię
├── src/
├── README.md
└── package.json

Katalog .git/ zawiera całą historię projektu, commity, branche itp.

3.2. Commit

Commit to migawka (snapshot) projektu w danym momencie. Każdy commit ma:

  • Unikalny identyfikator (hash SHA-1)
  • Autora
  • Datę
  • Wiadomość opisującą zmiany
commit abc123def456...
Author: Jan Kowalski <jan@example.com>
Date:   Mon Dec 4 10:30:00 2024 +0100

    Dodanie funkcji logowania

3.3. Branch (Gałąź)

Branch to oddzielna linia rozwoju projektu. Domyślnie Git tworzy branch main (wcześniej master).

main:     A -- B -- C -- D
                    \
feature:             E -- F

Możesz tworzyć nowe branche, żeby pracować nad nową funkcjonalnością bez wpływu na główną wersję.

3.4. Merge (Scalanie)

Merge to proces łączenia dwóch branchy w jeden.

main:     A -- B -- C -------- M
                    \        /
feature:             D -- E --

Commit M to merge commit, który łączy zmiany z obu branchy.

3.5. Remote (Zdalne repozytorium)

Remote to repozytorium przechowywane na serwerze (np. GitHub, GitLab, Bitbucket).

  • origin – domyślna nazwa zdalnego repozytorium
  • push – wysyłanie zmian do remote
  • pull – pobieranie zmian z remote

4. Git vs GitHub

Git GitHub
System kontroli wersji Platforma hostingowa dla repozytoriów Git
Narzędzie CLI (wiersz poleceń) Interfejs webowy + funkcje społecznościowe
Działa lokalnie na komputerze Działa w chmurze
Open source (darmowy) Freemium (darmowy + płatne opcje)
Stworzony przez Linusa Torvaldsa Należy do Microsoft

Analogia: * Git = silnik samochodu * GitHub = parking + stacja benzynowa + warsztat

Alternatywy GitHub: * GitLab * Bitbucket * Gitea (self-hosted)


5. Workflow Git (Cykl pracy)

5.1. Podstawowy workflow

1. Edytujesz pliki w projekcie
   ↓
2. git add - dodajesz zmiany do "poczekalni" (staging area)
   ↓
3. git commit - zapisujesz migawkę (commit) z opisem
   ↓
4. git push - wysyłasz zmiany na serwer (GitHub)

5.2. Trzy stany plików w Git

Working Directory → Staging Area → Repository
    (edycja)         (git add)      (git commit)
Stan Opis Komenda
Working Directory Pliki, nad którymi pracujesz -
Staging Area Zmiany gotowe do commita git add
Repository Historia commitów git commit

6. Kto używa Git?

Git jest standardem w branży IT i używany przez:

  • Deweloperów – do codziennej pracy nad kodem
  • Zespoły – do współpracy nad projektami
  • Open Source – Linux, React, Vue, Bootstrap, Python
  • Firmy – Google, Microsoft, Facebook, Amazon
  • Studentów – do nauki i projektów studenckich

Przykłady projektów na Git:

  • Linux Kernel (pierwotny powód stworzenia Git!)
  • React, Vue, Angular
  • Python, Node.js
  • Visual Studio Code
  • Kubernetes, Docker

7. Podstawowe komendy (zapowiedź)

W kolejnych lekcjach poznasz komendy Git. Oto najpopularniejsze:

Komenda Opis
git init Inicjalizuje nowe repozytorium
git clone <url> Klonuje zdalne repozytorium
git status Pokazuje status plików
git add <plik> Dodaje plik do staging area
git commit -m "wiadomość" Tworzy commit
git push Wysyła zmiany na serwer
git pull Pobiera zmiany z serwera
git branch Zarządzanie gałęziami
git merge Scala gałęzie
git log Wyświetla historię commitów

8. Przykład: Dlaczego Git jest ważny?

Scenariusz bez Git:

Programista 1: "Właśnie skończyłem funkcję X"
Programista 2: "O nie! Ja też pracowałem nad tym plikiem!"
Programista 1: "Musimy ręcznie połączyć nasze zmiany..."

😰 Godziny ręcznego łączenia kodu, ryzyko błędów.

Scenariusz z Git:

😊 Git automatycznie scala zmiany lub wskazuje konflikty do ręcznego rozwiązania.


9. Git w liczbach

  • 2005 – rok powstania Git
  • 95%+ – procent profesjonalnych deweloperów używających Git
  • 100M+ – użytkowników GitHub
  • 330M+ – repozytoriów na GitHub
  • #1 – najbardziej popularny VCS na świecie

10. Historia i alternatywy

Przed Git istniały inne VCS:

System Typ Status
RCS (1982) Lokalny Przestarzały
CVS (1990) Scentralizowany Przestarzały
SVN (2000) Scentralizowany Używany w starszych projektach
Mercurial Rozproszony Niszowy
Git (2005) Rozproszony ⭐ Standard

Dlaczego Git wygrał?

  • Szybkość
  • Łatwość rozgałęziania
  • Wsparcie społeczności
  • GitHub (popularyzacja)
  • Open source

11. Scentralizowany vs Rozproszony VCS

Scentralizowany (np. SVN):

         Serwer
         /  |  \
        /   |   \
    Dev1  Dev2  Dev3
  • ❌ Jeden punkt awarii (serwer)
  • ❌ Wolniejsze operacje (wymagają połączenia z serwerem)
  • ❌ Brak pracy offline

Rozproszony (Git):

    Dev1 ←→ Serwer ←→ Dev2
     ↕               ↕
    Dev3 ←--------→ Dev4
  • ✅ Każdy ma pełną kopię
  • ✅ Szybkie operacje lokalne
  • ✅ Praca offline
  • ✅ Brak pojedynczego punktu awarii

12. Terminologia (Słownik)

Termin Znaczenie
Repository Repozytorium - katalog z projektem śledzonym przez Git
Commit Migawka projektu w danym momencie
Branch Gałąź - oddzielna linia rozwoju
Merge Scalanie dwóch gałęzi
Clone Kopia zdalnego repozytorium
Fork Kopia repozytorium na koncie użytkownika (GitHub)
Pull Request (PR) Prośba o włączenie zmian do głównej gałęzi
Remote Zdalne repozytorium (np. na GitHub)
Origin Domyślna nazwa zdalnego repozytorium
HEAD Wskaźnik na aktualny commit/branch
Staging Area Poczekalnia dla plików przed commitem
Working Directory Katalog roboczy z plikami projektu

13. Wymagania przed rozpoczęciem

Aby korzystać z Git, potrzebujesz:

  1. Komputer (Windows, macOS, Linux)
  2. Zainstalowany Git (następna lekcja!)
  3. Edytor kodu (VS Code, Sublime, Vim)
  4. Konto GitHub (opcjonalnie, ale zalecane)
  5. Podstawowa znajomość terminala/wiersza poleceń

14. Podsumowanie

Git to niezbędne narzędzie dla każdego programisty:

  • Kontrola wersji – śledź historię zmian
  • Współpraca – pracuj w zespole bez konfliktów
  • Bezpieczeństwo – zawsze możesz cofnąć zmiany
  • Profesjonalizm – standard w branży IT

Czego się nauczysz w tym kursie:

  • Instalacja i konfiguracja Git
  • Podstawowe komendy (add, commit, push, pull)
  • Praca z gałęziami (branches)
  • Scalanie i rozwiązywanie konfliktów
  • Praca z GitHub
  • Zaawansowane techniki (rebase, stash, cherry-pick)
  • Najlepsze praktyki i workflow

Co dalej:

  • Lekcja 2 – Instalacja i konfiguracja Git
  • Lekcja 3 – Pierwsze repozytorium i podstawowe komendy

Gotowy na naukę Git? Zaczynamy! 🚀