~~NOCACHE~~ ~~REVEAL theme=simple&size=1024x800~~ ====== Git w Visual Studio ====== ===== Jak utworzyć repozytorium git? ===== Różne sposoby * repozytorium w Azure Repos, zdalne, powstaje przy tworzeniu projektu w Web Portal * istniejące repozytorium (zdalne, lokalne) można sklonować \\ (np. z GitHub, Azure Repos) * automatyczne tworzenie repozytorium dla nowych projektów w Visual Studio \\ * tworzenie repozytorium dla istniejącego projektu w VS ===== Klonowanie repozytorium z Azure DevOps ===== * **Team Explorer** -> **Manage Connections** -> **Connect to Project** -> **Clone** |{{zajecia:znd_2020_1:manage-connections.png?400}}|{{zajecia:znd_2020_1:vs2017-connect-dialog.png?400}} | Źródło: https://docs.microsoft.com/en-us/azure/devops/repos/git/ ===== Klonowanie z innych źródeł ===== - **Team Explorer** -> **Local Git Repositories** -> **Clone** - adres repozytorium (zdalne lub lokalne) -ścieżka katalogu lokalnej wersji repozytorium {{zajecia:znd_2020_1:clone_other_providers.png?400}} ===== Dodawanie rozwiązania do git ===== Wybieramy **Add to Source Control** z paska statusu {{zajecia:znd_2020_1:add_to_source_control.png?400}} przed {{:zajecia:znd_2020_1:added_to_source_control.png?400|}} po ===== Publikowanie repozytorium ===== * **Team Explorer** -> **Sync** -> **Publish Git Repo** |{{:zajecia:znd_2020_1:publish-git-repo.png?400|}} |{{:zajecia:znd_2020_1:vsts-publish-repo.png?400|}} | ===== Konfiguracja repozytorium ===== * ustawienia globalne dla wszystkich repozytoriów (np. Imię, Nazwisko i email programisty) \\ **Team Explorer -> Settings -> Global settings** * ustawienia lokalne - specyficzne dla danej kopii repozytorium (np. adres zdalny repozytorium) \\ **Team Explorer -> Settings -> Repository settings** \\ {{zajecia:znd_2020_1:global-settings-username-email.png?400}} ===== Konfiguracja adresów ===== * **Fetch** adres źródłowy pobierania zmian * **Push** adres docelowy wysyłania zmian * **origin** domyślna nazwa zdalnego repozytorium {{zajecia:znd_2020_1:remotes.png?500}} ===== Git stages ===== |{{ zajecia:znd_2020_1:git_stages.png?600 }}| ===== Najważniejsze komendy ===== * **add**: dodanie nowego pliku do rewizji (śledzenie zmian) * **commit**: zatwierdzenie zmian - powstaje nowy węzeł w repozytorium (lokalnie) * **push** wypchnięcie zmian do zdalnego repozytorium * **pull** pobranie zmian i scalenie z lokalną kopią * tworzenie i scalanie (**merge**) gałęzi * cofanie zmian (**revert**), przywracanie poprzednich stanów (**reset**) * przeglądanie i porównywanie zmian w kodzie ===== commit: zatwierdzanie zmian ===== * ** Team Explorer** -> **Changes** lista zmian oczekujących na zatwierdzenie * **commit** - zatwierdzenie zmian * zmiany muszą być opatrzone opisem |{{zajecia:znd_2020_1:changes.png?400}} | {{zajecia:znd_2020_1:commit-all.png?400|}} | ===== Synchronizacja ze zdalnym repozytorium ===== * ''push'' - wypchnięcie zmian * ''fetch'' - pobieranie zmian (ale bez scalania) * ''pull'' = ''fetch'' + ''merge'' - pobieranie zmian i łączenie z lokalną kopią * ''sync'' = ''pull'' + ''push'' | {{zajecia:znd_2020_1:synchronization-menu.png?400}} | {{zajecia:znd_2020_1:fetch.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 ===== * **Undo changes** - wycofywanie niezatwierdzonych zmian * **Revert** - cofanie zatwierdzonych zmian, nie zmienia historii ale tworzy nowy //commit//, * **Reset** - przywraca historyczną wersję repozytorium. \\ Nie należy używać na współdzielonych z zespołem gałęziach |{{ zajecia:znd_2020_1:vs_reset_single_file.gif?400}}|{{zajecia:znd_2020_1:vs_revert_changes.png?400}}| {{zajecia:znd_2020_1:vs_reset_branch.png?400}}| ===== 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 ====== * **Team Explorer** -> **Branches** -> **New Local Branch From....** {{zajecia:znd_2020_1:vsbranch.gif}} ===== Scalanie gałęzi (merge) ===== **merge** - scalanie zmian z innej gałęzi do aktualnej gałęzi |{{zajecia:znd_2020_1:select-merge-after-checking-out-master-branch.png?400}} \\ {{zajecia:znd_2020_1:merge-conflict-resolved.png?400}}|{{zajecia:znd_2020_1:fill-source-branch-name-and-click-merge.png?400}}| ===== Konflikty ===== * łączenie kodu odbywa się automatycznie jeżeli to możliwe * konflikt, gdy ta sama linia została zmieniona w osobnych gałęziach i automatyczne scalenie nie jest możliwe * może wystąpić przy operacji **pull**, **sync**, **merge** {{zajecia:znd_2020_1:merge_prompt_vs.png?500}} ===== Rozwiązywanie konfliktów ===== * **Take source** - nadpisz zmianami ze źródłowej gałęzi * **Keep Target** - nadpisz zmianami z docelowej gałęzi {{zajecia:znd_2020_1:resolving-merge-conflicts-view-files-causing-conflicts.png?400}} ===== Ręczne scalanie konfliktów ===== {{zajecia:znd_2020_1:image34.png?800}} ===== Pull request ==== 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 |{{ zajecia:znd_2020_1:pull-requests.png?300 }}| {{ zajecia:znd_2020_1:new-pull-request.png?300 }}| ===== Typowy workflow ===== {{https://3kllhk1ibq34qk6sp3bhtox1-wpengine.netdna-ssl.com/wp-content/uploads/bitbucket411-blog-1200x-branches2.png?600}} Ź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 ===== A successful Git workflow ===== {{http://nvie.com/img/git-model@2x.png?450}} Źródło: http://nvie.com/ ===== Więcej informacji ===== * {{https://docs.microsoft.com/en-us/azure/devops/repos/git/?view=azure-devops|Azure Repos Git Documentation}} * [[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