Użytkowanie komputerów i podstawy systemów operacyjnych - laboratorium 11 i 12
Post

Użytkowanie komputerów i podstawy systemów operacyjnych - laboratorium 11 i 12


Wprowadzenie

Na dzisiejszych zajęciach zajmiemy się zaawansowanymi operacjami w Git, takimi jak fork, squash i cherry-pick. Omówimy również podstawy języka Markdown, który jest powszechnie używany do tworzenia plików README i dokumentacji w projektach.

Fork

Fork to kopia istniejącego repozytorium, która pozwala na niezależne rozwijanie kodu bez wpływu na oryginalne repozytorium. Fork jest tworzony na Twoim koncie GitHub i dziedziczy historię oraz ustawienia widoczności oryginalnego repozytorium.

Aby wykonać fork:

  1. Zaloguj się na swoje konto GitHub.
  2. Przejdź do strony głównej repozytorium, które chcesz zforkować.
  3. Kliknij przycisk Fork w prawym górnym rogu strony.
  4. Wybierz swoje konto jako miejsce docelowe.

Po wykonaniu forka będziesz mieć pełną kopię repozytorium na swoim koncie, gdzie możesz wprowadzać zmiany niezależnie od oryginału.

Markdown

Markdown to lekki język znaczników przeznaczony do formatowania tekstu w prosty sposób. Jest powszechnie używany do tworzenia plików README, dokumentacji i komentarzy na platformach takich jak GitHub.

