git clone - Pobieranie repozytoriów z GitHuba

1/30
Co to jest GitHub? GitHub to platforma internetowa, która przechowuje projekty programistów z całego świata. Możesz na niej znaleźć miliony darmowych projektów - od prostych skryptów po skomplikowane aplikacje. Aby pracować z tymi projektami na swoim komputerze, musisz je najpierw "pobrać" - właśnie do tego służy komenda git clone.
Slide 1

GitHub pełni rolę centralnego repozytorium dla milionów projektów open source, ale sam interfejs webowy nie pozwala na wygodną edycję kodu ani śledzenie zmian w czasie rzeczywistym. Komenda git clone rozwiązuje ten problem, przenosząc całe repozytorium wraz z jego metadanymi na lokalną maszynę, gdzie można w pełni wykorzystać możliwości Gita.

Warto pamiętać, że git clone to nie jest zwykłe kopiowanie plików przez FTP czy HTTP. Mechanizm klonowania buduje pełne odwzorowanie struktury obiektowej Gita, łącznie z drzewem commitów, konfiguracją zdalnego repozytorium oraz wszystkimi referencjami do gałęzi. Dzięki temu od razu po klonowaniu jesteś gotowy do pracy w trybie offline.

Co to jest git clone?

2/30
Wyobraź sobie sytuację: Znajdujesz ciekawy projekt na GitHub i chcesz go mieć u siebie. Komenda git clone działa jak "pobierz i skonfiguruj" - nie tylko kopiuje pliki, ale także tworzy specjalny folder z ukrytymi informacjami (.git), który śledzi wszystkie zmiany. Dzięki temu możesz później wysyłać swoje zmiany z powrotem na serwer lub pobierać aktualizacje.
Slide 2

Kiedy wydajesz polecenie git clone, Git łączy się ze zdalnym serwerem protokołem HTTPS lub SSH i negocjuje listę obiektów do przesłania. Proces przebiega w kilku fazach: najpierw serwer wylicza wszystkie potrzebne obiekty, następnie kompresuje je w paczki, a na koniec klient odbiera dane i rozpakowuje je do lokalnego katalogu roboczego.

Po zakończeniu transferu Git automatycznie ustawia zdalne repozytorium jako origin i tworzy lokalną gałąź główną śledzącą jej zdalny odpowiednik. Co istotne, katalog .git zawiera pełną historię projektu, dzięki czemu możesz przeglądać starsze wersje plików, porównywać zmiany i cofać się do poprzednich stanów bez dostępu do internetu.

Clone vs Fork vs ZIP - Która metoda?

3/30
Trzy sposoby na pobranie projektu z GitHuba:
Clone - jak zrobienie pełnej kopii dokumentu na swój dysk. Masz wszystko, możesz edytować, ale zmiany idą tylko do ciebie.
Fork - jak zrobienie własnej wersji dokumentu we wspólnym folderze. Tworzysz swoją wersję na serwerze GitHub, którą możesz później proponować jako zmiany do oryginału.
Download ZIP - jak pobranie jednego pliku. Szybkie, ale bez historii i bez możliwości śledzenia zmian.
Slide 3

Wybór między clone, fork a ZIP zależy od celu, jaki chcesz osiągnąć. Clone stosujesz, gdy potrzebujesz lokalnej kopii do własnych eksperymentów lub audytu kodu, bez zamiaru wpłacania zmian z powrotem. Fork wybierasz, gdy planujesz włączyć się w rozwój projektu i chcesz później zgłosić pull request z Twoimi modyfikacjami.

Pobieranie ZIP jest kuszące co do szybkości, ale pozbawia Cię całego kontekstu zmian i możliwości łatwego aktualizowania kodu. W praktyce zawodowej programiści korzystają głównie z clone do własnych projektów i z forka, a następnie clone, do współpracy przy open source. ZIP zostawiamy na sytuacje, gdy potrzebujemy jedynie rzucić okiem na kod bez instalowania Gita.

Gdzie znaleźć URL do klonowania?

4/30
Jak znaleźć adres projektu: Wejdź na stronę dowolnego repozytorium na GitHub. Zauważysz zielony przycisk "Code" - to brama do pobierania projektu. Po kliknięciu rozwinie się menu z trzema metodami połączenia: HTTPS (najprostsza, dla początkujących), SSH (dla zaawansowanych, wymaga kluczy) i GitHub CLI (dla fanów terminala). Wystarczy kliknąć ikonę schowka obok adresu.
Slide 4

Przycisk Code na GitHubie to Twoja brama do różnych protokołów komunikacji. Zakładka HTTPS pokazuje URL zaczynający się od https://github.com/ i jest najbardziej uniwersalna, bo działa przez firewall i nie wymaga wstępnej konfiguracji. SSH wymaga natomiast pary kluczy kryptograficznych, ale po jednorazowym ustawieniu pozwala na autoryzację bez podawania hasła przy każdej operacji.

URL w formacie HTTPS kończy się rozszerzeniem .git, co jest konwencją określającą adres repozytorium, a nie strony WWW. Gdy klikniesz ikonkę schowka, adres ładuje w Twoim buforze i możesz go wkleić bezpośrednio do terminala. Warto zapamiętać, że niektóre organizacje blokują port SSH, więc HTTPS pozostaje najbezpieczniejszym wyborem w środowiskach korporacyjnych.

Podstawowa składnia git clone

5/30
Składnia to przepis: Tak jak w przepisie kulinarnym masz "weź 2 jajka, mąkę, cukier", tak w Git masz "git clone [adres projektu]". Nawiasy [] oznaczają miejsce, gdzie wstawiasz własną wartość - w tym przypadku skopiowany wcześniej adres repozytorium. Git automatycznie utworzy folder z nazwą projektu i wgra do niego wszystkie pliki.
# Podstawowa składnia
$ git clone URL_REPOZYTORIUM
Slide 5

Podstawowe wywołanie git clone bez żadnych opcji zakłada, że chcesz pobrać wszystkie gałęzie i pełną historię projektu. Git tworzy w bieżącym katalogu folder o nazwie tożsamej z nazwą repozytorium, inicjalizuje w nim puste repozytorium, a następnie ściąga wszystkie obiekty wskazane przez zdalny serwer i przełącza się na domyślną gałąź.

