System zarządzania wersjami I – Subversion
Transkrypt
System zarządzania wersjami I – Subversion
Inżynieria Oprogramowania 1 System zarządzania wersjami I System zarządzania wersjami I – Subversion Na tych zajęciach poznamy reguły pracy z systemami zarządzania wersjami oraz przećwiczymy podstawowe, najczęściej wykonywane operacje w takich systemach. Bazować będziemy na systemie Subversion (SVN), jednak wiele schematów działania i zasad przenosi się bezpośrednio na inne systemy, m.in. rozproszone systemy Git czy Mercurial. Wyjątkiem są tutaj operacje tworzenia gałęzi oraz łączenia wyników pracy wielu użytkowników pracujących na jednym repozytorium, które mocno zależą od filozofii konkretnego systemu. Tutaj skupimy się tylko na wyjaśnieniu koncepcji, zostawiając ćwiczenia w wybranym systemie zainteresowanym studentom. Narzędzie nr 1: TortoiseSVN Narzędzie TortoiseSVN jest rozszerzeniem do Windowsa, które umożliwia pracę z repozytorium bardzo „przezroczyście”. Użytkownik traktuje zarządzanie wersjami jako element naturalny systemu, co ma tę zaletę, że uczy dobrych praktyk – nie tylko w programowaniu, ale również w wersjonowaniu np. dokumentów. Znakomita większość operacji jest dostępna z menu kontekstowego, tj. menu dostępnego po naciśnięciu prawego przycisku myszy – najczęściej na pliku lub folderze. Ćwiczenie 1.1. Checkout z repozytorium 1. Utworzyć katalog repo, np. w C:\temp\infXXXXX zamieniając XXXXX swoim numerem indeksu. Po zajęciach oczywiście po sobie sprzątamy i usuwamy taki katalog. 2. Na katalogu repo wybrać z menu kontekstowego SVN Checkout… 3. Wypełnić okienko wstawiając URL: https://ophelia.cs.put.poznan.pl/svn/io2011/infXXXXX/lab02 i wybrać przycisk OK. 4. Gdy pojawi się pytanie o użytkownika i hasło, wpisać otrzymane od prowadzącego dane. 5. Komunikat typu Completed oraz odpowiednia ikonka na folderze repo (po odświeżeniu) informują nas, że operacja zakończyła się powodzeniem. 6. Sprawdzić, czy w repo pojawiły się katalogi branches, tags oraz trunk. Jest to skutek używania zalecanej struktury repozytorium i ma znaczenie przy tworzeniu gałęzi (o tym w części 3). strona 1 / 8 Inżynieria Oprogramowania 1 System zarządzania wersjami I Ćwiczenie 1.2. Tworzenie folderów i zapis plików 1. W katalogu repo/trunk utworzyć katalog test. Nowo powstały folder nie będzie wyróżniony żadnym symbolem, gdyż folder ten nie znajduje się jeszcze na serwerze, w repozytorium. 2. Na nowym folderze wybieramy TortoiseSVN/Add… i OK. Wskazany folder został oznaczony do dodania (ale tylko lokalnie, ciągle nie ma go w repozytorium!). 3. Do założonego katalogu należy zapisać plik Fibonacci.java. 4. Z menu kontekstowego pliku Fibonacci.java wybieramy opcję TortoiseSVN/Add… i OK. 5. Zapis nowej wersji pliku na serwer można wykonać wybierając na katalogu test (lub repo albo trunk) SVN Commit… W okienku należy wpisać komentarz do dodawanej wersji pliku, np. „pierwsza wersja klasy”. I wybrać OK. Ćwiczenie 1.3. Modyfikacja plików 1. Zasymulujemy modyfikację pliku nadpisując go zmienioną wersją (z pliku Fibonacci2.java, zmieniając nazwę na Fibonacci.java). 2. Zmiana powinna zostać wykryta: 3. Wprowadzoną zmianę (wypisywanie 20 a nie 10 liczb) można zapisać na serwerze przy pomocy operacji SVN Commit. W komentarzu wersji należy wpisać: „wypisywanie 20 liczb”. strona 2 / 8 Inżynieria Oprogramowania 1 System zarządzania wersjami I Ćwiczenie 1.4. Wypisywanie logu zmian pliku 1. Na Fibonacci.java wybieramy TortoiseSVN/Show log 2. System wyświetli listę zmian, które są powiązane z danym plikiem. Ćwiczenie 1.5. Różnice 1. Zmodyfikuj plik Fibonacci.java zmieniając Created on 2004-10-04 na Created on 04-10-2004 2. Na „naszym” Fibonaccim wybieramy TortoiseSVN/Diff. Pokaże się wówczas okienko, które obrazuje, jakie są różnice wersji lokalnej w stosunku do wersji ostatnio pobranej z repozytorium. Ćwiczenie 1.6. Cofnięcie do wersji z repozytorium 1. Powiedzmy, że wprowadzone zmiany były niepoprawne i chcielibyśmy pobrać poprzednią wersję. 2. Klikamy prawym na naszym pliczku i wybieramy TortoiseSVN/Revert… 3. Wyświetlając zawartość pliku zobaczymy poprzednią wersję: Created on 2004-10-04. Pamiętajmy, że powrót do poprzedniej wersji nie oznacza uaktualnienia do najnowszej wersji będącej w repozytorium, ale do wersji, którą ostatnio pobraliśmy z repozytorium! Operacja cofnięcia jest operacją lokalną, nie nawiązuje kontaktu z repozytorium. Należy o tym pamiętać przy współdzieleniu repozytorium z innymi. Narzędzie nr 2: Eclipse Eclipse sam w sobie nie jest oczywiście narzędziem do zarządzania wersjami, jednak od początku w jego projekcie przewidziana jest możliwość „wpięcia” plug-inów do komunikowania się z systemami zarządzania wersjami. Standardowo w Eclipse 3.3 dostarczane są wtyczki do obsługi repozytoriów CVS (od wersji 3.4 również SVN). Aby korzystać z Subversion należy doinstalować wtyczki Subversive albo Subclipse. Na zajęciach korzystamy z tego pierwszego. Poniższe ćwiczenia polegają z grubsza na tym samym co już przeprowadzone z narzędziem TortoiseSVN, więc ich opis jest bardziej uproszczony. Tam gdzie to istotne zaznaczono specyfikę Eclipse'a. Warto pamiętać, że większość operacji będzie wyglądała podobnie podczas pracy z innymi wtyczkami (Subclipse, praca z CVS), dzięki temu, że mechanizm zarządzania wersjami jest elementem platformy Eclipse. Ćwiczenie 2.1. Utworzenie projektu w repozytorium 1. W Eclipse utworzyć nowy projekt Java: File/New/Project... i Java/Java Project. 2. Podać nazwę, np. test-svn; upewnić się, że ustawienia rozdziału plików .java i .class są takie jak poniżej: strona 3 / 8 Inżynieria Oprogramowania 1 System zarządzania wersjami I 3. Kliknąć Finish. 4. Z menu kontekstowego projektu wybrać Team/Share project... 5. Wybieramy typ repozytorium SVN 6. Dalej podajemy URL i dane użytkownika (Uwaga: Proszę podać dokładnie taki URL jak w ćwiczeniu 1.1.) 7. Po poprzednim kroku mamy utworzoną informację o repozytorium. Może w nim być wiele projektów. Dlatego na następnym ekranie podajemy katalog, w którym ma być umieszczony nasz projekt, w ramach zdefiniowanego repozytorium. Możliwych jest wiele schematów układu katalogów projektów w repozytorium. Proszę użyć ustawień jak na rysunku poniżej; skutkują one strukturą uwzględniającą gałęzie i tagi na poziomie repozytorium (czyli w lab02, a poniżej projektu test-svn). strona 4 / 8 Inżynieria Oprogramowania 1 System zarządzania wersjami I 8. Po wciśnięciu Finish, Eclipse poprosi o podanie komentarza do Commita. Podajemy np. „import projektu Eclipse”. Ciekawostką jest fakt, że jest to drugi commit, zawartości projektu. Pierwszy został wykonany automatycznie i polegał na utworzeniu tylko folderu projektu w SVN – najprostszy sposób, aby wykluczyć istnienie w repozytorium projektu o podanej nazwie. 9. Obecnie projekt jest obecny w repozytorium, oraz lokalnie. Kopia lokalna jest „standardową” kopią SVN, o czym można się przekonać wykonując dowolne operacje z poziomu TortoiseSVN na folderze projektu Eclipse. Oznacza to np. że dodając do projektu pliki z poziomu TortoiseSVN nie ryzykujemy niespójności repozytorium – Eclipse działa tutaj jak „nakładka” na projekt, podobnie jak TortoiseSVN jako „nakładka” na system plików. Ćwiczenie 2.2. Dodawanie plików 1. Z poziomu Windowsa dodajemy do folderu src plik Fibonacci.java. 2. W Eclipse odświeżamy projekt (Refresh w menu kontekstowym projektu lub klawisz F5). 3. Rozwijając drzewko do poziomu dodanego pliku widzimy obok ikonkę ze znakiem zapytania. Oznacza ona, że plik jest nieznany z punktu widzenia repozytorium, tzn. został dodany lokalnie, ale w repozytorium go nie ma. Zwróćmy też uwagę na symbol > obok projektu. Oznacza on, że w tym projekcie są jakieś rozbieżności pomiędzy repozytorium a wersją lokalną (najczęściej zmodyfikowane lokalnie pliki). 4. Na projekcie wybieramy Team/Synchronize with Repository. Perspektywa, która się pokazała jest podstawową z punktu widzenia operacji na kopii lokalnej i repozytorium. strona 5 / 8 Inżynieria Oprogramowania 1 System zarządzania wersjami I 5. Widzimy, że Eclipse wykonuje automatycznie niektóre operacje, np. oznaczył do dodania plik Fibonacci.java. 6. Na projekcie wybieramy z menu kontekstowego Commit... i wpisujemy komentarz, np. „dodano plik Fibonacci.java”. 7. Eclipse informuje nas, że nie ma więcej zmian w stosunku do repozytorium; podobnie w perspektywie Java, nie widać oznaczań zmian lokalnych na ikonach w drzewku. Ćwiczenie 2.3. Pobieranie projektu z repozytorium Teraz spróbujemy pobrać projekt z repozytorium. Żeby było to skuteczne na projekcie wybieramy z menu kontekstowego Delete i zaznaczamy opcję Also delete contents under '...'. 1. Wybieramy z File/Import... i SVN/Projects from SVN. 2. Wybieramy nasz profil repozytorium z listy. 3. Zaznaczamy na liście folder trunk/test-svn i klikamy Finish. 4. Potwierdzamy checkout zasobu jako osobny projekt. 5. Sprawdzamy, czy „w środku” jest wszystko tak, jak przed rozpoczęciem ćwiczenia. Ćwiczenie 2.4. Modyfikacja i różnice w plikach 1. Z poziomu Windows podmieniamy zawartość Fibonacci.java (patrz ćwiczenie 1.3., krok 1.). 2. Odświeżamy w Eclipse projekt i przechodzimy do perspektywy Team Synchronizing. 3. Widzimy, że Eclipse wykrył zmianę w pliku: strzałka „w prawo” oznacza chęć Eclipse'a do wysłania zmian do repozytorium. 4. Aby przekonać się, co się zmieniło, dwukrotnie klikamy na zmieniony plik. W obszarze edytora otworzy się nowe okno, gdzie zaprezentowane są zmiany pomiędzy wersją lokalną a oryginalną z repozytorium. 5. Aby wysłać zmiany do repozytorium na projekcie wybieramy Commit. Narzędzie 3: Linia poleceń Historycznie patrząc, jest to pierwszy i referencyjny klient do SVN, rozwijany razem z serwerem. Większość operacji, które można wykonać z poziomu GUI (Eclipse, TortoiseSVN) można też wykonać z poziomu linii poleceń, jednak wymaga to większej liczby operacji i „stuknięć w klawisze”. Aby wywołać klienta należy wpisać w konsoli svn <komenda> gdzie <komenda> jest operacją, jaką chcemy wykonać. Zależnie od operacji może być wymagane podanie dodatkowych argumentów. Można się o tym dowiedzieć – co będzie użyteczne w dalszych ćwiczeniach – z pomocy uzyskanej poleceniem svn help <komenda>. strona 6 / 8 Inżynieria Oprogramowania 1 System zarządzania wersjami I Ćwiczenie 3.1: Checkout z repozytorium Polecenie (jedna linia!) svn checkout https://ophelia.cs.put.poznan.pl/svn/io2011/infXXXXX/lab02 repo4 pobierze zawartość repozytorium do katalogu repo4. Ćwiczenie 3.2: Dodawanie plików Należy przejść do katalogu repo4/trunk. 1. Wykonać komendę SVN status. Nie powinno być żadnego komunikatu, co oznacza, że kopia lokalna jest „czysta”, bez zmian lokalnych. 2. Należy utworzyć nowy katalog i plik. Ponowna komenda status pokaże obok nowych elementów znak '?', co oznacza, że nie jest on znany dla SVN. 3. Wykonujemy komendę add. Ponowne sprawdzenie statusu pokazuje obok nowych elementów znak 'A', co wskazuje na oznaczenie elementów do dodania. 4. Należy zatwierdzić zmiany w repozytorium komendą commit. 5. Status katalogu powinien być „czysty”, jak w punkcie 1. Ćwiczenie 3.3: Kopiowanie plików Należy przejść do nowo utworzonego katalogu z plikiem. 1. Wykonać komendę SVN status. Nie powinno być żadnego komunikatu, co oznacza, że kopia lokalna jest „czysta”, bez zmian lokalnych. 2. Wykonujemy komendę copy SRC DST, gdzie SRC to nazwa istniejącego pliku lub katalogu, a DST to plik lub katalog do którego mają zostać skopiowane dane. Ścieżki można podać bezwzględne i względne. 3. Ponowna komenda status pokaże obok nowych elementów znak 'A'. 4. Należy zatwierdzić zmiany w repozytorium komendą commit. Ćwiczenie 3.4: Historia pliku 1. Wykonać komendę SVN log <nazwa_pliku>, gdzie <nazwa_pliku> to dane dowolnego wybranego pliku, np.: svn log Fibonacci.java 2. Na ekranie zostaną wyświetlone wszystkie zmiany jakie zostały wprowadzone. Poniżej przykład jednej z wielu linijek jakie mogą się pojawić: r2 | infXXXXX | 2011-09-30 19:24:51 +0200 (pią, 30 wrz 2011) | 1 line Poza nazwą użytkownika, daty modyfikacji oraz komentarza (nie pokazane powyżej) wyświetlone są informacje o numerze wersji (r2) oraz liczbie zmodyfikowanych linii kodu (1 line). 3. Jeżeli istnieje potrzeba, można skopiować starą wersję pliku. W tym celu należy wykonać polecenie copy z parametrem -r wraz z numerem wersji pliku, np.: svn copy -r 3 Fibonacci.java Previous.java strona 7 / 8 Inżynieria Oprogramowania 1 System zarządzania wersjami I 4. Wykonanie komendy status pokaże obok nowych elementów znak 'A +'. Oznaczenia te są wyjaśnione w dokumentacji Subversion i na następującej stronie: http://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.status.html Ćwiczenie 3.5: Przenoszenie pliku 1. Należy przejść do katalogu w którym znajduje się plik lub katalog który chcemy przenieść. 2. Za pomocą polecenia mv przenosimy wybrany zasób, np. svn mv *.java src Przed wykonaniem polecenia należy upewnić się, że pliki/katalogi źródłowe i docelowe istnieją. 3. Wykonanie komendy status pokaże, że pliki z katalogu źródłowego przeznaczone są do skasowania (flaga 'D'), a w katalogu docelowym znajdują się pliki do dodania (flaga 'A'). 4. Należy zatwierdzić zmiany w repozytorium komendą commit. strona 8 / 8