Systemy kontroli wersji

19 stycznia 2016 10:27
Artur Grochowski
development vcs git workflow

Systemy kontroli wersji

Ale po co?

Osobiście sam pamiętam, że gdy tworzyłem swoje pierwsze projekty nie mając świadomości o istnieniu takiego narzędzia to gdy czułem potrzebę zachowania jakiegoś stanu aplikacji po prostu kopiowałem folder. Ostatecznie kończyłem z katalogiem zawierającym dużo podkatalogów z różnymi wersjami aplikacji. Później wpadłem na pomysł by foldery nazywać aktualną datą. Mimo wszystko nie było to ani dobre ani ładne rozwiązanie. Systemy kontroli wersji zarządzają tym za nas.

Podział

Systemy te możemy podzielić na 3 rodzaje:

  • lokalny - repozytorium jest dostępne jedynie lokalnie u kogoś na komputerze.
  • scentralizowany - repozytorium jest dostępne zdalnie (przez internet), jednakże jest ono tylko jedno.
  • zdecentralizowany (rozproszony) - repozytorium jest dostępne zarówno zdalnie jak i lokalnie (jego tzw. clony, czyli dokładnie kopie).

Bardzo łatwo wytłumaczyć wady pierwszych dwóch rozwiązań na przykładzie historyjki.

Załóżmy, że postanowiłeś stworzyć jakiś mały projekt i zakładasz, że jedyną osobą która będzie nad nim pracowała to będziesz ty. Po kilku dniach pracy postanawiasz pochwalić się swoim dziełem w pracy/szkole. Okazuje się, że nie jesteś jedyną osobą która chciałaby z tobą nad tym pracować. Tutaj pojawia się problem systemu lokalnego, tzn. brak możliwości pracy w zespole. Na siłę byłoby to możliwe ale tylko zakładając, że ktoś by przychodził do ciebie do domu z każdą zmianą. W takim wypadku stwierdzasz, że można by projekt razem z systemem kontroli wersji wrzucić na jakiś zdalny serwer (stworzyć system scentralizowany). Wszystko fajnie się układa do momentu gdy na serwerze gdzie trzymamy nasze repozytorium nie ulegnie poważna awaria - jeżeli utracimy dane z serwera to jest to równoznaczne z utratą całej historii projektu. Drugą wadą jest brak dostępu do repozytorium offline. Dla przykładu załóżmy, że akurat lecisz samolotem i chciałbyś sprawdzić historię niektórych zmian czy aby na pewno były dobre. Niestety jest to niewykonalne w tego typu rozwiązaniu. Systemy zdecentralizowane (rozproszone) rozwiązują wszystkie poprzednie problemy.

Workflow

Workflow jest swego rodzaju algorytmem. Odpowiada ono za określenie nam procesu w jakim pracuje programista/zespół. Opiszę tutaj bardzo proste workflow, które znajduje swoje rozwiązanie np. w projektach open source.

  • Po pierwsze jeżeli chcemy się za coś zabrać to musimy mieć do tego zadanie (ticket), np. powiedzmy, że chcemy stworzyć jakąś funkcję do powszechnie znanej biblioteki.
  • Drugim krokiem jest wzięcie ticketa na siebie i najczęściej zmienienie jego statusu na "in progress" (aby 2 osoby nie pracowały nad tym samym) po czym dopiero zaczynami pracę nad zadaniem (kodzenie).
  • Po zakończeniu ticketa powinniśmy stworzyć tzw. pull request do danego repozytorium. Twór taki jest wyrazem naszej chęci aby twórca biblioteki wciągnął naszą funkcję do swojej biblioteki. Zawiera on przede wszystkim zmiany w kodzie jakie dokonaliśmy.
  • Nasz pull request musi przejść fazę tzw. code review - czyli weryfikacji napisanego przez nas kodu przez inne osoby. Dużo osób (głównie młodszych) odbiera code review jako coś negatywnego, gdzie bardziej doświadczeni programiści próbują cię zamęczyć na śmierć drobnymi zmianami (takimi jak styl kodu np.). Należy do tego podchodzić jako najlepszy sposób pozyskania wiedzy :).
  • Gdy nasz kod przejdzie code review to nasz pull request zostanie zmergowany (wciągnięty) do głównego brancha.

GIT

Git jest obecnie najpopularniejszym systemem kontroli wersji, stosowanym zarówno w projektach domowych, open source'owych jak i dużych projektach komercyjnych. Jeżeli chodzi o techniczne zapoznanie się z nim to zachęcam do odwiedzenia artykułu Krzysztofa Kwaśniaka - http://pypila.stxnext.pl/blog/co-ten-git/. Myślę, że nie ma potrzeby przepisywania tego jeszcze raz, bo wyczerpał materiał wystarczająco. Po szerszy zakres wiedzy odsyłam do literatury https://git-scm.com/book/en/v2. Książka jest darmowa, dostępna w wielu formatach i dość solidnie wyjaśnia z czym to wszystko się je (tak, tak, nie jest krótka...).

Dołączam również link do prezentacji z wykładu: http://slides.com/arturgrochowski/vcs-1#/

Related pages

Comments