Źródło: http://maxpixel.freegreatpicture.com/Marking-Newspaper-Paper-Marker-Hands-Pens-News-2317273

Pytanie brzmi następująco: jak rozróżnić kto napisał/narysował dany fragment, jeżeli wszyscy używają tego samego albo podobnego długopisu? W pewnym momencie karta może wyglądać na przykład tak:

bazgroly.jpgAutentyk, strona z mojego zeszytu od religii, jakieś 15 lat temu. Pozdrawiam klasę 3a :)

I nie ma winnego, kto narysował swastykę.

Pisząc kod w grupie/zespole sytuacja wygląda bardzo podobnie. Gdy jest on pisany w parze i każdy tworzy swój plik nie ma problemów ze śledzeniem zmian oraz scalaniem efektów pracy. Gdy uczestników jest więcej powstaje problem scalania stworzony fragmentów. Aby uporać się z problemami:

  • śledzenia zmian,
  • scalania efektów pracy,
  • swobodnego dostępu do wybranego fragmentu projektu

stworzono repozytorium śledzenia zmian (ang. version control). Odbywa się to w następujący sposób: każdy z jego użytkowników tworzy kopię (klonuje, ang. clone) repozytorium, która jest dostępna dla wszystkich zainteresowanych (główne/centralne repozytorium jest nazywane po angielsku origin). Tę kopię przechowuje się na swoim komputerze. Na tym repozytorium ustawia punkt kontrolny (coś jak save point w grze, tutaj nazywany ang. commit), od którego zaczyna pracować. Po zakończeniu pracy uczestnik zapisuje zmiany do swojego repozytorium (ustanawia nowy punkt kontrolny czyli robi tzw. commit). W tym momencie taki użytkownik jest w posiadaniu repozytorium z dwoma historycznymi punktami (dwoma commitami), pomiędzy którymi może dowolnie się przełączać, tak jak uruchamiać save point'a w grze, który zapamiętuje jej aktualny stan). Operacje skoku z jednego punktu w inny jest nazywane checkout (UWAGA: w starszych repozytoriach typu SVN checkout robi co innego). Efektem takich commitów może być następujący graf, który wizualizuje kolejne punkty kontrolne wprowadzane do repozytorium:

poszczegolne-commity.pngZrzut ekranu: poszczególne commity

Użytkownik może teraz kontynuować wprowadzanie zmian, tworząc kolejne punktu kontrolne (commity), jak również wysyłać zmiany do repozytorium centralnego. Ta akcja nazywana jest push. Repozytorium centralne (origin), po otrzymaniu takich zmian naniesie je na aktualne dane, po czym zmiany te będą widoczne dla pozostałych uczestników, którzy mogą zaktualizować swoje lokalne repozytoria o nowe zmiany. Pobieranie nowych danych z repozytorium nazywane jest pull.

Inne funkcje repozytorium

Repozytoria poza śledzeniem zmian pozwalają również na lepsze zarządzanie projektem. Można je rozgałęzić z dowolnego miejsca i rozwijać równolegle z główną gałęzią (ang. branch). Główna gałąź, która zwyczajowo nazywana jest master a sama gałąź po angielsku to branch. Co to daje? Otóż można rozdzielić pracę tak, aby zespoły pracujące nad różnymi częściami oprogramowania nie wchodziły sobie w drogę, a w dogodnym momencie, gdy wszyscy są na to gotowi- scalić je (ang. merge), jak widać poniżej:

merge.pngZrzut ekranu: rozgałęzianie repozytorium

Dodatkowo takie rozgałęzianie daje możliwość porzucenie gałęzi, która była rozwijana ale w chwili obecnej jest niepotrzebna. Będzie można do niej wrócić gdy zajdzie taka potrzeba albo usunąć ją, gdy jednak okaże się zbędna dla projektu.

Problemy

Każde narzędzie trzeba umiejętnie obsługiwać, aby nie spowodować szkód. O ile repozytorium rozwiązuje sporo problemów i pozwala przemieszczać się po wszystkich historycznych stanach projektu, istnieją sytuacje, gdy coś jest nie tak. Klasycznym scenariuszem jest tutaj konflikt przy pobieraniu/wysyłaniu zmian z głównego repozytorium, gdy dwie lub więcej osób pracowało nad tym samym plikiem w tej samej linii. Czasami jest tak, że repozytorim nie potrafi jednoznacznie rozstrzygnąć, które zmiany powinny zostać wprowadzone i wysuwa ostrzeżenie o konflikcie. W tym momencie osoba, która pobiera zmiany musi zdecydować które rzeczy powinny wejść do zmiany a które są nieistotne. Można także samemu zapędzić się w kozi róg wysyłając do centralnego repozytorium zmiany, których nie chcieliśmy tam umieścić- usuwanie zmian na centralnym repozytorium może narobić naprawdę solidnego bałaganu.

Narzędzia

Obecnie najpopularniejszym repozytorium jest git, który posiada wiele implementacji. Ogólnodostępną i najbardziej rozpowszechnioną (a przy tym darmową) jest github.com a także bitbucket.org (ten posiada darmowe prywatne repozytoria). Wcześniej, choć w niektórych firmach nadal można je spotkać, popularnym był SVN a jeszcze wcześniej CVS. Naturalnie istnieją inne, bardzo zbliżone do poczciwego git'a repozytoria jak np. Mercurial.

Powiązane tematy

URL

URL

"W internecie jest wszystko." Do każdego zasobu jest tak samo daleko, wystarczy znać jego adres. Adres zasobu to ścieżka, która prowadzi dokładnie do tej rzeczy. W niej samej zakodowane jest sporo interesujących informacji. Czytaj całość

Aplikacje hybrydowe

Aplikacje hybrydowe

Problem pojawia się, gdy programista zaznajomiony z konkretną platformą staje przed zadaniem napisania "tego samego" na inną platformę. Wtedy jego wiedza może się okazać co najmniej niewystarczająca, a niekiedy nawet może przeszkadzać w poznawaniu nowego. Czytaj całość

Enkapsulacja

Enkapsulacja

Gdy przychodzi potrzeba opakowania warstwy danych w inną warstwę danych, to mamy do czynienia z enkapsulacją, o której słów kilka w poniższym artykule. Czytaj całość


Piotr Poźniak

Piotr Poźniak

Programuję od ponad 15 lat. Prowadzę software house. Angażuję i zachęcam wszystkich do programowania w ramach inicjatywy Programowanie jest łatwe.

Bądź pierwszy, podziel się swoją opinią!

Obrazek przedstawiający nadgryzione ciasteczko