Użytkowanie komputerów i podstawy systemów operacyjnych - laboratorium 09 i 10
Post

Użytkowanie komputerów i podstawy systemów operacyjnych - laboratorium 09 i 10

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:

  1. Podstawowe komendy Git
  2. Git Rebase
  3. Force Push
  4. Feature Branches
  5. Issues
  6. Pull Requests
  7. 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?

  1. Dodaj zmiany do obszaru staging:

    1
    2
    
    git add <nazwa_pliku>       # Dodaje pojedynczy plik
    git add .                   # Dodaje wszystkie zmienione pliki
    
  2. 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:

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?

  1. Przełącz się na gałąź bazową (np. main lub gałąź zespołową):

    1
    
    git checkout main
    
  2. 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?

  1. 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.
  2. 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?

  1. Wypchnij swój branch na zdalne repozytorium:

    1
    
    git push origin feature/nazwa-funkcjonalnosci
    
  2. 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?

  1. Przejdź do Pull Requesta.

  2. Przeczytaj zmiany:

    • Przeglądnij zmienione pliki.
    • Zwróć uwagę na logikę, czytelność i styl kodu.
  3. Dodaj komentarze:

    • Możesz komentować konkretne linie kodu.
    • Sugeruj poprawki lub zadaj pytania.
  4. 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.