Assembla.com zajęcia 1 Autor: Marcin Gadamer System kontroli wersji System kontroli wersji (ang. version/revision control system) - oprogramowanie służące do śledzenia zmian głównie w kodzie źródłowym oraz pomocy programistom w łączeniu i modyfikacji zmian dokonanych przez wiele osób w różnych momentach. Systemy kontroli wersji dzielone są wg : architektury oprogramowania licencji oprogramowania sposobu oceny zamian Systemy kontroli wersji dzielą się na: scentralizowane, oparte na architekturze klient-serwer (np. CVS, Subversion) rozproszone, oparte na architekturze P2P (np. Git, Mercurial). W tych pierwszych istnieje jedno centralne repozytorium, z którym wszyscy użytkownicy systemu synchronizują swoje zmiany. Systemy rozproszone pozwalają na przechowywania repozytorium lokalnego oraz dopiero jako drugiego repozytorium centralnego. Sposób oceny zmian Niektóre systemy kontroli wersji operują na poziomie zmian zawartości plików, podczas gdy inne na zestawach zmian (ang. changeset). Użycie mechanizmu zestawu zmian umożliwia śledzenie zmian, nawet gdy pliki w projekcie zmieniają swoje nazwy i położenie w katalogach. Jednym z najprostszych systemów kontroli wersji jest RCS (Revision Control System), który operuje na pojedynczych plikach. Bardziej zaawansowany jest system CVS (Concurrent Versions System. CVS umożliwia m.in. współbieżną pracę wielu programistów, tworzenie odgałęzień (ang. branch), rozwiązywanie konfliktów wersji. CVS ma też pewne ograniczenia, np. metadane o plikach nie są wersjonowane, a zatwierdzanie zmian wielu plików nie jest atomowe (w przypadku np. awarii połączenia może zostać zatwierdzona tylko część zmian). Aby wyeliminować wady CVS powstał system Subversion, zwany również SVN. Subversion jest bardzo podobny w obsłudze do CVS, ale oferuje szereg udogodnień, takich jak atomowe transakcje, wersjonowanie zmian nazwy plików czy efektywne wersjonowanie plików binarnych. Do przechowywania zmian zastosowana została baza danych Berkeley DB. Obecnie coraz większą popularność zyskują rozproszone systemy kontroli wersji.
Subversion podstawowe komendy i polecenia checkout - pobieranie plików z repozytorium commit - wysłanie do repozytorium lokalnie dokonanych zmian update- pobranie zmian pomiędzy aktualną kopią w repozytorium a kopią roboczą merge - scalanie zmian dokonanych w różnych gałęziach revert cofnięcie do rewizji utworzonej wcześniej add dodanie pliku do synchronizacji status sprawdzenie statusu plików Serwis Assembla.com Główne moduły: zarządzanie zadaniami - task management, śledzenie/raportowanie błędów - issue tracking, zarządzanie zadaniami - cardwall (Kanban), spotkania SCRUM - scrum meetings, metodyka Agile - agile project management, repozytoria kodu - subversion repositories (Subversion, Git, Perforce and Mercurial source control), wiki, tablica z wiadomościami o stanie prac - message boards Zadania do wykonania: Założenie konta w serwisie: 1. Założenie konta w serwisie www.assembla.com a. My Start lewy (górny róg menu) /Utwórz konto (po prawej stronie) b. Założyć tymczasowe konto pocztowe można w serwisie http://www.mailinator.com (adres mailowy z pola Alternate Address for this Inbox) c. Potwierdzić konto kliknąć na link w mailu Please, click on this link to verify your email address 2. Po zalogowaniu w serwisie kliknąć na Utwórz własną przestrzeń roboczą 3. Kliknąć Utwórz projekt publiczny 4. Wybrać Subversion with Integrated Task & Bug Tracking (popular) 5. Wpisać wymagane dane dla Space name (będzie to nazwa dla stworzonego projektu) 6. Nacisnąć przycisk Create the space
Utworzenie na dysku lokalnym kopii roboczej: UWAGA! Aby móc korzystać z repozytorium kodu należy na swoim komputerze zainstalować klienta systemu SVN na zajęciach będziemy korzystać z programu TortoiseSVN 1. Wybrać w lewym górnym menu utworzony wcześniej projekt (nazwa projektu) 2. Kliknąć w zakładkę Kod źródłowy/svn 3. Skopiować adres z pola svn URL 4. Utworzyć na dysku komputera odpowiedni folder dla repozytorium (np. na dysku D:\ utworzyć katalog Lotus-SVN\nazwa_konta) 5. W folderze nacisnąć prawym przyciskiem myszy i wybrać SVN Checkout
6. Podać skopiowany adres repozytorium z serwisu Assembla a. Powinny utworzyć się podkatalogi i w oknie klienta SVN powinien pojawić się komunikat Completed: At revision: 1: Command: Checkout from https://subversion.assembla.com/svn/abc, revision HEAD, Fully recursive, Externals included Added: D:\ abc \trunk Added: D:\ abc \branches Added: D:\ abc \readme.textile Added: D:\ abc \tags Completed: At revision: 1 Pierwsze zmiany w swoim repozytorium (pierwszy commit): 1. W katalogu D:\SVN-Lotus\nasza_nazwa\trunk proszę utworzyć plik mojplik.txt 2. W pliku mojplik.txt wpisać dowolny tekst (kilka linijek) 3. Wysłać do repozytorium lokalnie dokonanych zmian polecenie commit a. Nacisnąć prawym przyciskiem myszy na katalogu trunk b. Wybrać opcję SVN Commit c. Wpisać komunikat, zaznaczyć plik/pliki jakie mają zostać dodane do repozytorium i zakończyć klikając na OK d. W serwisie w zakładce Kod źródłowy/svn sprawdzić zmiany 4. Wykonać kilka następnych zmian w pliku / dodać kolejne pliki i foldery i wykonać dalsze wysyłania do repozytorium
Dodanie współpracownika do projektu 1. W serwisie kliknąć na zakładkę Grupa 2. Wyszukać współpracownika po prawej stronie wpisując jego login w wyszukiwarkę Login name or e-mail address a. Proszę dodać osobę siedzącą na zajęciach obok jako współpracownika 3. Nacisnąć przycisk invite 4. Po kliknięciu przycisku invite do współpracownika został wysłany mail z prośbą o dołączenie 5. Współpracownik powinien potwierdzić chęć dołączenia do zespołu klikając w link z otrzymanego maila 6. Po pozytywnym zaakceptowaniu zaproszenia powinna w serwisie Assembla na liście My Start pojawić się przestrzeń robocza osoby zapraszającej (lewy górny róg ekranu)
7. Współpracownik powinien pobrać kopię roboczą nowego repozytorium do swojego lokalnego folderu. a. Wykonać punkty z instrukcji Utworzenie na dysku lokalnym kopi roboczej b. UWAGA! katalog z drugim repozytorium należy utworzyć w innej lokalizacji, przykładowo: i. D:\SVN-lotus\nazwa_naszego_konta ii. D:\SVN-lotus\inna_nazwa_dla_projektu_jako_współpracownik c. UWAGA2! Proszę nie checkout ować nowego projektu w katalogu/podkatalogu który jest już synchronizowany przez SVN Wspólnie dokonać zmian w repozytorium przez Właściciela i współpracownika (polecenia commit, update, merge, rozwiązywanie konfliktów) 1. Gdy chcemy wprowadzić zmiany do repozytorium klikamy prawym przyciskiem myszy na folderze z projektem i wybieramy SVN commit 2. Gdy chcemy ściągnąć z repozytorium najnowsze zmiany klikamy prawym przyciskiem myszy na folderze z projektem i wybieramy SVN update 3. Przy pobieraniu najnowszych zmian z repozytorium system automatycznie próbuje scalić zmiany (merge) pomiędzy wersją plików w repozytorium, a pomiędzy plikami z kopii roboczej. Gdy system nie jest w stanie automatycznie scalić zmian powstaje konflikt i to użytkownik musi zadecydować samodzielnie jakie zmiany zaakceptować, a jakie odrzucić. Sytuacje w których mogą powstać konflikty: 1. W jednym pliku dwie osoby dokonują zmian w tej samej linijce. 2. Jedna osoba wprowadza dokonane zmiany do repozytorium poprzez polecenie commit 3. Druga osoba posiadając lokalnie wprowadzone zmiany w tej samej linijce wykonuje polecenie update 4. W tym momencie istnieją trzy wersje tego samego pliku: a. Wersja podstawowa (przed ostatnim wywołanym poleceniem commit) pochodząca z repozytorium b. Wersja ze zmianą przez osobę pierwszą (po ostatnim wywołaniu polecenia commit) pochodząca z repozytorium c. Wersja ze zmianą przez osobę drugą pochodząca z lokalnego dysku drugiej osoby 5. Po wywołaniu polecenia update plik oznaczony jest jako konfliktowy (czerwony kolor) i w kopii roboczej (na dysku komputera) tworzone są trzy pliki: a. nazwapliku.r<nr_wersji_podstawowej> (punkt 4a) b. nazwapliku.r<nr_wersji_z_ostatnia_zmiana> (punkt 4b) c. nazwapliku.mine (punkt 4c) 6. Użytkownik powinien zdecydować jakie zmiany powinny być utworzone/odrzucone i zmienić plik na podstawie stworzonych nowych plików, a stworzone pliki wykasować.