Podstawowe elementy składni Markdown:

  • Nagłówki: używamy # dla oznaczenia poziomu nagłówka.

    1
    2
    
    # Nagłówek poziomu 1
    ## Nagłówek poziomu 2
    
  • Listy: używamy - dla list nienumerowanych lub 1. dla list numerowanych.

    1
    2
    3
    4
    5
    
    - Element listy
    - Kolejny element
    
    1. Pierwszy punkt
    2. Drugi punkt
    
  • Obrazy: wstawiamy za pomocą ![tekst alternatywny](URL_obrazka).

    1
    
    ![Opis obrazka](http://adres.obrazka)
    
  • Kod: fragmenty kodu umieszczamy w znacznikach backtick `.

    1
    
    `fragment kodu`
    

Więcej informacji na temat składni Markdown znajdziesz w Markdown Guide.

Squash

Squash to proces łączenia wielu commitów w jeden. Pozwala to na uproszczenie historii commitów przed udostępnieniem kodu innym członkom zespołu. Squashowanie commitów oznacza, że bierzesz zmiany z kilku commitów i scalasz je w jeden, co sprawia, że historia jest bardziej przejrzysta.

Jak wykonać squash za pomocą git rebase -i?

  1. Sprawdź historię commitów:

    1
    
    git log --oneline
    

    Przykładowy wynik:

    1
    2
    3
    4
    5
    
    a1b2c3d Dodanie linku do GitHuba
    e4f5g6h Dodanie obrazu z kotem
    i7j8k9l Dodanie listy hobby
    m0n1o2p Krótki opis o sobie
    q3r4s5t Inicjalny commit
    
  2. Uruchom interaktywne rebase:

    Aby zesquashować ostatnie 3 commity w jeden, uruchom:

    1
    
    git rebase -i HEAD~4
    

    Spowoduje to otwarcie edytora (domyślnie VIM) z listą ostatnich commitów:

    1
    2
    3
    4
    
    pick m0n1o2p Krótki opis o sobie
    pick i7j8k9l Dodanie listy hobby
    pick e4f5g6h Dodanie obrazu z kotem
    pick a1b2c3d Dodanie linku do GitHuba
    
  3. Edytuj listę commitów:

    • Naciśnij i, aby przejść w tryb edycji.
    • Zmień słowa pick na squash (lub skrótowo s) przy commitach, które chcesz zesquashować z pierwszym.

    Powinno to wyglądać tak:

    1
    2
    3
    4
    
    pick m0n1o2p Krótki opis o sobie
    squash i7j8k9l Dodanie listy hobby
    squash e4f5g6h Dodanie obrazu z kotem
    squash a1b2c3d Dodanie linku do GitHuba
    
  4. Zapisz i zamknij edytor:

    • Naciśnij Esc, aby wyjść z trybu edycji.
    • Wpisz :wq i naciśnij Enter, aby zapisać i zamknąć edytor.
  5. Edytuj wiadomość commita:

    Po zapisaniu pojawi się nowy ekran w edytorze, gdzie możesz edytować wiadomość wynikowego commita.

    Przykładowa treść:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    # This is a combination of 4 commits.
    # The first commit's message is:
    
    Krótki opis o sobie
    
    # This is the 2nd commit message:
    
    Dodanie listy hobby
    
    # This is the 3rd commit message:
    
    Dodanie obrazu z kotem
    
    # This is the 4th commit message:
    
    Dodanie linku do GitHuba
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    
    • Naciśnij i, aby edytować.
    • Usuń niepotrzebne wiadomości lub połącz je w jedną sensowną.

    Przykład po edycji:

    1
    
    squashed commits <twój numer indeksu> - added AboutMe.md file
    

    Zastępując <twój numer indeksu> swoim numerem, np.:

    1
    
    squashed commits 12345 - added AboutMe.md file
    
  6. Zapisz i zamknij edytor:

    • Naciśnij Esc, aby wyjść z trybu edycji.
    • Wpisz :wq i naciśnij Enter.
  7. Sprawdź wynik:

    • Wyświetl historię commitów:

      1
      
      git log --oneline
      
    • Powinieneś zobaczyć, że ostatnie commity zostały połączone w jeden.

    Przykładowy wynik:

    1
    2
    
    z9y8x7w squashed commits 12345 - added AboutMe.md file
    q3r4s5t Inicjalny commit
    

Cherry-pick

Cherry-pick to operacja pozwalająca na wybranie konkretnego commita z jednej gałęzi i zastosowanie go w innej gałęzi. Jest to przydatne, gdy chcemy przenieść pojedyncze zmiany bez łączenia całych gałęzi.

Jak wykonać cherry-pick?

  1. Zidentyfikuj commit do przeniesienia:

    • Przejdź na gałąź, z której chcesz wziąć commit (np. main):

      1
      
      git checkout main
      
    • Wyświetl historię commitów:

      1
      
      git log --oneline
      

      Przykładowy wynik:

      1
      2
      3
      
      abcdef1 Dodanie znaku specjalnego do AboutMe.md
      z9y8x7w squashed commits 12345 - added AboutMe.md file
      q3r4s5t Inicjalny commit
      
    • Skopiuj identyfikator (hash) commita, który chcesz przenieść (abcdef1).

  2. Przejdź na gałąź docelową:

    1
    
    git checkout feature/<twój_numer_indeksu>/cherrypick
    
  3. Wykonaj cherry-pick:

    1
    
    git cherry-pick abcdef1
    
    • Jeśli nie ma konfliktów, commit zostanie dodany do Twojej gałęzi.
    • Jeśli wystąpią konflikty, Git poinformuje Cię o tym:

      1
      2
      3
      4
      5
      6
      
      error: could not apply abcdef1... Dodanie znaku specjalnego do AboutMe.md
      hint: Resolve all conflicts manually, mark them as resolved with
      hint: "git add/rm <conflicted_files>", then run "git cherry-pick --continue".
      hint: You can instead skip this commit: run "git cherry-pick --skip".
      hint: To abort and get back to the state before "git cherry-pick",
      hint: run "git cherry-pick --abort".
      
  4. Rozwiąż konflikty (jeśli wystąpiły):

    • Edytuj pliki z konfliktami, usuń znaczniki konfliktu i wprowadź odpowiednie zmiany.
    • Dodaj zmodyfikowane pliki:

      1
      
      git add <plik>
      
    • Kontynuuj cherry-pick:

      1
      
      git cherry-pick --continue
      
  5. Sprawdź wynik:

    • Wyświetl historię commitów:

      1
      
      git log --oneline
      
    • Powinieneś zobaczyć, że commit został dodany do Twojej gałęzi.

Zadania

  1. Wykonaj forka bieżącego repozytorium do swojego konta na GitHubie.

  2. Sklonuj repozytorium na lokalną maszynę:

    1
    2
    
    git clone https://github.com/twoj-login/nazwa-repozytorium.git
    cd nazwa-repozytorium
    
  3. Utwórz nową gałąź:

    1
    
    git checkout -b feature/<twój_numer_indeksu>/markdown
    

    Przykład:

    1
    
    git checkout -b feature/12345/markdown
    
  4. Stwórz plik AboutMe.md i uzupełnij go.

    • Przed rozpoczęciem, przejrzyj składnię pliku README.md w repozytorium.
    • Plik AboutMe.md powinien zawierać następujące sekcje (każdy z podpunktów wykonaj jako osobny commit):

      a) Krótki opis przedstawiający, kim jesteś.

      b) Lista Twoich hobby.

      c) Obraz z kotem.

      d) Link do Twojego profilu GitHub.

  5. Dokument powinien być odpowiednio sformatowany:

    • Każdy z punktów powinien mieć swój własny nagłówek (# lub ##).
    • Lista z hobby powinna być stworzona jako lista wypunktowana.
    • Obrazek powinien być linkiem do obrazka kota z internetu.
    • Link do GitHuba powinien być sformatowany jako fragment kodu (użyj backticków `).
  6. Commituj zmiany po każdym podpunkcie:

    • Przykład dla pierwszego podpunktu:

      1
      2
      
      git add AboutMe.md
      git commit -m "Dodanie krótkiego opisu o sobie"
      
  7. Wykonaj squash commitów:

    • Zesquashuj ostatnie trzy commity w jeden za pomocą komendy:

      1
      
      git rebase -i HEAD~4
      

      Pojawi się lista ostatnich commitów w edytorze:

      1
      2
      3
      4
      
      pick m0n1o2p Krótki opis o sobie
      pick i7j8k9l Dodanie listy hobby
      pick e4f5g6h Dodanie obrazu z kotem
      pick a1b2c3d Dodanie linku do GitHuba
      
    • Zmień pick na squash przy commitach, które chcesz połączyć:

      1
      2
      3
      4
      
      pick m0n1o2p Krótki opis o sobie
      squash i7j8k9l Dodanie listy hobby
      squash e4f5g6h Dodanie obrazu z kotem
      squash a1b2c3d Dodanie linku do GitHuba
      
    • Zapisz i zamknij edytor (:wq).

    • Edytuj wiadomość commita, ustawiając ją na:

      1
      
      squashed commits <twój numer indeksu> - added AboutMe.md file
      

      Przykład:

      1
      
      squashed commits 12345 - added AboutMe.md file
      
    • Zapisz i zamknij edytor.

  8. Wypchnij zmiany na zdalne repozytorium:

    • Ponieważ historia została zmieniona, użyj opcji --force:

      1
      
      git push origin feature/12345/markdown --force
      
  9. Stwórz Pull Request i poproś prowadzącego o weryfikację.

    • Po akceptacji, zmerguj Pull Request.
  10. Utwórz nową gałąź feature/<twój_numer_indeksu>/gui:

    1
    2
    
    git checkout main
    git checkout -b feature/<twój_numer_indeksu>/gui
    
  11. Utwórz nową gałąź feature/<twój_numer_indeksu>/cherrypick:

    1
    2
    
    git checkout main
    git checkout -b feature/<twój_numer_indeksu>/cherrypick
    
  12. Wróć do gałęzi main i w pliku AboutMe.md dodaj jeden znak specjalny do pierwszej linijki.

    • Na przykład, dodaj * na początku pierwszej linijki.
    • Zacommituj i wypchnij zmiany:

      1
      2
      3
      
      git add AboutMe.md
      git commit -m "Dodanie znaku specjalnego do AboutMe.md"
      git push origin main
      
  13. Przejdź na gałąź feature/<twój_numer_indeksu>/gui:

    1
    
    git checkout feature/<twój_numer_indeksu>/gui
    
  14. Używając graficznego interfejsu użytkownika (GUI) do Gita:

    • Otwórz repozytorium w wybranym narzędziu (np. IntelliJ IDEA, Visual Studio Code, SourceTree).
    • W pliku AboutMe.md dodaj zdanie “lorem ipsum” w pierwszej linijce.
    • Zacommituj i wypchnij zmiany za pomocą GUI.
  15. Wykonaj rebase gałęzi feature/<twój_numer_indeksu>/gui z gałęzią main:

    • Użyj funkcji rebase w GUI.
    • Podczas rebase mogą wystąpić konflikty.
    • Rozwiąż konflikty, np.:

      • W pliku AboutMe.md zdecyduj, czy zachować dodany znak specjalny, czy zdanie “lorem ipsum”, czy oba.
      • Zapisz plik po rozwiązaniu konfliktu.
      • Kontynuuj rebase.
    • Wypchnij zaktualizowaną gałąź na zdalne repozytorium (może być konieczne użycie opcji --force).
  16. Stwórz Pull Request i poproś prowadzącego o weryfikację.

    • Po akceptacji, zmerguj Pull Request.
  17. Przejdź na gałąź feature/<twój_numer_indeksu>/cherrypick:

    1
    
    git checkout feature/<twój_numer_indeksu>/cherrypick
    
  18. Wykonaj cherry-pick ostatniego commita z gałęzi main:

    • Znajdź identyfikator ostatniego commita na main (np. abcdef1).
    • Wykonaj cherry-pick:

      1
      
      git cherry-pick abcdef1
      
  19. Wypchnij zmiany, stwórz Pull Request i poproś prowadzącego o weryfikację.

Podsumowanie

Podczas tych zajęć nauczyliśmy się:

  • Jak wykonać fork repozytorium na GitHubie.
  • Podstaw korzystania z języka Markdown do tworzenia plików README i dokumentacji.
  • Jak wykonać squash commitów za pomocą git rebase -i w terminalu.
  • Jak używać git cherry-pick do przenoszenia pojedynczych commitów między gałęziami.
  • Pracy z gałęziami w Git, zarówno z użyciem terminala, jak i graficznych interfejsów użytkownika.
  • Jak tworzyć i zarządzać Pull Requestami na GitHubie.

Dodatkowe Materiały


Ćwiczenia do Samodzielnego Wykonania

  1. Eksperymentuj z git rebase -i, aby lepiej zrozumieć, jak działa interaktywne rebase i jakie możliwości oferuje.
  2. Spróbuj użyć git revert do cofnięcia zmian w repozytorium.
  3. Zapoznaj się z innymi narzędziami GUI do Gita, takimi jak GitKraken, Tower czy Git Extensions.

Pamiętaj, że praktyka czyni mistrza. Im więcej będziesz pracować z Gitem, tym bardziej intuicyjne staną się te procesy.