Po zakończeniu klonowania w środku folderu znajdziesz nie tylko pliki projektu, ale również kompletny katalog .git ze wszystkimi referencjami. Git automatycznie rejestruje zdalny adres jako origin, co umożliwia późniejsze używanie komend git pull i git push bez ręcznego wskazywania URL za każdym razem. To właśnie czyni clone narzędziem szytym na miarę do długoterminowej pracy z kodem.

Praktyczny przykład: Klonowanie repo autocopy

6/30
Zobaczmy to w akcji! Poniższy przykład pokazuje prawdziwy proces klonowania. Git najpierw "liczy" ile jest plików do pobrania, potem "kompresuje" je (żeby szybciej ściągnąć), a na końcu "odbiera" na twój dysk. Komunikat "Cloning into 'autocopy'..." oznacza, że Git tworzy folder o nazwie "autocopy" i wgrywa do niego wszystkie pliki projektu.
# Otwórz terminal i przejdź do folderu gdzie chcesz pobrać projekt
C:\Users\Uzytkownik\Desktop> git clone https://github.com/IgorBrzezek/autocopy.git

# Rezultat:
Cloning into 'autocopy'...
remote: Enumerating objects: 50, done.
remote: Counting objects: 100% (50/50), done.
remote: Compressing objects: 100% (30/30), done.
Receiving objects: 100% (50/50), 5.00 KiB, done.
Slide 6

W praktycznym przykładzie z repozytorium autocopy widzisz, jak Git raportuje postęp transferu. Linie rozpoczynające się od remote: pochodzą z serwera i informują o fazie przygotowania danych. Komunikat Receiving objects pokazuje, ile obiektów zostało już pobranych z całkowitej liczby oraz jaki jest przesłany transfer danych w kilobajtach.

Po pojawieniu się napisu Resolving deltas Git łączy różnice między kolejnymi wersjami plików i odtwarza ich pełną postać. Cały proces może trwać od ułamka sekundy przy małych projektach do kilku minut przy repozytoriach z ogromną liczbą plików. Numer 50/50 oznacza, że wszystkie 50 obiektów zostało pomyślnie odebranych, a projekt jest gotowy do użycia.

Co dzieje się po klonowaniu?

7/30
Struktura pobranego projektu: Po klonowaniu w folderze projektu znajdziesz wszystkie pliki, które widziałeś na GitHubie. Dodatkowo jest tam ukryty folder ".git" - to serce systemu Git na twoim komputerze. Zawiera całą historię zmian i konfigurację. Polecenie git remote -v pokazuje "pilota" (remote) połączonego z twoim lokalnym repo - tak jak pilot TV połączony z telewizorem.
# Sprawdź strukturę pobranego repozytorium
C:\Users\Uzytkownik\Desktop> cd autocopy
C:\Users\Uzytkownik\Desktop\autocopy> ls -la

# Sprawdź połączenie ze zdalnym repo
C:\Users\Uzytkownik\Desktop\autocopy> git remote -v
origin  https://github.com/IgorBrzezek/autocopy.git (fetch)
origin  https://github.com/IgorBrzezek/autocopy.git (push)
Slide 7

Ukryty folder .git to tak naprawdę baza danych Gita, w której przechowywane są wszystkie obiekty: commity, drzewa plików, bloby z zawartością i tagi. Komenda git remote -v wyświetla przypisane zdalne repozytoria wraz z etykietami fetch i push, które określają, skąd Git ma pobierać zmiany i dokąd ma je wysyłać. Domyślnie oba wskazują na ten sam URL origin.

Warto zauważyć, że clone tworzy pełnoprawne repozytorium lokalne, a nie jedynie kopię roboczą. Oznacza to, że możesz zatwierdzać commity, tworzyć nowe gałęzie i łączyć je, a wszystko to działa bez dostępu do internetu. Gdy tylko wrócisz do sieci, jednym poleceniem git push prześlesz nagromadzone zmiany na GitHub.

Opcja 1: Klonowanie do własnej nazwy folderu

8/30
Własna nazwa folderu: Czasem nazwa repozytorium ci nie odpowiada lub masz już folder o takiej nazwie. Wtedy możesz podać drugi argument - własną nazwę folderu. Na przykład git clone URL moja-kopia utworzy folder "moja-kopia" zamiast domyślnej nazwy repozytorium. To jak nazwanie pobranego pliku inaczej niż sugeruje strona.
# Składnia z własną nazwą folderu
$ git clone URL_REPO NAZWA_FOLDERU

# Przykład dla autocopy - nazwa folderu "moja-kopia"
$ git clone https://github.com/IgorBrzezek/autocopy.git moja-kopia

# Rezultat: Git utworzy folder "moja-kopia" zamiast "autocopy"
Slide 8

Drugi argument w poleceniu git clone pozwala nadpisać domyślną nazwę katalogu, co bywa przydatne, gdy pracujesz nad wieloma forkami tego samego projektu lub gdy domyślna nazwa jest nieczytelna. Mechanizm jest prosty: Git po prostu tworzy folder o podanej nazwie zamiast wyciągać ją z ostatniego członu adresu URL przed rozszerzeniem .git.

Należy uważać, aby nie wskazać istniejącego już katalogu niepustego, ponieważ Git odmówi wtedy klonowania i wyrzuci błąd fatal: destination path already exists. To zabezpieczenie chroni przed przypadkowym nadpisaniem danych. W praktyce własną nazwę folderu stosuje się często przy klonowaniu bibliotek, gdy chcemy mieć ją w strukturze projektu pod krótką i wygodną nazwą.

Opcja 2: Klonowanie tylko jednej gałęzi

9/30
Co to są gałęzie? Gałęzie w Git to jak wersje dokumentu - główna wersja (main/master) i alternatywne wersje z nowymi funkcjami lub poprawkami. Opcja -b develop przełącza na gałąź o nazwie develop po sklonowaniu. Aby pobrać tylko jedną gałąź (a nie wszystkie), dodaj --single-branch. To przydaje się przy dużych projektach z wieloma gałęziami - oszczędzasz miejsce i czas pobierania.
# Przełączenie na gałąź "develop" po sklonowaniu
$ git clone --branch develop https://github.com/IgorBrzezek/autocopy.git

