Lab 02 - System kontroli wersji - Git
System kontroli wersji - Git
Wprowadzenie do kontroli wersji
System kontroli wersji służy do śledzenia zmian dokonywanych w pliku (lub plikach) i umożliwia powrót do dowolnego wcześniejszego stanu. Jest to powszechnie wykorzystywane narzędzie w projektach programistycznych chociaż objęcie kontroli wersji jest możliwe dla dowolnego typu pliku na komputerze.
Jeśli interesujesz się grafiką lub projektowaniem stron WWW i chcesz zachować każdą wersję pliku graficznego lub układu witryny WWW (co wydaje się być rozsądnym pomysłem), to zastosowanie systemu kontroli wersji jest odpowiednim do tego narzędziem. Pozwala ono na: * przywracanie pliku (lub plików) do wcześniejszej wersji, * odtwarzanie stanu całego projektu, * porównywanie wprowadzonych zmian (nawet gdy jeden plik edytowało wiele osób), * pozyskanie informacji o tym kto i kiedy wprowadził daną modyfikację.
Najpowszechniej rozdystrybuowanym systemem kontroli wersji jest
Git a tworzone w jego ramach projekty to
repozytoria. Popularna witryna GitHub stanowi sieciowy
hosting dla repozytoriów Gita.
Interaktywne wprowadzenie do Gita

