SVN czyli system kontroli wersji

26.04.2010 - Łukasz Milewski
Trudność

Wyobraźmy sobie, że piszemy program albo sprawozdanie czy książkę. Oczywiście cały czas zmieniamy wpisany tekst - poprawiamy akapity, usuwamy i dodajemy funkcje, zmieniamy algorytmy i kolejność rozdziałów. W tym wszystkim pomaga nam kolega - bardzo nam się spieszy i przekonaliśmy go aby napisał za nas część pracy. W pewnym momencie uświadamiamy sobie, że wczorajsza wersja danego rozdziału była lepsza. Jednocześnie chcielibyśmy zachować jedno zdanie z przedwczoraj. Dodatkowo nasz kolega właśnie przesłał swoją część i domaga się aby szybko dołączyć ją do wyniku. Jak sobie z tym poradzić? Zaraz poznamy rozwiązanie.

Niezbędne oprogramowanie

Aby zacząć przygodę z SVN potrzebujemy repozytorium. Możemy stworzyć je na własnym komputerze lub użyć dostępnych w internecie. My skorzystamy z możliwości umieszczania swoich projektów na serwerach Google. W tym celu udajemy się na stronę code.google.com i wypełniamy formularz. Jako licencję wybieramy "GNU General Public License v3", a jako system kontroli wersji "Subversion".

Google udostępnia nie tylko miejsce na kod, ale także kilka narzędzi do zarządzania projektem. W tym program do zarządzania błędami, strony wiki, miejsce na wersję do pobrania przez użytkowników oraz przeglądarkę kodu. Poniższy obraz pokazuje jak wygląda główne okno projektu.

Podstawy

Z repozytorium możemy korzystać na wiele sposobów. Zobaczymy jak zrobić to wykorzystując konsolę, program TortoiseSVN oraz środowisko programistyczne (w naszym przypadku edytor GNU Emacs). Na końcu artykułu znajdują się linki do innych tekstów - poświęconych pracy z SVN w różnych środowiskach.

Zaczniemy od podstaw pracy z konsolą, bo to pozwoli nam lepiej zrozumieć jak działa svn. Użytkownicy Linuksa potrzebują pakietu subversion. Użytkownicy Windows natomiast zestawu narzędzi cygwin.

Na stronie projektu, który stworzyliśmy w zakładce Source/Checkout jest napisana komenda, jakiej należy użyć aby pobrać repozytorium (jest zaznaczona na obrazku poniżej). Nieco niżej jest link, w który należy kliknąć aby wygenerować hasło. Pobieramy repozytorium. Jest tworzony katalog z jego nazwą (my posługujemy się nazwą 'moje-projekty').

1
2
  svn checkout https://moje-projekty.googlecode.com/svn/trunk/ \
moje-projekty --username lmilewski