# Pobranie TYLKO jednej gałęzi (z --single-branch)
$ git clone --single-branch --branch develop https://github.com/IgorBrzezek/autocopy.git

# Krótsza wersja (skrót -b)
$ git clone -b develop --single-branch https://github.com/IgorBrzezek/autocopy.git
Slide 9

Flaga --branch (lub jej krótsza wersja -b) modyfikuje zachowanie clone w ten sposób, że po pobraniu wszystkich obiektów Git przełącza się na wskazaną gałąź zamiast na domyślną main lub master. Ważne jest jednak, że pełna historia innych gałęzi nadal znajduje się w katalogu .git i jest dostępna lokalnie, choć nie są one automatycznie wyłączone w checkout.

Ta opcja oszczędza głównie czas i pasek przewijania w przeglądarce, ale nie zmniejsza znacząco rozmiaru pobieranych danych, ponieważ Git i tak ściąga wszystkie obiekty wskazane przez serwer. Opcja -b ma największy sens, gdy interesuje Cię gałąź developerska lub feature branch, a nie chcesz ręcznie przełączać się po klonowaniu.

Opcja 3: Klonowanie z wykluczeniem historii (--depth)

10/30
Płytka kopia (shallow clone): Normalnie Git pobiera całą historię projektu - wszystkie zmiany od pierwszego commita do teraz. Przy starych projektach to może być tysiące "wersji". Opcja --depth 10 mówi: "Pobierz tylko 10 ostatnich wersji". To jak zdjęcie z ostatnich 10 minut zamiast całego nagrania. Idealne do szybkiego testowania!
# Pobierz tylko ostatnie 10 commitów
$ git clone --depth 10 https://github.com/IgorBrzezek/autocopy.git

# Głębokość 1 - tylko najnowsza wersja plików
$ git clone --depth 1 https://github.com/IgorBrzezek/autocopy.git
Slide 10

Shallow clone z parametrem --depth tworzy tak zwaną płytką kopię, w której historia commitów jest obcięta do podanej liczby ostatnich rewizji. Przy --depth 1 pobierasz jedynie ostatni commit, co dramatycznie zmniejsza rozmiar katalogu .git i czas transferu, szczególnie w przypadku wieloletnich projektów z tysiącami commitów i dużymi plikami binarnymi w historii.

Ograniczeniem płytkiego klonowania jest brak możliwości przeglądania starszych wersji plików, porównywania między odległymi commitami czy wykonywania pełnego git log wstecz. Jeśli w przyszłości będziesz potrzebował pełnej historii, możesz pogłębić repozytorium komendą git fetch --unshallow, która ściągnie brakujące obiekty i przywróci kompletną historię.

Opcja 4: Klonowanie z tagiem

11/30
Co to są tagi? Tagi to "zakładki" oznaczające ważne momenty w historii projektu - zazwyczaj wersje wydaniowe (np. v1.0.0, v2.3.1). Gdy programista tworzy nową wersję programu, tworzy tag. Chcesz pobrać wersję 1.0? Użyj --branch v1.0.0. Sprawdź zakładkę "Releases" na GitHubie repozytorium, żeby zobaczyć dostępne wersje.
# Klonowanie repo w wersji v1.0.0
$ git clone --branch v1.0.0 https://github.com/IgorBrzezek/autocopy.git

# Sprawdź dostępne tagi na GitHub przed klonowaniem
$ git ls-remote --tags https://github.com/IgorBrzezek/autocopy.git
Slide 11

Tagi w Git to lekkie lub adnotowane etykiety wskazujące konkretne commity. W przeciwieństwie do gałęzi, tag raz ustawiony pozostaje nieruchomy i nie zmienia swojego wskazania nawet po dodaniu nowych commitów. Dzięki temu stanowią niezawodny punkt odniesienia dla wydań produkcyjnych, które muszą być odtwarzalne w każdej chwili.

Podczas klonowania z tagiem Git automatycznie przełącza repozytorium w stan detached HEAD, co oznacza, że nie znajdujesz się na żadnej gałęzi, tylko bezpośrednio na oznaczonej wersji kodu. Aby wprowadzać zmiany w takim stanie, trzeba utworzyć nową gałąź wychodzącą od tego taga. Sprawdzanie dostępnych tagów przed klonowaniem za pomocą git ls-remote --tags pozwala upewnić się, że żądana wersja w ogóle istnieje.

Opcja 5: Klonowanie submodułów

12/30
Co to są submoduły? Niektóre projekty używają kodu z innych repozytoriów - to jak załączenie gotowego rozdziału do swojej książki. Te "załączone rozdziały" to submoduły. Bez flagi --recurse-submodules pobierzesz tylko główny projekt, a foldery submodułów będą puste. Z tą flagą Git pobierze również wszystkie submoduły.
# Klonowanie z submodułami
$ git clone --recurse-submodules https://github.com/IgorBrzezek/autocopy.git

# Jeśli zapomnisz, możesz pobrać submoduły później
$ git submodule update --init --recursive
Slide 12

Submoduły stanowią mechanizm osadzania jednego repozytorium Gita w drugim, co pozwala na precyzyjne kontrolowanie wersji zależności używanych w projekcie. Główny projekt przechowuje w specjalnym pliku .gitmodules odniesniki do konkretnych commitów w zewnętrznych repozytoriach, dzięki czemu każdy programista otrzymuje dokładnie te same wersje bibliotek.

Bez flagi --recurse-submodules katalogi submodułów pozostają puste, ponieważ Git nie wie, że ma je automatycznie zainicjować i pobrać. Jest to częste źródło błędów u początkujących, którzy po sklonowaniu narzekają na brak plików w folderach zależności. Proces inicjalizacji submodułów można odłożyć i wykonać ręcznie za pomocą git submodule update --init --recursive.

Opcja 6: Clone przez SSH

