Wprowadzenie do pracy z Git i GitHub
Na dzisiejszych laboratoriach będziemy pracować z systemem kontroli wersji Git oraz platformą GitHub. Przygotowaliśmy dla Was zadania, które wprowadzą Was w praktyczne aspekty pracy z repozytoriami, skupiając się na kluczowych pojęciach i technikach.
Co to jest Git?
Git to rozproszony system kontroli wersji, który pozwala na śledzenie zmian w kodzie źródłowym podczas procesu tworzenia oprogramowania. Umożliwia wielu programistom jednoczesną pracę nad tym samym projektem, zachowując historię wszystkich zmian. Dzięki Gitowi możemy:
- Śledzić historię zmian: Każda zmiana jest zapisywana jako commit, co umożliwia powrót do poprzednich wersji kodu.
- Pracować równolegle: Wiele osób może pracować nad różnymi częściami projektu bez konfliktów.
- Zarządzać wersjami: Ułatwia tworzenie różnych wersji oprogramowania, takich jak wydania stabilne i testowe.
Co to jest GitHub?
GitHub to internetowa platforma hostująca repozytoria Git, która dodaje funkcje ułatwiające współpracę i zarządzanie projektami. Dzięki GitHubowi możemy:
- Hostować repozytoria: Przechowywać kod w chmurze, co ułatwia dostęp i współpracę.
- Zarządzać projektami: Używać narzędzi takich jak Issues, Pull Requests i Wiki do organizacji pracy.
- Współpracować z innymi: Dzielić się kodem, przeglądać zmiany i dyskutować nad nimi.
- Integracja z innymi narzędziami: Automatyzować testy, wdrożenia i inne procesy.
Główne pojęcia i techniki
Podczas zajęć omówimy następujące zagadnienia:
- Podstawowe komendy Git
- Git Rebase
- Force Push
- Feature Branches
- Issues
- Pull Requests
- Code Review
1. Podstawowe komendy Git
git commit
Co to jest git commit?
Polecenie git commit
służy do zapisania zmian w lokalnym repozytorium. Tworzy ono nowy snapshot stanu projektu, co pozwala na śledzenie historii zmian. Każdy commit zawiera:
- Opis zmian: Krótka wiadomość wyjaśniająca, co zostało zmienione.
- Unikalny identyfikator: Generowany automatycznie hash, który identyfikuje commit.
- Metadane: Informacje o autorze, dacie i czasie wykonania commitu.
Jak używać git commit?
Dodaj zmiany do obszaru staging:
1 2
git add <nazwa_pliku> # Dodaje pojedynczy plik git add . # Dodaje wszystkie zmienione pliki
Wykonaj commit z wiadomością:
1
git commit -m "Krótki opis zmian"
Przykład:
1
git commit -m "Dodano nową funkcję logowania"
git push
Co to jest git push?
Polecenie git push
służy do wysyłania lokalnych commitów do zdalnego repozytorium, takiego jak GitHub. Umożliwia to innym członkom zespołu dostęp do najnowszych zmian i synchronizację pracy.
Jak używać git push?
Po wykonaniu commitów, aby przesłać je do zdalnego repozytorium, użyj:
1
git push origin <nazwa_gałęzi>
Przykład:
1
git push origin main
Jeśli pracujesz na gałęzi feature
, użyj:
1
git push origin feature
2. Git Rebase
Co to jest rebase?
Rebase w Git to proces przenoszenia lub łączenia sekwencji commitów na nowy commit bazowy. Pozwala to na aktualizację historii Twojej gałęzi, tak aby wyglądało to, jakbyś od początku pracował na najnowszej wersji gałęzi bazowej (np. main
lub master
).
Ilustracja procesu rebase:
Dlaczego używać rebase?
- Utrzymanie czystej, liniowej historii projektu, co ułatwia analizowanie i debugowanie.
- Unikanie merge commitów, które mogą komplikować historię.
- Aktualizacja Twojej gałęzi o najnowsze zmiany z gałęzi bazowej, bez tworzenia dodatkowych commitów scalających.
Ważne uwagi
- Rebase zmienia historię commitów. Tworzy nowe commity na podstawie istniejących, ale z nowym rodzicem.
- Unikaj rebase na publicznych gałęziach. Może to powodować konflikty i problemy dla innych deweloperów.
Krok po kroku: Jak wykonać rebase w terminalu?
Załóżmy, że pracujesz na gałęzi feature
, a główna gałąź to main
. Chcesz zaktualizować swoją gałąź feature
o najnowsze zmiany z main
.
1. Upewnij się, że wszystkie Twoje zmiany są zacommitowane
Przed rozpoczęciem rebase upewnij się, że nie masz niezatwierdzonych zmian.
1
git status
Jeśli masz zmiany, zacommituj je lub schowaj (np. za pomocą git stash
).
2. Przełącz się na swój branch feature
1
git checkout feature
3. Pobierz najnowsze zmiany z zdalnego repozytorium
1
git fetch origin
4. Wykonaj rebase swojej gałęzi na najnowszy main
1
git rebase origin/main
5. Rozwiązywanie konfliktów podczas rebase
Jeśli wystąpią konflikty, Git poinformuje Cię o tym. Rozwiąż konflikty, dodaj pliki do indeksu i kontynuuj rebase:
1
2
git add <plik_z_konfliktem>
git rebase --continue
Podczas kontynuowania rebase, pojawi się nam okienko interaktywne akcji w edytorze VIM. W nim mozemy np. zaktualizowac wiadomosc commita. Na ten moment zostawiamy wszystkie wartosci domyslne. W tym celu wystarczy, ze wyjdziemy z edytora. Aby to zrobic, kliknij przycisk ESC
na klawiaturze, wpisz sekwencje :wq
i wcisnij ENTER
.
6. Anulowanie rebase (opcjonalnie)
Aby przerwać rebase:
1
git rebase --abort
7. Wypchnij zaktualizowany branch do zdalnego repozytorium
Ponieważ historia Twojej gałęzi została zmieniona, musisz użyć opcji --force
podczas pushowania:
1
git push origin feature --force-with-lease
3. Force Push
Co to jest Force Push?
git push --force
to polecenie wymuszające nadpisanie historii zdalnej gałęzi Twoją lokalną historią. Jest to niebezpieczne, ponieważ może prowadzić do utraty pracy innych osób, jeśli nadpiszesz ich commity.
Kiedy używać Force Push?
- Po wykonaniu rebase na gałęzi, na której pracujesz sam.
- Gdy masz pewność, że nikt inny nie dokonał zmian na zdalnej gałęzi.
Jak bezpiecznie używać Force Push?
- Używaj
git push --force-with-lease
, który sprawdza, czy zdalna gałąź nie zmieniła się od czasu ostatniego fetch/pull.
4. Feature Branches
Co to są Feature Branches?
Feature branches to gałęzie służące do rozwijania nowych funkcjonalności lub poprawek, odseparowane od głównej gałęzi projektu (np. main
). Pozwala to na niezależną pracę bez wpływu na stabilność głównego kodu.
Dlaczego używać Feature Branches?
- Izolacja zmian: Twoje prace nie wpływają na innych, dopóki nie zostaną zmergowane.
- Bezpieczeństwo: Główna gałąź pozostaje stabilna.
- Łatwiejsze zarządzanie kodem: Ułatwia śledzenie zmian i potencjalne cofanie ich w razie problemów.
Jak tworzyć Feature Branches?
Przełącz się na gałąź bazową (np.
main
lub gałąź zespołową):1
git checkout main
Utwórz nową gałąź:
1
git checkout -b feature/nazwa-funkcjonalnosci
Przykład:
1
git checkout -b feature/dodanie-funkcji-logowania
5. Issues
Co to są Issues?
Issues na GitHubie to narzędzie do śledzenia zadań, błędów i propozycji. Pozwalają na:
- Opisanie problemu lub zadania.
- Przypisanie odpowiedzialnych osób (Assignees).
- Dodawanie etykiet (Labels) dla lepszej organizacji.
- Planowanie w ramach kamieni milowych (Milestones).
Jak tworzyć i zarządzać Issues?
Tworzenie Issue:
- Przejdź do zakładki Issues w repozytorium.
- Kliknij New Issue.
- Wprowadź tytuł i opis.
- Przypisz osoby i dodaj etykiety.
- Kliknij Submit new issue.
Zarządzanie:
- Komentuj i aktualizuj status.
- Zamykaj issue po zakończeniu zadania.
6. Pull Requests
Co to jest Pull Request?
Pull Request (PR) to prośba o włączenie Twoich zmian z jednej gałęzi do innej. Pozwala na:
- Przegląd kodu przez innych (Code Review).
- Dyskusję nad zmianami.
- Automatyczne testowanie (jeśli skonfigurowane).
Jak tworzyć Pull Request?
Wypchnij swój branch na zdalne repozytorium:
1
git push origin feature/nazwa-funkcjonalnosci
Utwórz PR na GitHubie:
- Przejdź do repozytorium.
- Kliknij Compare & pull request przy swoim branchu.
- Wypełnij tytuł i opis.
- Przypisz reviewerów i siebie jako assignee.
- Podlinkuj związane issues (np. wpisując
Closes #numer_issue
). - Kliknij Create pull request.
7. Code Review
Co to jest Code Review?
Code Review to proces, w którym inni programiści przeglądają Twój kod w celu:
- Znalezienia błędów.
- Sugerowania ulepszeń.
- Zapewnienia zgodności ze standardami kodowania.
Jak przeprowadzić Code Review?
Przejdź do Pull Requesta.
Przeczytaj zmiany:
- Przeglądnij zmienione pliki.
- Zwróć uwagę na logikę, czytelność i styl kodu.
Dodaj komentarze:
- Możesz komentować konkretne linie kodu.
- Sugeruj poprawki lub zadaj pytania.
Zatwierdź lub poproś o zmiany:
- Jeśli wszystko jest w porządku, zatwierdź PR (Approve).
- Jeśli wymagane są poprawki, zaznacz Request changes i opisz, co należy zmienić.
Zadania praktyczne
Krok po kroku
1. Dobierzcie się w zespoły
- Podzielcie się na zespoły 2-3 osobowe.
2. Utwórzcie wspólną gałąź zespołową
- Gałąź ta będzie pełniła rolę Waszego
main
. - Nazwa gałęzi powinna być nazwą Waszego zespołu, np.
team-alpha
.
1
2
git checkout -b team-alpha
git push origin team-alpha
3. Stwórz nowe Issue na GitHubie
- Przejdź do zakładki Issues i kliknij New Issue.
- Tytuł:
<nr indeksu> new feature enhancement
(np.12345 new feature enhancement
). - Opis: “Add my student index number to
hello.md
on line 3”. - Assignees: Przypisz siebie.
- Labels: Dodaj
enhancement
. Jeśli nie istnieje, utwórz nową etykietę. - Kliknij Submit new issue.
4. Sklonuj repozytorium na swoją lokalną maszynę
1
2
git clone <url-repozytorium>
cd <nazwa-repozytorium>
5. Utwórz swój feature branch od gałęzi zespołowej
- Upewnij się, że masz najnowsze zmiany:
1
2
3
git fetch origin
git checkout team-alpha
git pull origin team-alpha
- Utwórz nowy branch:
1
git checkout -b feature/team-alpha/<numer issue>/krotki-opis-zmian
Przykład:
1
git checkout -b feature/team-alpha/1/dodanie-numeru-indeksu
6. Wykonaj zadanie z Issue
- Edytuj plik
hello.md
, dodając swój numer indeksu na linii 3.
7. Zacommituj i wypchnij zmiany na zdalne repozytorium
- Skomituj zmiany z odpowiednią wiadomością:
1
2
git add hello.md
git commit -m "#<numer issue>: Add student index number to hello.md"
Przykład:
1
git commit -m "#1: Add student index number to hello.md"
- Wypchnij swój branch:
1
git push origin feature/team-alpha/1/dodanie-numeru-indeksu
8. Wykonaj rebase swojego brancha z gałęzią zespołową
- Upewnij się, że masz najnowsze zmiany z gałęzi zespołowej:
1
2
3
git fetch origin
git checkout team-alpha
git pull origin team-alpha
- Przełącz się na swój branch:
1
git checkout feature/team-alpha/1/dodanie-numeru-indeksu
- Wykonaj rebase:
1
git rebase team-alpha
Jeśli wystąpią konflikty:
- Rozwiąż konflikty w plikach, dodając swój numer indeksu po przecinku, jeśli to konieczne.
Dodaj zmodyfikowane pliki:
1
git add <plik>
Kontynuuj rebase:
1
git rebase --continue
Wypchnij zaktualizowany branch:
1
git push origin feature/team-alpha/1/dodanie-numeru-indeksu --force-with-lease
9. Utwórz Pull Request na GitHubie
- Przejdź do repozytorium na GitHub.
- Kliknij Compare & pull request dla swojego brancha.
- Tytuł PR: Opisujący Twoje zmiany, np. “Dodanie numeru indeksu do hello.md”.
- Opis: Szczegółowe informacje o zmianach.
- Reviewers: Dodaj członków swojego zespołu.
- Assignees: Przypisz siebie.
- Podlinkuj Issue: W opisie PR wpisz
Closes #<numer issue>
, np.Closes #1
. - Kliknij Create pull request.
10. Wykonaj Code Review dla PR-ów członków zespołu
- Przejdź do zakładki Pull Requests.
- Wybierz PR kolegi/koleżanki.
- Przejrzyj zmiany, dodaj komentarze, jeśli to konieczne.
- Zatwierdź PR (Approve).
11. Po otrzymaniu akceptacji, zmerguj swojego Pull Requesta
- Kliknij Merge pull request.
- Potwierdź scalanie.
12. Zamknij stworzone przez siebie Issue
- Jeśli PR był powiązany z Issue poprzez
Closes #<numer issue>
, Issue zostanie zamknięte automatycznie. - Jeśli nie, przejdź do Issue i kliknij Close issue.
Wskazówki końcowe:
- Bądź ostrożny z
git push --force
. Używaj--force-with-lease
, aby uniknąć przypadkowego nadpisania cudzych zmian. - Regularnie komunikuj się z zespołem. Jeśli masz wątpliwości, pytaj innych.
- Praktyka czyni mistrza. Im więcej będziesz pracować z Git, tym bardziej intuicyjne staną się te procesy.