Systemy kontroli wersji Git i GitHub

System kontroli wersji

  • repozytorium kodu (i nie tylko) z historią zmian
  • mechanizmy współdzielenia pracy członków zespołu, synchronizacja zmian
  • śledzenie zmian w kodzie, porównywanie różnic w wersjach kodu, patche
  • rozwój kolejnych wersji i gałęzi oprogramowania oraz mechanizmy łączenia ich
  • historia rozwoju, dokumentacja zmian w kolejnych wersjach
  • kopie bezpieczeństwa - możliwość wycofania zmian, powrotu do poprzedniego stanu

Git

  • zdecentralizowany, każdy użytkownik posiada pełną kopię repozytorium
  • można pracować lokalnie
  • większość operacji wykonywana lokalnie (szybszy w działaniu od scentralizowanych)
  • wygodny mechanizm tworzenia gałęzi
  • elastyczny, możliwość wdrożenia różnych workflow (procesów wytwórczych)
  • usługi udostępniające repozytoria git: GitHub, Azure DevOps, GitLab, BitBucket

Architektura rozproszona

Źródło: http://git-scm.com

Każdy węzeł przechowuje całą historię repozytorium.

Historia zmian projektu

  • master (lub main) - gałąź główna
  • branches - odgałęzienia, wersje rozwojowe
  • tags - wersja zamrożona (np. v.1.0), etykieta

Repozytoria git w Visual Studio

  • git - repozytoria lokalne i zdalne
    • automatyczne tworzenie repozytorium dla nowych projektów w Visual Studio
    • istniejący projekt można umieścic w repozytorium
  • integracja z GitHub (lub innymi np. Azure DevOps)
    • repozytorium można utworzyć na stronie usługi
    • istniejące repozytorium (zdalne, lokalne) można sklonować
    • publikowanie zmian do GitHub

Dodawanie rozwiązania do git

Wybieramy Add to Source Control z paska statusu

przed

po

Okno: Zmiany git

  • WidokZmiany git

Okno: Repozytorium git

  • WidokRepozytorium Git

Etapy pracy git

Najważniejsze komendy

  • Dodaj (add): dodanie nowego pliku do śledzenia
  • Zatwierdź (commit): zatwierdzenie zmian, powstaje nowy węzeł w repozytorium (lokalnie)
  • Wypchnij (push): wypchnięcie zmian do zdalnego repozytorium
  • Ściągnij (pull): pobranie zmian i scalenie z lokalną kopią
  • tworzenie i scalanie gałęzi (merge)
  • cofanie zmian (revert), przywracanie poprzednich stanów (reset)
  • przeglądanie i porównywanie zmian w kodzie

Zatwierdzanie zmian

  • okno Zmiany git zawiera listę wykrytych zmian
  • Zatwierdź wszystko (commit) - zatwierdzenie zmian
  • zmiany muszą być opatrzone opisem

Historia zmian

  • historia zmian - każda zatwierdzona zmiana tworzy węzeł w repozytorium


Porównywanie zmian w pliku

Cofanie zmian

  • Cofnij zmiany (Undo changes) - wycofywanie niezatwierdzonych zmian
  • Przywróć (Revert) - cofanie zatwierdzonych zmian, nie zmienia historii ale tworzy nowy punkt w historii
  • Resetuj (Reset) - przywraca historyczną wersję repozytorium

Ćwiczenia

  1. Dodaj rozwiązanie projektu (dowolnego) do repozytorium git
  2. Dokonaj przynajmniej jednej zmiany w kodzie i zatwierdź zmiany w repozytorium
  3. Obejrzyj zmiany w oknie historii
  4. Porównaj zmiany

Gałęzie (branches)

  • gałęzie zawierają równolegle rozwijane wersje kodu, pomiędzy którymi możemy w prosty sposób się przełączać (checkout)
  • master domyślna nazwa głównej gałęzi

Tworzenie gałęzi

  • GitNowa gałąź

Scalanie gałęzi (merge)

  • zaznacz gałąź docelową (master) → „Scal master z … ” - scalanie zmian z innej gałęzi do aktualnej gałęzi

GitHub

Synchronizacja ze zdalnym repozytorium

  • Wypchnij (push) - wypchnięcie zmian
  • Pobierz (fetch) - pobieranie zmian (ale bez scalania)
  • Ściągnij (pull) - pobieranie zmian i scalenie z lokalną kopią
  • Sync - ściągnij a następnie wypchnij

Żądanie ściągnięcia

Po wysłaniu zmian umieszczonych w osobnej gałęzi możemy poprosić członków zespołu o weryfikację kodu i dodanie do głównej gałęzi

VS 2022 GitHub

Typowy przepływ pracy

Źródło: https://www.atlassian.com/blog/bitbucket/5-pull-request-must-haves

  1. tworzymy nową gałąź (nowa funkcja, naprawa błędu, …)
  2. zmieniamy zawartość nowej gałęzi i zatwierdzamy zmiany (commit)
  3. gdy praca skończona wysyłamy gałąź do zdalnego repozytorium (push)
  4. składamy prośbę (pull request) o weryfikację kodu i integrację z główną gałęzią
  5. gdy zmiany zostaną przyjęte, wówczas aktualizujemy lokalną kopię ze zmianami, które mogli nanieść inni użytkownicy, rozwiązujemy konflikty

A successful Git workflow

Źródło: http://nvie.com/

Klonowanie repozytorium z GitHub

GitKlonuj repozytorium

VS 2022 GitHub

Zadanie 1

  1. Załóż konto w usłydze GitHub (jesli jeszcze nie posiadasz)
  2. Zaakceptuj zadanie, którego adres otrzymałeś pocztą. Adres zaproszenia znajduje się również na stronie Moodle tutaj
  3. Sklonuj rozwiązanie znajdujące się w repozytorium GitHub
  4. Wykonaj zadanie zgodnie z treścią. Treść zadania znajdziesz także w pliku README.md w repozytorium
  5. Wypchnij rozwiązanie zadania do repozytorium GitHub skojarzonego z tym zadaniem

Napisz program, który prosi o wprowadzenie linii tekstu a następnie wyrysowuje podany tekst w ramce wg. poniższego wzoru

Podaj tekst: Witaj Świecie

*****************
* Witaj Świecie *
*****************

Więcej informacji