13/30
SSH - bezpieczne połączenie: SSH (Secure Shell) to protokół bezpiecznej komunikacji. Zamiast wpisywać login i hasło przy każdej operacji (co jest niewygodne i mniej bezpieczne), używasz dwóch kluczy: prywatnego (który trzymasz u siebie) i publicznego (który dodajesz na GitHub). To jak klucz i zamek - pasują tylko do siebie. Jednorazowa konfiguracja, wygoda na lata!
# Format URL SSH
$ git clone git@github.com:IgorBrzezek/autocopy.git

# Zamiast https://github.com/IgorBrzezek/autocopy.git
# Używasz git@github.com:uzytkownik/repo.git
Slide 13

SSH, czyli Secure Shell, to protokół sieciowy zapewniający szyfrowane połączenie między Twoim komputerem a serwerem GitHuba. W przeciwieństwie do HTTPS, przy każdej operacji sieciowej nie musisz podawać loginu ani hasła, ponieważ tożsamość potwierdzasz parą kluczy kryptograficznych. Klucz publiczny umieszczasz w ustawieniach swojego konta GitHub, a klucz prywatny przechowujesz wyłącznie na swoim komputerze.

Adres URL w formacie SSH różni się od HTTPS zarówno wyglądem, jak i strukturą - zamiast https://github.com/user/repo.git stosujesz notację git@github.com:user/repo.git. Wygenerowanie klucza ED25519 za pomocą ssh-keygen to kwestia kilkunastu sekund, a raz skonfigurowane połączenie działa bezobsługowo przez lata. Warto dodać, że niektóre sieci firmowe blokują port SSH, co uniemożliwia klonowanie tą metodą.

Clone vs GitHub CLI (gh)

14/30
GitHub CLI - GitHub z terminala: GitHub CLI to oficjalne narzędzie GitHub, które instalujesz osobno. Zamiast zapamiętywać skomplikowane URL-e, piszesz gh repo clone uzytkownik/repo - krócej! Dodatkowo oferuje komendy do tworzenia Pull Requestów, zarządzania Issues i wielu innych rzeczy. Dla fanów terminala to must-have, ale standardowy git clone też świetnie działa.
# Instalacja GitHub CLI
# Windows: choco install gh
# macOS: brew install gh
# Linux: sudo apt install gh

# Logowanie do GitHub
$ gh auth login

# Klonowanie przeZ GitHuba CLI
$ gh repo clone IgorBrzezek/autocopy
Slide 14

GitHub CLI to dedykowane narzędzie konsolowe rozszerzające możliwości Gita o operacje specyficzne dla platformy GitHub. Zamiast ręcznie konstruować pełny adres URL repozytorium, wpisujesz gh repo clone autor/nazwa, a CLI samodzielnie rozpoznaje twoją metodę uwierzytelniania i ustala odpowiedni protokół połączenia.

Standardowe git clone i gh repo clone różnią się przede wszystkim zakresem funkcjonalności - samo klonowanie to tylko wierzchołek góry lodowej możliwości GitHub CLI. Narzędzie pozwala tworzyć pull requesty, przeglądać issues, zarządzać releaseami i skanować repozytoria bez opuszczania terminala. Dla początkujących git clone jest prostszy i bardziej uniwersalny, bo działa na każdym serwerze wspierającym Gita, a nie tylko na GitHub.

Jak przeglądać pobrane repozytorium?

15/30
Polecenia do eksploracji: Po sklonowaniu możesz "rozglądać się" po projekcie. cd to "change directory" - wejdź do folderu. ls pokazuje listę plików (dodaj -la żeby zobaczyć ukryte pliki i szczegóły). git log pokazuje historię zmian - kto, kiedy i co zmienił. git branch pokazuje dostępne gałęzie projektu.
# Wejdź do folderu repozytorium
$ cd autocopy

# Sprawdź listę plików
$ ls -la

# Zobacz historię commitów
$ git log --oneline

# Zobacz wszystkie gałęzie
$ git branch -a
Slide 15

Po pomyślnym sklonowaniu repozytorium na lokalny dysk otwiera się przed Tobą pełna kopia projektu ze wszystkimi plikami i całą historią zmian. Polecenie ls -la wyświetla nie tylko widoczne pliki źródłowe, ale także ukryty katalog .git, który zawiera całą metadane repozytorium, w tym konfigurację, obiekty i referencje.

Użycie git log --oneline pozwala błyskawicznie ocenić, ile commitów liczy projekt i jak często autor wprowadzał zmiany. Podstawowym narzędziem do wizualizacji struktury gałęzi jest git branch -a, które pokazuje zarówno gałęzie lokalne, jak i te zdalne widoczne jako remotes/origin/nazwa. W codziennej pracy po clonie warto od razu sprawdzić, na której gałęzi znajduje się domyślny kursor HEAD.

Synchronizacja z oryginałem po klonowaniu

16/30
Jak być na bieżąco? Gdy klonujesz czyjeś repo, a autor dodaje nowe zmiany, możesz je pobrać. git pull pobiera i od razu łączy zmiany z twoim kodem. git fetch tylko pobiera informacje o zmianach, ale ich nie aplikuje - możesz najpierw sprawdzić co się zmieniło. To jak sprawdzanie skrzynki mailowej: fetch to "sprawdź czy są nowe", pull to "pobierz i przeczytaj".
# Pobierz najnowsze zmiany z GitHuba
$ git pull origin main

# Jeśli chcesz zobaczyć zmiany bez ich aplikowania
$ git fetch origin
Slide 16

Sklonowane repozytorium nie jest statycznym zrzutem - możesz je na bieżąco aktualizować o zmiany, które pojawiły się na GitHub po Twoim clonie. Komenda git pull scala dwie operacje w jednej: najpierw pobiera nowe obiekty ze zdalnego serwera, a następnie automatycznie łączy je z twoją lokalną gałęzią poprzez operację merge.

Alternatywą dla pull jest git fetch, które tylko pobiera informacje o nowych commitach, ale nie modyfikuje twoich lokalnych plików ani gałęzi. To bezpieczniejsza opcja, gdy chcesz najpierw przejrzeć, co zmieniło się w projekcie, zanim zdecydujesz się na integrację tych zmian ze swoim kodem. Systematyczne pobieranie aktualizacji z oryginału to dobry nawyk, który zapobiega rozjeżdżaniu się twojej kopii z głównym nurtem projektu.