Podstawę pracy z SVN stanowią komendy:

  • checkout - pozwala pobrać na dysk repozytorium (komenda na stronie google code to właśnie checkout
  • commit - dodaje zmiany do repozytorium (umieszcza je na zdalnym serwerze). Dzięki temu zapisujemy aktualny stan naszych prac w postaci rewizji, do której możemy wrócić w dowolnym momencie
  • update - aktualizuje lokalną wersję do wersji na serwerze. Jest to bardzo przydatna opcja gdy ktoś zmienił te pliki (np. my, pracując na innym komputerze).

Naszym pierwszym projektem będzie "hello world" - stworzymy katalog "hello_world" z plikiem "powitenie" o treści "witaj". W katalogu z repozytorium dodajemy katalog "hello_world" - jak każdy, zwykły katalog, a w nim tworzymy odpowiedni plik "powitanie". Teraz musimy dodać te pliki do projektu.

1
  svn add hello_world

Ostatecznie zatwierdzamy zmiany i umieszczamy je na serwerze przy użyciu commit.

1
  svn commit hello_world -m "tutaj podajemy opis zmian"

Proces tworzenia tego projektu pokazuje poniższy, krótki film. Aby odtworzyć film należy kliknąć prawym przyciskiem myszy i wybrać "Odtwórz" lub "Play". Jeżeli film się nie załadował to należy odświerzyć stronę

Pokaż/ukryj film

Cofanie zmian

Główną zaletą systemów kontroli wersji, obok ułatwiania pracy zespołowej, jest możliwość cofnięcia się w czasie (do dowolnej rewizji utworzonej wcześniej). Jeżeli zmieniliśmy projekt, ale nie jesteśmy zadowoleni ze zmian, możemy je wycofać tak:

1
  svn revert nazwa_pliku

lub tak:

1
  svn revert -R nazwa_katalogu

Bardzo ważne jest aby przed cofnięciem zmian sprawdzić co chcemy cofnąć. Komenda svn status pozwala sprawdzić co zostało zmienione w repozytorium od ostatniej, pobranej rewizji. Można również wykonać

1
  svn diff nazwa_pliku

Aby zobaczyć opis zmian od ostatniej rewizji w danym pliku.

W tym momencie powstaje pytanie - "A gdy chcemy cofnąć się wcześniej niż ostatnia wersja?". Podczas wykonywania komendy "commit" dodaliśmy do zmian opis przy pomocy przełącznika -m. Teraz możemy to wykorzystać. Stosując komendę

1
  svn log

Uzyskamy listę rewizji (zmian zatwierdzonych komendą svn commit). Każda jest opisana numerem rewizji, nickiem autora, datą i godziną oraz, co najważniejsze, opisem zmian - tym, podanym przy komendzie "svn commit". W ten sposób znajdujemy numer rewizji, który nas interesuje.

Mając identyfikator rewizji (jej numer) wystarczy użyć przełącznika -r komendy update. Aby przejść do rewizji nr. 15 należy wydać polecenie:

1
  svn update -r 15

Struktura katalogów

Do samodzielnej pracy znajomość tych podstaw wystarcza, ale pracując w grupie dobrze zorganizować odpowiednio katalogi projektu na samym początku. Przyjrzymy się jednemu ze sposobów takiej organizacji.

Przyjęło się, że każdy projekt składa się z trzech katalogów - trunk, branches oraz tags. Jest to tylko umowa, ale warto stosować tę konwencję gdyż każdy użytkownik svn od razu wie co znaczą te katalogi.

W katalogu trunk trzymamy najnowszą, stabilną (a przynajmniej działającą) wersję. Oznacza to, że nie można umieszczać tam funkcjonalności, które nie są sprawne - np. będących jeszcze w trakcie budowy.

Musimy mieć miejsce na wersje robocze - jest nim katalog branches. Tworzymy branch (podkatalog branches) i na nim pracujemy. Po zakończeniu pracy nad funkcjonalnością przenosimy zmiany do katalogu trunk.

Co jakiś czas nalezy kopiować zawartość katalogu trunk do nowego podkatalogu tags. W ten sposób tworzymy historię ważniejszych zmian w naszym oprogramowaniu. Możemy tworzyć tagi np. dla wersji 1.0, 1.1, 2.0 itd.

Aby utworzyć branch lub tag nie wolno kopiować plików ręcznie. Stosujemy komendę svn copy, gdyż dzięki temu pliki nie są fizycznie kopiowane (oszczędzamy pamięć). SVN jest sprytny i zapamiętuje jedynie wersję główną oraz zmiany między kopiami.

1
  svn copy url_repozytorium_trunk url_kopii_w_tags_lub_branches

Prostszy system polega na dodawaniu zmian w katalogu trunk i okresowo robieniu jego kopii w tags (pomijamy branches). Ta metoda świetnie sprawdza się w przypadku projektów jednoosobowych.

Na poniższym filmie widzimy jak, przy pomocy GNU Emacsa, stworzyć projekt, a następnie zmienić go w formę z katalogami: trunk, branches i tags. Zauważmy, że działamy w ramach katalogu trunk projektu 'moje-projekty'. Możemy oczywiście na każdy nowy projekt zakładać osobny projekt na stronie Google Code. W naszym przypadku zdecydowaliśmy się założyć jeden projekt i w ramach niego tworzyć katalogi z programami.

Pokaż/ukryj film

Praca na innej maszynie

Teraz zobaczymy jak nad tym samym projektem możemy pracować w systemie Windows. Do tego celu potrzebujemy programu TortoiseSVN, który można pobrać ze strony domowej TortoiseSVN.

TortoiseSVN jest graficznym interfejsem svn dla systemu Windows. Praca z tym programem jest bradzo prosta. Najpierw musimy wykonać komendę svn checkout. W tym celu klikamy prawym przyciskiem myszy na pulpicie (lub w innym, wybranym katalogu) i klikamy w "checkout". Wpisujemy adres repozytorium. Chwilę potem jesteśmy proszeni o nazwę użytkownika i hasło. Po ich podaniu i zatwierdzeniu możemy tworzyć, usuwać i modyfikować pliki w katalogu z repozytorium.

Po utworzeniu nowego pliku należy dodać go do repozytorium, klikając na niego prawym przyciskiem mysz i wybierając "Add" z menu "TortoiseSVN". Podobnie możemy usuwać pliki korzystając z "Delete". Po zakończeniu pracy jak zwykle wydajemy komendę "Commit". W każdej chwili możemy cofnąć zmiany korzystając z "Revert" lub pobrać nowsze wersje plików za pomocą "Update". Jak widzimy, praca z TortoiseSVN jest bardzo łatwa, a interfejs nie sprawia żadnych kłopotów. Widać to na poniższym filmie.

Pokaż/ukryj film

Najważniejsze polecenia

Zbierzemy teraz najważniejsze polecenia svn w postaci przejrzystej tabeli (dla GNU/Emacsa skróty są opisane dla wtyczki psvn - dostępna po wydaniu polecenia svn-status).

Operacja Polecenia SVN GNU/Emacs TortoiseSVN
Pobranie repozytorium svn checkout uri_repozytorium GNU/Emacs "Checkout"
Pobranie najnowszych wersji plików z repozytorium svn update U Update
Dodanie pliku do repozytorium svn add nazwa_pliku_lub_katalogu a Add
Usunięcie pliku z repozytorium svn delete D Delete
Wysłanie zmian do repozytorium svn commit -m "treść loga" c, potem C-cC-c aby zatwierdzić log Commit
Sprawdzenie statusu plików svn status Widać w postaci drzewa Widać po ikonach na katalogach
Pobranie listy rewizji wraz z logami svn log l Log
Sprawdzenie statusu plików svn status Widać w postaci drzewa Widać po ikonach na katalogach

Współpraca z innymi, popularnymi środowiskami

Wiele popularnych edytorów tekstu współpracuje z SVN. Zasady wykorzystania go zawsze pozostają te same, ale interfejs czasami się trochę różni. Polecam artykuł na temat współpracy SVN z Eclipse i Netbeans.

5
Twoja ocena: Brak Ocena: 5 (2 ocen)

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com