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 repozytoriumpush– wysyłanie zmian do remotepull– 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:
- Komputer (Windows, macOS, Linux)
- Zainstalowany Git (następna lekcja!)
- Edytor kodu (VS Code, Sublime, Vim)
- Konto GitHub (opcjonalnie, ale zalecane)
- 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! 🚀