Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ~~NOCACHE~~ ~~REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024x768~~ ====== 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) * [[https://git-scm.com/]] * usługi udostępniające repozytoria git: [[https://github.com/|GitHub]], [[https://azure.microsoft.com/pl-pl/products/devops/|Azure DevOps]], [[https://about.gitlab.com/|GitLab]], [[https://bitbucket.org/|BitBucket]] ===== Architektura rozproszona ===== |{{http://git-scm.com/figures/18333fig0102-tn.png?400|}} | {{http://git-scm.com/figures/18333fig0103-tn.png?400}}| <fs x-small>Źródło: http://git-scm.com</fs> 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 {{https://i.stack.imgur.com/mvc6E.png?600}} ===== 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 {{zajecia:cs:vs_dodaj_do_kontroli.png?600}} przed {{zajecia:cs:vs_dodaj_do_kontroli_2.png?600}} po ===== Okno: Zmiany git ===== * **Widok** -> **Zmiany git** {{zajecia:cs:vs_zmiany_git.png?400}} {{zajecia:cs:vs_git_zmiany_2.png?350}} ===== Okno: Repozytorium git ===== * **Widok** -> **Repozytorium Git** {{https://learn.microsoft.com/pl-pl/visualstudio/version-control/media/git-source-control-repository-management.png?800|}} ===== Etapy pracy git ===== |{{ zajecia:znd_2020_1:git_stages.png?600 }}| ===== 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 {{zajecia:cs:vs_git_zatwierdz.png?400|}} ===== Historia zmian ===== * historia zmian - każda zatwierdzona zmiana tworzy węzeł w repozytorium {{zajecia:znd_2020_1:history-abcd.png?300}} \\ {{zajecia:znd_2020_1:git_history.png?400}} ===== Porównywanie zmian w pliku ===== {{zajecia:znd_2020_1:vs-diff-changes.png}} ===== 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 |{{ zajecia:cs:vs_cofnij.png?400}}|{{zajecia:cs:vs_git_cofnij.png?300}}| ==== Ć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 {{zajecia:znd_2020_1:branch.png}} ===== Tworzenie gałęzi ====== * **Git** -> **Nowa gałąź** {{zajecia:cs:vs_git_nowa_galaz.png?400|}} ===== Scalanie gałęzi (merge) ===== * zaznacz gałąź docelową (master) -> "Scal master z ... " - scalanie zmian z innej gałęzi do aktualnej gałęzi | {{zajecia:cs:vs_git_scal.png?400|}} | {{zajecia:znd_2020_1:merge-conflict-resolved.png?400}} | ===== GitHub ===== * https://github.com/ * 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 * [[https://learn.microsoft.com/pl-pl/visualstudio/version-control/git-create-github-account?view=vs-2022|Tworzenie konta usługi GitHub do użycia z programem Visual Studio]] ===== 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 | {{zajecia:cs;vs_push_menu.png?300}} | {{zajecia:cs:vs_git_wypchnij.png?400|}} | ===== Żą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 ^ |{{ zajecia:cs:vs_pull_request.png?400 }}| {{ zajecia:cs:github_pull_request.png?400 }}| ===== Typowy przepływ pracy ===== {{https://3kllhk1ibq34qk6sp3bhtox1-wpengine.netdna-ssl.com/wp-content/uploads/bitbucket411-blog-1200x-branches2.png?600}} <fs x-small>Źródło: https://www.atlassian.com/blog/bitbucket/5-pull-request-must-haves</fs> ===== ===== - 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 ===== A successful Git workflow ===== {{http://nvie.com/img/git-model@2x.png?450}} <fs x-small>Źródło: http://nvie.com/ </fs> ===== Klonowanie repozytorium z GitHub ===== **Git** -> **Klonuj repozytorium** ^ VS 2022 ^ ^ GitHub ^ |{{zajecia:cs:vs_klonuj.png?300}}|{{zajecia:cs:vs_klonuj_2.png?300}}|{{zajecia:cs:github_clone.png?300}}| ===== 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 [[https://moodle.umk.pl/mod/assign/view.php?id=120981|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 <file> Podaj tekst: Witaj Świecie ***************** * Witaj Świecie * ***************** </file> ===== Więcej informacji ===== * [[http://git-scm.com/|git - fast version control]] * {{http://fizyka.umk.pl/~jacek/dydaktyka/inzynieria/Git.pdf|Git i GitLab w Visual Studio }} by Jacek Matulewski * [[https://learn.microsoft.com/en-us/visualstudio/version-control/git-with-visual-studio?view=vs-2022|Start with Git & GitHub in Visual Studio]]