~~NOCACHE~~
~~SLIDESHOW~~
====== Azure DevOps Repos ======
===== Azure Repos - przegląd =====
* **Azure Repos** - zestaw narzędzi kontroli wersji do zarządzania kodem projektu, małego i dużego
* kontrola wersji zapisuje kolejne migawki plików, dzięki czemu można wrócić do dowolnej wersji kodu i koordynować zmiany w zespole
* dwa rodzaje kontroli wersji: **Git** (rozproszona) i **Team Foundation Version Control (TFVC)** (scentralizowana)
* dostępne w Azure DevOps Services i w Azure DevOps Server
* dla nowych projektów Git jest domyślnym wyborem
===== Git w Azure Repos =====
* standardowy Git: można używać dowolnych klientów i narzędzi (Git dla Windows i macOS, usługi Git innych dostawców, Visual Studio, Visual Studio Code)
* nieograniczona liczba prywatnych repozytoriów Git
* integracja ze środowiskami: wiersz poleceń, Visual Studio Code, Visual Studio, Xcode, Eclipse, IntelliJ
* powiązanie commitów, gałęzi i pull requestów z zadaniami w Azure Boards
===== Pull requesty i przegląd kodu =====
* przegląd kodu w zespole przed scaleniem zmian: komentarze, głosowanie (zatwierdzenie, odrzucenie)
* wymaganie, aby zmiany przechodziły build i testy, zanim zostaną scalone
* powiązanie pull requesta z zadaniami (work items)
* scalanie z opcją squash merge
* obsługiwane modele pracy z gałęziami i pull requestami (Git branching guidance)
===== Polityki gałęzi =====
* ochrona kluczowych gałęzi (np. głównej), na których zespół polega
* wymaganie pull requesta do wprowadzania zmian: bezpośrednie wypchnięcia do chronionej gałęzi są odrzucane
* dodatkowe warunki: poprawny build scalonego kodu (//Build validation//), akceptacja przez wielu recenzentów
* uprawnienia do gałęzi (branch permissions) pozwalają ograniczyć, kto może wprowadzać zmiany
===== Status pull requesta =====
* dodatkowe, własne wymagania wobec kodu (np. zewnętrzne kontrole jakości lub zgodności)
* **pull request status**: zewnętrzna usługa programowo zatwierdza lub odrzuca zmianę przez zwrócenie informacji o sukcesie lub niepowodzeniu
* status staje się częścią przepływu pull requesta i może być wymagany przez politykę gałęzi
* przykładowe implementacje: własny serwer statusu (Node.js) lub Azure Functions
===== Forki =====
* **fork** - pełna kopia repozytorium (pliki, commity, opcjonalnie gałęzie)
* izolowanie zmian eksperymentalnych, ryzykownych lub poufnych od oryginalnego kodu
* nowe pliki, foldery i gałęzie nie są współdzielone między repozytoriami, dopóki nie przeniesie ich pull request
* po zakończeniu pracy zmiany wraca się do oryginalnego repozytorium przez pull request
===== Git i TFVC - porównanie =====
* **Team Foundation Version Control (TFVC)**
* scentralizowany: pełna historia zmian tylko na serwerze, lokalnie zazwyczaj jedna wersja każdego pliku
* kontrola dostępu aż do poziomu pojedynczego pliku
* gałęzie oparte na ścieżkach (path-based), tworzone na serwerze
* **git**
* rozproszony, każdy użytkownik posiada pełną kopię repozytorium
* praca offline i lokalne zatwierdzanie zmian
* większość operacji wykonywana lokalnie (szybkie działanie)
* wygodny mechanizm tworzenia gałęzi
* elastyczny, obsługuje różne modele pracy (//workflow//)
===== Git i TFVC - narzędzia =====
^ Rodzaj kontroli wersji ^ Klienci i środowiska ^
| [[source_control_git|Git]] | wiersz poleceń, Visual Studio Code, Visual Studio, Xcode, Eclipse, IntelliJ |
| [[source_control_tfs|TFVC]] | Visual Studio, Xcode, Eclipse |
Źródło: dokumentacja Microsoft Learn (Azure Repos)
===== Typowy workflow =====
- tworzymy nową gałąź (nowa funkcja, naprawa błędu, ...)
- zmieniamy zawartość nowej gałęzi i zatwierdzamy zmiany (**commit**)
- po zakończeniu pracy wysyłamy gałąź do zdalnego repozytorium (**push**)
- tworzymy //pull request//: przegląd kodu, a polityki gałęzi wymuszają m.in. poprawny build, testy i akceptację recenzentów; do PR można powiązać zadania (work items)
- po zatwierdzeniu scalamy zmiany z gałęzią główną (np. squash merge), a następnie aktualizujemy lokalne kopie i rozwiązujemy ewentualne konflikty
===== Git Flow - A successful Git branching model =====
{{https://nvie.com/img/git-model@2x.png?450}}
Źródło: https://nvie.com/
===== Azure Repos w ekosystemie Azure DevOps =====
* **Azure Boards**: powiązanie zadań z commitami i pull requestami, tworzenie gałęzi z zadania
* **Azure Pipelines**: polityka //Build validation// uruchamia build i testy dla pull requesta
* **DevSecOps**: GitHub Advanced Security for Azure DevOps skanuje sekrety, zależności i kod w repozytoriach Git w Azure Repos
* współpraca z GitHub i innymi dostawcami Git
===== Azure Repos i AI =====
* **Azure DevOps MCP Server** daje asystentowi AI dostęp do pull requestów, ich zmian i powiązanych zadań
* przykłady: lista pull requestów bez aktywności od ponad 5 dni, omówienie wpływu zmian z pull requesta na biznes, przygotowanie do przeglądu kodu
* **Copilot Autofix** (public preview) proponuje poprawki podatności jako pull request
* zmiany generowane przez AI podlegają tym samym politykom gałęzi i przeglądowi kodu
===== Więcej informacji =====
* [[https://learn.microsoft.com/en-us/azure/devops/repos/get-started/what-is-repos|Collaborate on code - Azure Repos]]
* [[https://learn.microsoft.com/en-us/azure/devops/repos/git/|Azure Repos Git Documentation]]
* [[https://learn.microsoft.com/en-us/azure/devops/repos/git/git-branching-guidance|Git branch and pull request workflows]]
* [[https://learn.microsoft.com/en-us/azure/devops/repos/git/branch-policies-overview|Branch policies overview]]
* [[https://git-scm.com/|Git]]
* [[http://fizyka.umk.pl/~jacek/dydaktyka/inzynieria/Git.pdf|Git i GitLab w Visual Studio]] by Jacek Matulewski