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

Podobne dokumenty