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)
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
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
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
- Dodaj rozwiązanie projektu (dowolnego) do repozytorium git
- Dokonaj przynajmniej jednej zmiany w kodzie i zatwierdź zmiany w repozytorium
- Obejrzyj zmiany w oknie historii
- 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
Scalanie gałęzi (merge)
- zaznacz gałąź docelową (master) → „Scal master z … ” - scalanie zmian z innej gałęzi do aktualnej gałęzi
GitHub
- repozytoria publiczne i prywatne
- zarządzanie projektem zespołowym: zgłoszenia Issue Tracker
- komentarze do kodu
- mechanizm żądania ściągnięcia (pull request) i rewizje kodu
- integracja z wieloma narzędziami
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
Typowy przepływ pracy
Źródło: https://www.atlassian.com/blog/bitbucket/5-pull-request-must-haves
- tworzymy nową gałąź (nowa funkcja, naprawa błędu, …)
- zmieniamy zawartość nowej gałęzi i zatwierdzamy zmiany (commit)
- gdy praca skończona wysyłamy gałąź do zdalnego repozytorium (push)
- składamy prośbę (pull request) o weryfikację kodu i integrację z główną gałęzią
- gdy zmiany zostaną przyjęte, wówczas aktualizujemy lokalną kopię ze zmianami, które mogli nanieść inni użytkownicy, rozwiązujemy konflikty
Zadanie 1
- Załóż konto w usłydze GitHub (jesli jeszcze nie posiadasz)
- Zaakceptuj zadanie, którego adres otrzymałeś pocztą. Adres zaproszenia znajduje się również na stronie Moodle tutaj
- Sklonuj rozwiązanie znajdujące się w repozytorium GitHub
- Wykonaj zadanie zgodnie z treścią. Treść zadania znajdziesz także w pliku README.md w repozytorium
- 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
- Git i GitLab w Visual Studio by Jacek Matulewski