Różne formaty adresów URL w git clone

17/30
Różne formaty adresów: Adres repozytorium można zapisać na różne sposoby. HTTPS (https://...) działa zawsze i wszędzie, wymaga hasła/tokenu. SSH (git@...) wymaga kluczy, ale jest wygodniejszy. Git (git://...) to starszy, niezaszyfrowany protokół - GitHub nie wspiera go od 2022 roku. Dwa pierwsze formaty są dziś standardem.
# Pełny URL HTTPS
$ git clone https://github.com/IgorBrzezek/autocopy.git

# Skrócony format SSH (git@host:user/repo.git)
$ git clone git@github.com:IgorBrzezek/autocopy.git

# Protokół Git (historyczny – GitHub wycofał go w 2022 r.)
$ git clone git://github.com/IgorBrzezek/autocopy.git
Slide 17

Git clone przyjmuje adres zdalnego repozytorium w kilku różnych formatach, z których każdy ma nieco inne właściwości dotyczące bezpieczeństwa i wygody użytkowania. Najpopularniejszy jest protokół HTTPS, który działa nawet za restrykcyjnymi firewallami i nie wymaga wstępnej konfiguracji po stronie klienta. Z kolei SSH oferuje najwyższy poziom bezpieczeństwa dzięki szyfrowaniu asymetrycznemu.

Mniej znany, ale wciąż obecny w ekosystemie Gita jest protokół git://, który działa na dedykowanym porcie 9418 i oferuje szybki, niezaszyfrowany transfer danych. Stosuje się go głównie do pobierania z publicznych repozytoriów, natomiast do wysyłania zmian wymaga już autoryzacji innym protokołem. Uwaga: od marca 2022 roku GitHub całkowicie wycofał wsparcie dla protokołu git:// - przy klonowaniu z GitHuba trzeba używać HTTPS lub SSH. Wybór odpowiedniego formatu URL zależy od twojego środowiska pracy.

Klonowanie prywatnych repozytoriów

18/30
Prywatne repo = dodatkowe zabezpieczenie: Prywatne repozytoria nie są widoczne dla wszystkich - tylko ty i osoby którym dasz dostęp mogą je zobaczyć. Żeby je sklonować, musisz udowodnić, że masz prawo dostępu. Możesz to zrobić na 3 sposoby: (1) token - specjalne hasło generowane na GitHub, (2) credential helper - Git zapamięta twoje dane, (3) SSH klucze - najwygodniejsze przy częstej pracy.
# Opcja 1: Token (PAT) - zalecana dla HTTPS
# Utwórz token w GitHub: Settings → Developer settings → PAT
$ git clone https://uzytkownik:TOKEN@github.com/IgorBrzezek/autocopy.git

# Opcja 2: Credential Helper (zapamiętuje login)
$ git config --global credential.helper store
$ git clone https://github.com/IgorBrzezek/autocopy.git
# Przy pierwszym użyciu wpisz nazwę użytkownika i token jako hasło

# Opcja 3: SSH (najwygodniejsza)
$ git clone git@github.com:IgorBrzezek/autocopy.git
Slide 18

Prywatne repozytoria na GitHub są widoczne tylko dla właściciela oraz osób, którym jawnie przyznano dostęp - nie można ich sklonować anonimowo, tak jak publicznych. Aby uwierzytelnić się przy klonowaniu, masz do wyboru trzy główne ścieżki: osobisty token dostępu PAT, menedżer poświadczeń systemu operacyjnego lub parę kluczy SSH.

Token PAT tworzysz w panelu ustawień GitHub w sekcji Developer settings i możesz go traktować jak tymczasowe hasło o ograniczonych uprawnieniach. Po wygenerowaniu tokenu używasz go w adresie URL w postaci https://uzytkownik:TOKEN@github.com/user/repo.git. Warto przechowywać tokeny w bezpiecznym menedżerze haseł i regularnie je rotować, aby zminimalizować ryzyko wycieku.

Rozwiązywanie problemów z klonowaniem

19/30
Co robić gdy coś nie działa: Błędy przy klonowaniu są frustrujące, ale zazwyczaj łatwe do naprawienia. "Permission denied" = nie masz dostępu (sprawdź token/SSH). "Repository not found" = literówka w adresie. "SSL certificate problem" = problem z połączeniem bezpiecznym. "Connection timed out" = problem z internetem. Prawie zawsze pomoże sprawdzenie adresu URL i metody połączenia!
# Sprawdzenie wersji Git
$ git --version

# Test połączenia z GitHuba
$ ssh -T git@github.com

# Diagnostyka problemu
$ GIT_CURL_VERBOSE=1 git clone https://github.com/IgorBrzezek/autocopy.git
Slide 19

Błędy przy git clone potrafią zniechęcić początkującego, ale w zdecydowanej większości przypadków wynikają z kilku powtarzalnych przyczyn, które łatwo wyeliminować. Komunikat Permission denied oznacza, że serwer odrzucił twoje dane uwierzytelniające - sprawdź, czy token lub klucz SSH są poprawnie skonfigurowane i mają dostęp do repozytorium.

Z kolei Repository not found prawie zawsze wskazuje na literówkę w adresie URL, na przykład pomylenie wielkich i małych liter w nazwie użytkownika lub repozytorium. W przypadku błędu Connection timed out pierwszym krokiem powinno być sprawdzenie łączności z internetem. Komenda GIT_CURL_VERBOSE=1 przed git clone uruchamia tryb diagnostyczny, w którym Git wyświetla szczegółowe informacje o każdym etapie połączenia.

Praktyczny przewodnik: Krok po kroku

20/30
Kompletna instrukcja dla początkujących: Oto pełen przepis na sklonowanie dowolnego repo: (1) Otwórz terminal - to program do wpisywania komend, w Windows to PowerShell lub Git Bash, w Mac/Linux Terminal. (2) Przejdź do folderu gdzie chcesz mieć projekt - komenda cd. (3) Wklej skopiowany adres repo po komendzie git clone. (4) Wejdź do folderu projektu. (5) Sprawdź status komendą git status. To tyle!
# Krok 1: Otwórz terminal (Windows: PowerShell/Git Bash, Mac/Linux: Terminal)

# Krok 2: Przejdź do folderu gdzie chcesz pobrać projekt
$ cd ~/Pulpit   # (Windows: cd Desktop)

# Krok 3: Sklonuj repozytorium
$ git clone https://github.com/IgorBrzezek/autocopy.git

# Krok 4: Wejdź do folderu projektu
$ cd autocopy

# Krok 5: Sprawdź czy wszystko jest w porządku
$ git status
Slide 20

Proces klonowania repozytorium sprowadza się do kilku prostych czynności, które po kilku powtórzeniach wejdą Ci w nawyk i staną się automatyczne. Zaczynasz od otwarcia terminala - na Windowsie może to być PowerShell, Git Bash lub wbudowany terminal w Visual Studio Code, a na Macu i Linuksie standardowo Terminal.

Samo wywołanie git clone z adresem URL uruchamia cały łańcuch operacji od negocjacji protokołu przez transfer obiektów po rozpakowanie plików na dysk, a na koniec konsolidację gałęzi. Po wejściu do świeżo utworzonego katalogu projektu warto od razu wykonać git status, aby upewnić się, że repozytorium jest czyste i gotowe do pracy.

Co znajdziesz w repo autocopy?

21/30
Struktura typowego projektu: Po sklonowaniu zobaczysz różne pliki i foldery. README.md to dokumentacja - zawsze czytaj ją pierwszą! Zawiera opis projektu i instrukcje. Pliki z rozszerzeniem (np. .py, .js) to kod programu. Folder tests/ zawiera testy - sprawdzają czy kod działa poprawnie. Plik requirements.txt (dla Python) lub package.json (dla JavaScript) zawiera listę potrzebnych bibliotek.
# Lista plików w projekcie
$ ls
# README.md  # Dokumentacja projektu
# autocopy.py  # Główny skrypt
# config.py    # Konfiguracja
# tests/       # Testy jednostkowe

# Przeczytaj dokumentację
$ cat README.md

# Zobacz historię zmian
$ git log --oneline -10
Slide 21

Każdy projekt na GitHubie ma swoją charakterystyczną strukturę, którą po klonowaniu od razu widzisz na dysku. Plik README.md to Twoja mapa projektu - zawiera cel działania, instrukcje uruchomienia, przykłady użycia i informacje o licencji; ignorowanie go to najczęstszy błąd początkujących. Folder tests/ to świadectwo profesjonalnego podejścia - im więcej testów, tym łatwiej modyfikować kod bez obawy, że coś się popsuje.

Autocopy jest przykładem projektu o umiarkowanej wielkości, co czyni go idealnym do pierwszych eksperymentów. Komenda git log --oneline pozwoli Ci zobaczyć, jak autor stopniowo budował funkcjonalność, a cat README.md rozwieje wątpliwości co do przeznaczenia poszczególnych plików. Umiejętność szybkiego rozeznania się w cudzym kodzie to jedna z kluczowych kompetencji każdego programisty.

Jak uruchomić projekt po klonowaniu?

22/30
Od pobrania do uruchomienia: Sklonowanie to dopiero początek. Większość projektów wymaga zainstalowania dodatkowych bibliotek (zależności). README.md mówi jak to zrobić. Dla Python: pip install -r requirements.txt pobiera wszystkie potrzebne pakiety. Następnie uruchamiasz program komendą python nazwa_pliku.py. To jak kupno przepisu (clone) → zakupy składników (install) → gotowanie (run)!
# Przejdź do folderu projektu
$ cd autocopy

# Sprawdź wymagania (README lub plik requirements.txt)
$ cat requirements.txt

# Zainstaluj zależności (dla Python)
$ pip install -r requirements.txt

# Uruchom skrypt
$ python autocopy.py
Slide 22

Samo sklonowanie repozytorium to dopiero połowa sukcesu - projekt rzadko działa od razu po wyciągnięciu, ponieważ autorzy nie dołączają bibliotek zewnętrznych do kodu. Plik requirements.txt to lista wszystkich pakietów Pythona, bez których skrypt nie ma prawa się uruchomić; pomija się je w repozytorium, bo zajmowałyby zbyt wiele miejsca i szybko by się dezaktualizowały.

Wirtualne środowisko (venv) to kolejny krok, który powinieneś wykonać przed instalacją - pozwala odizolować zależności jednego projektu od drugiego i uniknąć konfliktów wersji. Cały łańcuch: clone, stworzenie venv, pip install -r requirements.txt, a następnie python autocopy.py to standardowy workflow każdego dewelopera Pythona. Jeśli projekt korzysta z Node.js, zamiast requirements.txt znajdziesz package.json, a komenda npm install przejmie rolę pip.

Tworzenie własnej kopii do modyfikacji

23/30
Zmiany lokalne vs wysyłanie na serwer: Po sklonowaniu możesz swobodnie zmieniać pliki - te zmiany są tylko u ciebie. Komendy git add i git commit zapisują twoje zmiany lokalnie. Ale uwaga! Zwykły clone nie daje ci prawa wysyłania zmian na oryginalne repo. Możesz wysłać zmiany tylko gdy: masz uprawnienia jako collaborator, albo najpierw zrobiłeś fork.
# Wprowadź zmiany w plikach edytorem
# Następnie zapisz zmiany lokalnie:

$ git add .
$ git commit -m "Opis zmian"

# Jeśli masz uprawnienia - wyślij na GitHub:
$ git push origin main

# UWAGA: Zwykły clone NIE daje prawa zapisu!
# Aby wysyłać zmiany użyj: 1) Fork + Clone, lub 2) Poproś o dostęp jako Collaborator
Slide 23

Po sklonowaniu repozytorium masz pełną władzę nad plikami na swoim komputerze - możesz je edytować, usuwać i dodawać własne, a Git będzie śledził każdą zmianę. Komendy git add i git commit działają lokalnie i nie wymagają dostępu do internetu, więc możesz tworzyć własną historię zmian nawet bez połączenia z GitHubem.

Problem pojawia się w momencie, gdy chcesz wysłać swoje zmiany z powrotem na serwer - zwykły clone nie daje Ci uprawnień do zapisu w cudzym repozytorium. Są dwa legalne sposoby na ominięcie tego ograniczenia: możesz poprosić autora o dodanie cię do grona collaboratorów albo wykonać fork i wysyłać zmiany na własne konto. W praktyce fork to standard w open source.

Fork + Clone: Jak współtworzyć projekty

24/30
Workflow Open Source: Chcesz wprowadzić zmiany w cudzym projekcie i zaproponować je autorowi? To wymaga kilku kroków. Fork tworzy twoją wersję repo na twoim koncie GitHub - teraz masz pełne prawa! Clone pobiera ją na twój komputer. Zmiany + push wysyłasz do swojego forka. Na końcu klikasz "Compare & pull request" - to jak wysłanie propozycji zmian autorowi. Może ją zaakceptować lub odrzucić!
# Na GitHub: kliknij Fork przy https://github.com/IgorBrzezek/autocopy
# Utworzy się https://github.com/TWOJ-NICK/autocopy

# Sklonuj SWÓJ fork
$ git clone https://github.com/TWOJ-NICK/autocopy.git

# Teraz możesz swobodnie wprowadzać i wysyłać zmiany!
$ git push origin main
Slide 24

Fork to mechanizm, który odróżnia GitHub od zwykłego hostingu plików - tworzy całkowicie niezależną kopię repozytorium na twoim koncie, nad którą masz pełną kontrolę. Różnica między forkiem a zwykłym clone jest fundamentalna: clone ściąga kod na twój dysk, fork tworzy nowe repozytorium na serwerze GitHub przypisane do ciebie.

Pull request to oficjalny sposób na przesłanie swojego kodu do oryginalnego repozytorium po wykonaniu forka. Po wypchnięciu zmian na swój fork na GitHubie pojawia się przycisk Compare and pull request - kliknięcie go otwiera formularz, w którym opisujesz, co zrobiłeś i dlaczego. Właściciel oryginalnego repo widzi twoje zmiany, może je skomentować, zaakceptować lub odrzucić.

Aktualizacja klonu o najnowsze zmiany

25/30
Jak być na bieżąco z projektem: Gdy klonujesz czyjeś repo, a autor dodaje nowe commity, możesz je pobrać. git pull pobiera i automatycznie łączy zmiany z twoim kodem. Jeśli masz własne zmiany i boisz się konfliktów, użyj git stash - to jak schowanie własnych zmian do szafki, pobranie aktualizacji, a potem git stash pop wyciąga twoje zmiany z powrotem.
# Przejdź do folderu projektu
$ cd autocopy

# Pobierz najnowsze zmiany z GitHuba
$ git pull origin main

# Lub jeśli masz własne zmiany - najpierw schowaj, potem pobierz:
$ git stash
$ git pull origin main
$ git stash pop
Slide 25

Projekty na GitHubie żyją własnym życiem - autorzy dodają nowe funkcje, naprawiają bugi i aktualizują dokumentację, a Twój klon po pewnym czasie zaczyna się różnić od oryginału. Komenda git pull to najprostszy sposób na zsynchronizowanie lokalnej kopii ze stanem na serwerze; łączy w sobie git fetch i git merge.

Git stash to ratunek w sytuacji, gdy chcesz zaciągnąć aktualizacje, ale masz brudny working directory - komenda chowa twoje modyfikacje na stos, przywracając katalog do stanu ostatniego commita. Po wykonaniu git pull i zaktualizowaniu plików wywołujesz git stash pop, który przywraca twoje zmiany na wierzch. Konflikty mogą wystąpić, jeśli Ty i autor zmieniliście te same linie w tym samym pliku.

Usuwanie sklonowanego repozytorium

26/30
Jak usunąć pobrany projekt: Możesz bezpiecznie usunąć folder sklonowanego repo - to tylko kopia na twoim dysku, oryginał na GitHubie pozostaje nietknięty! W Windows użyj rmdir /s /q, w Mac/Linux rm -rf. Po usunięciu możesz zawsze sklonować ponownie - Git zapamięta adres lub znajdziesz go na GitHubie. Usunięcie lokalnej kopii = wyrzucenie pobranej książki, oryginał w bibliotece nadal jest.
# Windows - usuń folder z Eksploratorem lub PowerShell
$ rmdir /s /q autocopy

# Mac/Linux - użyj rm
$ rm -rf autocopy

# Następnie możesz sklonować ponownie kiedy chcesz
$ git clone https://github.com/IgorBrzezek/autocopy.git
Slide 26

Usunięcie sklonowanego folderu to operacja odwracalna, bo oryginalne repozytorium na GitHubie pozostaje nietknięte - tracisz tylko lokalną kopię, którą w każdej chwili możesz odtworzyć. W systemie Windows folder usuwa się przez Eksplorator lub komendą rmdir /s /q w PowerShellu, natomiast w Mac i Linux służy do tego rm -rf.

Po usunięciu folderu Twój lokalny Git znika całkowicie, ale Twoje commity, jeśli zostały wypchnięte na serwer, nadal istnieją w historii na GitHubie. Nie musisz przechowywać na dysku projektów, których aktualnie nie potrzebujesz - wystarczy zapamiętać adres URL, a w każdej chwili możesz sklonować je ponownie. Zanim usuniesz folder, upewnij się, że wszystkie ważne modyfikacje zostały wypchnięte na serwer.

Klonowanie w Visual Studio Code

27/30
VS Code - klonowanie bez terminala: Visual Studio Code to popularny edytor kodu z wbudowaną obsługą Git. Możesz klonować repozytoria bez dotykania terminala. Naciśnij Ctrl+Shift+P (lub Cmd+Shift+P na Mac), wpisz "Git: Clone", wklej adres i wybierz folder. Projekt otworzy się automatycznie i możesz od razu edytować. VS Code pokaże też zmiany w plikach i pozwoli commitować bez opuszczania edytora!
# W VS Code:
# 1. Naciśnij Ctrl+Shift+P (Command Palette)
# 2. Wpisz "Git: Clone"
# 3. Wklej URL: https://github.com/IgorBrzezek/autocopy.git
# 4. Wybierz folder docelowy
# 5. Projekt otworzy się automatycznie!

# Lub z terminala w VS Code:
$ git clone https://github.com/IgorBrzezek/autocopy.git
Slide 27

Visual Studio Code to najpopularniejszy edytor wśród programistów, między innymi dlatego, że ma Git wbudowany bezpośrednio w interfejs - nie potrzebujesz osobnej konsoli do podstawowych operacji. Paleta komend (Ctrl+Shift+P) to Twoje centrum dowodzenia: wpisujesz Git: Clone, wklejasz URL repozytorium, a VS Code sam ściąga projekt i proponuje otwarcie go w nowym oknie.

VS Code nie tylko klonuje, ale też na bieżąco śledzi zmiany - przy plikach pojawiają się kolorowe znaczki: M oznacza modyfikację, U nowy plik, D usunięcie, a C konflikt. Wbudowany terminal (Ctrl+`) pozwala w razie potrzeby sięgnąć po zaawansowane komendy Gita bez opuszczania edytora. Dla początkujących VS Code z Gitem to środek pomiędzy pełnym terminalem a GitHub Desktop.

GitHub Desktop: Alternatywa dla terminala

28/30
GitHub Desktop - Git dla nie-technicznych: GitHub Desktop to darmowy program z graficznym interfejsem (GUI). Zamiast pisać komendy, klikasz przyciski. "Clone repository" → wklejasz URL → wybierasz folder → klikasz "Clone". Program pokazuje zmiany jako kolorowe linie tekstu, commity jako listę, gałęzie jako wizualny graf. Idealny dla osób, które dopiero uczą się Git i wolą "widzieć" co się dzieje zamiast wyobrażać sobie.
# Pobierz z: desktop.github.com

# W GitHub Desktop:
# 1. File → Clone Repository
# 2. Wybierz "URL" i wklej:
https://github.com/IgorBrzezek/autocopy.git
# 3. Wybierz folder lokalny
# 4. Kliknij "Clone"

# GitHub Desktop pokaże graficzny interfejs do commitowania i pushowania!
Slide 28

GitHub Desktop to oficjalna aplikacja firmy GitHub, która zamienia wszystkie tekstowe komendy w przejrzyste przyciski i okienka graficzne. Po uruchomieniu program od razu pokazuje listę Twoich repozytoriów - zarówno tych lokalnych, jak i zdalnych - a kliknięcie Clone Repository to trzy kroki: wybór źródła, wybór folderu i potwierdzenie.

Aplikacja świetnie nadaje się do codziennej pracy: pokazuje zmiany w plikach linijka po linijce, pozwala wybrać, które fragmenty mają iść do commita i obsługuje pull requesty bez otwierania przeglądarki. GitHub Desktop jest dobrym wyborem na start i do prostych projektów, ale prędzej czy później sięgniesz po terminal, gdy zabraknie Ci opcji w graficznym interfejsie.

Podsumowanie wszystkich opcji git clone

29/30
Szybka ściąga: Oto wszystkie najważniejsze opcje git clone w jednym miejscu. Pamiętaj, że możesz je łączyć! Na przykład: git clone --depth 1 --branch v1.0 --recurse-submodules URL pobierze tylko najnowszą wersję oznaczoną tagiem v1.0, bez historii, wraz ze wszystkimi submodułami. Wybieraj opcje według potrzeb - nie musisz używać wszystkich naraz!
# Pełna tabela opcji

git clone URL                                    # Podstawowe klonowanie
git clone URL nazwa                               # Z własną nazwą folderu
git clone -b gałąź URL                           # Tylko jedna gałąź
git clone --depth N URL                           # Ograniczona historia
git clone --recurse-submodules URL               # Z submodułami
git clone --single-branch URL                 # Tylko aktywna gałąź
Slide 29

Git clone ma wiele opcji, które pozwalają dostosować proces pobierania do konkretnych potrzeb, a ich połączenie daje jeszcze większą elastyczność. Flaga --depth 1 to najczęściej używane usprawnienie - tworzy shallow clone, czyli pobiera tylko ostatni commit bez pełnej historii, co radykalnie przyspiesza klonowanie dużych projektów.

Łączenie opcji to zaawansowana technika, która oszczędza czas i miejsce na dysku. Opcja --branch pozwala od razu przeskoczyć na konkretną gałąź lub tag, a --recurse-submodules sprawia, że Git sam ściąga wszystkie zagnieżdżone repozytoria. Nie musisz uczyć się wszystkich opcji na pamięć - wystarczy, że wiesz, że istnieją i do czego służą.

Ćwiczenie praktyczne: Sklonuj autocopy!

30/30
Teraz Twoja kolej! Teorii już dość - czas na praktykę! Wykonaj poniższe kroki, żeby sklonować prawdziwe repozytorium. Jeśli wszystko pójdzie dobrze, zobaczysz folder autocopy na swoim dysku z plikami projektu. Gratulacje - właśnie wszedłeś do świata programistów pracujących z Git i GitHub! Pamiętaj: nie ma głupich pytań, wszystkie wielkie projekty zaczynały się od pierwszego klonu.
# Zadanie do wykonania:

1. git clone https://github.com/IgorBrzezek/autocopy.git

2. cd autocopy

3. ls -la        # Sprawdź strukturę projektu

4. git log --oneline -5  # Zobacz ostatnie 5 commitów

5. cat README.md      # Przeczytaj dokumentację
Slide 30

Teraz pora przełożyć teorię na praktykę - wykonaj krok po kroku instrukcje ze slajdu, a pierwsze repozytorium pojawi się na Twoim dysku w kilkadziesiąt sekund. Po wpisaniu git clone i adresu URL Git wyświetli linijki z informacją o postępie: Receiving objects to pobieranie plików, a komunikat done oznacza sukces.

Na koniec uruchom git log --oneline -5 - zobaczysz listę pięciu ostatnich commitów z ich identyfikatorami i treścią; to Twój pierwszy wgląd w historię projektu. Przeczytaj README.md za pomocą cat lub otwórz plik w edytorze - tam znajdziesz opis działania autocopy i instrukcje uruchomienia. Gratulacje, właśnie wykonałeś wszystkie kroki, które profesjonalni programiści powtarzają codziennie.