Aby rozpocząć pracę z Gitem zapoznaj się z interaktywnym
poradnikiem dostępnym na stronie learngitbranching. Opisane
są w nim najważniejsze koncepty, które również są przedstawione w
intuicyjnej, graficznej formie.
🛠🔥 Zadanie 1 🛠🔥
Rozwiąż cztery pierwsze zadania z działu Główne: Wprowadzenie na stronie learngitbranching:
- Wprowadzenie do commitów Gita
- Rozgałęzienia w Gicie
- Merge w Gicie
- Wprowadzenie do Rebase
oraz kolejne siedem z działu Push & Pull – Zdalne repozytoria:
- Wstęp do klonowania (clone)
- Zdalne gałęzie
- Git fetch
- Git pull
- Symulacja pracy zespołowej
- Git push
- Rozbieżna historia
Ćwiczenia hands-on Git
🛠🔥 Zadanie 2 🛠🔥
Utwórz konto na GitHub
(jeżeli posiadasz już konto, to nie musisz tworzyć kolejnego). Postaraj
się użyć rozsądnej nazwy użytkownika, gdyż często repozytoria stanowią
swojego rodzaju portfolia dla przyszłych pracodawcow. Postanów
umieszczać tworzony kod na repozytoria Gita już dziś - z
czasem stosowanie kontroli wersji stanie się to dobrym nawykiem i
będziesz już dysponował pewną historią “kodowania”.
🛠🔥 Zadanie 3 🛠🔥
Utwórz nowe repozytorium za pomocą strony GitHub o nazwie np.
hello-git. Pozostaw widoczność publiczną
(Public). Wypełnij pole opisu (np. Przykładowe repozytorium do
nauki obsługi gita), zaznacz chęć utworzeniu pliku README i
wybierz licencję dla swojego
projektu (np. MIT).
🛠🔥 Zadanie 4 🛠🔥
Otwórz terminal poleceń i skonfiguruj ustawienia Gita
dla swojego użytkownika:
git config --global user.name "Nazwa uzytkownika Gita"
git config --global user.email "Adres e-mail uzytkownika Gita"Wyświetl zapisane ustawienia komendą:
git config -l🛠🔥 Zadanie 5 🛠🔥
Sklonuj na swój komputer utworzone repozytorium z
githuba komendą git clone adres_www,
korzystając z adresu HTTPS (Code → HTTPS, np.
https://github.com/uzytkownik/repozytorium.git). Pobieranie
publicznego repozytorium nie wymaga logowania.
🛠🔥 Zadanie 6 🛠🔥
Utwórz dowolny plik tekstowy w sklonowanym repozytorium i dodaj go do historii repozytorium. Wykorzystaj następujące komendy w poniższej kolejności:
| Polecenie | Funkcja |
|---|---|
git status (Opcjonalnie) |
Powoduje wyświetlenie aktualnego stanu repozytorium, które pobrano na komputer |
git add -A |
Komenda git add pozwala na podzielenie dokonanych zmian
na różne commity, natomiast argument -A powoduje
uwzględnienie wszystkich zmian jednocześnie. Zwróć uwagę, że
interaktywne wprowadzenie, które rozwiązałeś pomijało tę komendę
(zakładano commitowanie wszystkich zmian na raz). |
git commit -m "Krotki opis wprowadzonych zmian" |
Dodaje do historii repozytorium wprowadzone zmiany |
Commit zapisuje zmiany tylko w lokalnym repozytorium. Aby wysłać je
na GitHub, trzeba użyć polecenia git push. Od
2021 roku GitHub nie pozwala na wysyłanie zmian przy użyciu
hasła do konta. Zamiast tego trzeba się uwierzytelnić tokenem
dostępu (przez HTTPS) lub kluczem SSH. Przed
wykonaniem git push skonfiguruj dostęp w sposób odpowiedni
dla komputera, na którym pracujesz:
- a) komputer w laboratorium (współdzielony) - fine-grained personal access token,
- b) własny laptop - klucz SSH.
Uwaga! Nigdy nie zapisuj tokenów ani kluczy prywatnych w plikach repozytorium, w adresie zdalnego repozytorium (np.
https://TOKEN@github.com/...) ani na dysku współdzielonego komputera. Każdy, kto przejmie token lub klucz, może wysyłać zmiany w Twoim imieniu.
a) Komputer w laboratorium - fine-grained token
Fine-grained token pozwala ograniczyć uprawnienia do minimum: tylko do wybranych repozytoriów, tylko do wybranych operacji i tylko na określony czas.
- Na stronie
GitHubprzejdź do: Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate new token. - Uzupełnij formularz:
- Token name - np.
lab-niodsr, - Expiration - jak najkrótszy okres (np. 1 dzień lub 7 dni),
- Repository access - Only select repositories i wybierz repozytorium utworzone w Zadaniu 3 (fork z Zadania 9 dodasz po jego utworzeniu, edytując token),
- Permissions → Repository permissions → Contents - ustaw Read and write (uprawnienie Metadata: Read-only zostanie dodane automatycznie).
- Token name - np.
- Kliknij Generate token i skopiuj token - zostanie wyświetlony tylko raz.
- Sprawdź, czy na komputerze nie jest skonfigurowane trwałe zapisywanie haseł:
git config --show-origin --get-all credential.helperJeśli widzisz store, nie korzystaj z niego - zapisuje on
dane logowania jawnym tekstem w pliku
~/.git-credentials.
- Ustaw przechowywanie danych logowania tylko w pamięci i tylko na czas zajęć (tu: 2 godziny):
git config --global credential.helper 'cache --timeout=7200'- Przy pierwszym
git push(przez adres HTTPS, np.https://github.com/uzytkownik/repozytorium.git) jako Username podaj nazwę użytkownikaGitHub, a jako Password wklej wygenerowany token. - Po zakończeniu zajęć posprzątaj po sobie:
git credential-cache exit # usuwa dane logowania z pamięci
ls ~/.git-credentials # plik NIE powinien istnieć
git config --global --unset credential.helperNastępnie usuń token na stronie GitHub (Fine-grained
tokens → Delete), jeśli nie będzie Ci już potrzebny.
b) Własny laptop - klucz SSH
Na własnym komputerze z systemem Linux wygodniej jest skonfigurować
jednorazowo klucz SSH. Klucz prywatny nie opuszcza Twojego komputera, a
na GitHub trafia jedynie klucz publiczny.
Poniższe kroki są skróconą wersją oficjalnej instrukcji: Generating a new SSH key and adding it to the ssh-agent. W razie problemów skorzystaj z niej bezpośrednio.
- Wygeneruj parę kluczy, podając adres e-mail przypisany do konta
GitHub. Lokalizację pliku zatwierdź klawiszem Enter (domyślnie~/.ssh/id_ed25519). Gdy program zapyta o hasło (passphrase), ustaw je - zabezpieczy to klucz w razie kradzieży laptopa:
ssh-keygen -t ed25519 -C "adres_email@example.com"- Dodaj klucz do agenta SSH, aby nie wpisywać hasła przy każdej operacji:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519- Wyświetl i skopiuj klucz publiczny (plik z
rozszerzeniem
.pub). Plikuid_ed25519(bez rozszerzenia) nigdy nikomu nie udostępniaj.
cat ~/.ssh/id_ed25519.pub- Na stronie
GitHubkliknij swoje zdjęcie profilowe i przejdź do: Settings → SSH and GPG keys (sekcja Access) → New SSH key. W polu Title wpisz nazwę (np.laptop), jako Key type wybierz Authentication Key, w polu Key wklej skopiowany klucz publiczny i kliknij Add SSH key. - Sprawdź połączenie:
ssh -T git@github.comPrzy pierwszym połączeniu zostanie wyświetlony odcisk
(fingerprint) klucza serwera - porównaj go z odciskami
opublikowanymi przez GitHub i dopiero wtedy wpisz yes.
Poprawna konfiguracja kończy się komunikatem
Hi NazwaUzytkownika! You've successfully authenticated, but GitHub does not provide shell access.
- Zmień adres zdalny repozytorium sklonowanego w Zadaniu 5 z HTTPS na SSH (adres SSH znajdziesz na stronie repozytorium: Code → SSH):
git remote set-url origin git@github.com:uzytkownik/repozytorium.gitKolejne repozytoria możesz od razu klonować przez adres SSH, np.:
git clone git@github.com:uzytkownik/repozytorium.gitPo skonfigurowaniu dostępu wyślij zmiany na serwer:
git pushPolecenie git push powoduje zaktualizowanie repozytorium
zdalnego. Zaobserwuj efekt na Githubie, zapoznaj się z
interfejsem użytkownika repozytorium.
🛠🔥 Zadanie 7 🛠🔥
Kod zawierający informacje o autorze, zależnościach w projekcie,
sposobie instalacji i uruchamiania jest prościej wykorzystać. Takie
informacje standardowo umieszcza się w pliku README.md.
Język jakim posługujemy się do tworzenia takich plików jest
Markdown. Korzystając z informacji
o składni postaraj się wyedytować plik README.md
uzyskując poniższy efekt. Wykorzystaj do tego edytor w przeglądarce na
stronie Github. 
🛠🔥 Zadanie 8 🛠🔥
Wywołaj komendę cat na lokalnym pliku
README.md, aby wyświetlić jego zawartość. Dlaczego plik nie
zawiera wprowadzonych zmian? Zaktualizuj lokalną wersję repozytorium
korzystając z komendy git pull.
🛠🔥 Zadanie 9 🛠🔥
Projekty, w których będziesz brał udział w przyszłości najczęściej
będą tworzone zespołowo. Wiele repozytoriów jest również open-source,
czyli może mieć wpływ na znajdujący się w nich kod. W tym zadaniu
zaproponujemy zmianę w repozytorium prowadzącego. Nie masz uprawnień do
zapisu w tym repozytorium, dlatego utworzysz jego kopię na swoim koncie
(fork), wgrasz do niej swoje zmiany, a następnie poprosisz
prowadzącego o ich dołączenie (pull request): 1. Otwórz
wskazane repozytorium w przeglądarce i kliknij Fork →
Create fork. Na Twoim koncie zostanie utworzona kopia
repozytorium prowadzącego. 2. Jeśli korzystasz z tokena (Zadanie 6,
wariant a), dodaj utworzony fork do repozytoriów, do których token ma
dostęp (Fine-grained tokens → wybierz token → Edit →
Repository access). Jeśli korzystasz z klucza SSH (Zadanie 6,
wariant b), nie musisz nic konfigurować - klucz daje dostęp do
wszystkich Twoich repozytoriów. 3. Sklonuj swój fork
(git clone adres_forka) i przejdź do katalogu z
repozytorium (cd NazwaRepozytorium). Na komputerze w
laboratorium użyj adresu HTTPS (Code → HTTPS), a na
własnym laptopie adresu SSH (Code → SSH). Adres forka
zostanie zapisany jako zdalne repozytorium o nazwie origin.
4. Dodaj repozytorium prowadzącego jako drugie zdalne repozytorium o
nazwie upstream
(git remote add upstream adres_https_repozytorium_prowadzacego).
Z tego repozytorium będziesz tylko pobierać zmiany, więc wystarczy adres
HTTPS - również przy korzystaniu z SSH. Wyświetl listę zdalnych
repozytoriów komendą git remote -v. 5. Stwórz własną gałąź
w repozytorium nazywając ją swoją nazwą użytkownika.
(git branch NazwaGalezi). Uwaga! Możesz wykonać polecenie 5
i 6 jedną komendą dodając argument
(git checkout -b NazwaGalezi). 6. Zmień aktualną gałąź na
nowo-utworzoną (git checkout NazwaGalezi). 7. Stwórz nowy
katalog (nazwij go swoją nazwą użytkownika), a w tym katalogu plik
tekstowy (nazwij go swoimi inicjałami .txt) i wklej do
niego przykładowy tekst
(United we stand, divided we fall!). 8. Dodaj nowe pliki do
śledzenia i dodaj je do historii repozytorium (git add -A i
git commit -m "NazwaCommita"). 9. Wgraj gałąź do swojego
forka (git push -u origin NazwaGalezi). Argument
-u powoduje, że zmiany w nowo-utworzonej lokalnie gałęzi
będą śledzone w stosunku do zmian w repozytorium zdalnym. 10.
Korzystając z interfejsu użytkownika Githuba utwórz
pull request utworzonej gałęzi do gałęzi głównej repozytorium
prowadzącego (Compare & pull request - jako base
repository powinno być wybrane repozytorium prowadzącego). 11. Fork
nie aktualizuje się automatycznie. Gdy prowadzący dołączy
(merge) pull requesty, przełącz się na gałąź główną
(git checkout main) i pobierz z repozytorium prowadzącego
aktualną wersję (git pull upstream main). Sprawdź, czy w
repozytorium pojawiły się katalogi innych osób. Na koniec wyślij
zaktualizowaną gałąź główną do swojego forka
(git push origin main).
🛠🔥 Zadanie domowe 🛠🔥
Znajdź odpowiedź na pytanie - jaki jest cel pliku
.gitignore?