Podstawy SVN, poradnik dla początkujących

Wstęp do SVN dla użytkowników początkujących. Opis poleceń i zasad działania systemu SVN, tagowanie, branchowanie, merge’owanie, czyli jak zacząć swoją przygodę z systemem kontroli wersji.

Subversion

Spis treści

  1. Do czego służy SVN?
  2. Początki i podstawowe polecenia
  3. Struktura w projekcie i nazewnictwo (strona 2)
  4. Własne branche i merge’owanie (strona 2)
  5. Kilka przydatnych informacji na koniec (strona 2)

Do czego służy SVN?

SVN (alias Subversion) to System Kontroli Wersji, będący oprogramowaniem wolnym (na licencji Apache). Jest zastępcą systemu CVS, który jeszcze całkiem niedawno był zdecydowanie bardziej popularny. SVN służy do wersjonowania plików, najczęściej źródłowych wersji programów. Dobrze sprawdza się przy równoczesnej pracy wielu użytkowników, pracujących nad wspólnym kodem źródłowym.

Do czego nie nadaje się SVN

Nie nadaje się do wersjonowania plików, dla których nie potrafi sensownie zrobić wersji różnicowej, czyli przede wszystkim dla plików binarnych, graficznych, czy filmów. Nie znaczy to, że takich plików nie da się w repozytorium trzymać, niemniej jednak nie będzie możliwe dobre zarządzanie nimi, czy merge’owanie. Faktem jest, że posiada znacznie lepszą obsługę tych plików niż np. CVS, ale nie do tego służy.

Plik będący dokumentem w formacie DOC, DOCX czy ODT nie jest plikiem tekstowym, więc jeśli chcesz ze znajomymi/współpracownikami zająć się wspólną edycją dokumentów (np. pisanie pracy magisterskiej w kilka osób), może warto zainteresować się LaTeX-em.

Kilka cech Subversion

Posiada własny protokół, aczkolwiek może korzystać z HTTP. Można ściągnąć wersję serwera odpalaną na własnym komputerze na Windowsie i testować, jeśli nie posiadasz dostępu do żadnego serwera SVN.

Rozmiar danych zajmowanych dla kolejnych wersji pliku na serwerze SVN zależy od różnicy pomiędzy tymi wersjami. Tak jak wspomniałem, pliki binarne czy graficzne nie są tak dobrze obsługiwane, chociaż jest zaimplementowany algorytm wyliczający różnicówki plików binarnych.

Repozytorium może być obsługiwane w bazie danych, albo w lokalnym systemie plików. W wersji pod Windowsa nie potrzebujesz żadnych dodatkowych programów ani baz danych, aby uzupełnić w pełni działający serwer SVN.

SVN posiada globalny system numerowania rewizji. Numer rewizji oznacza w zasadzie kolejny numer każdego wykonanego commita.

Początki i podstawowe polecenia

Zanim zaczniesz korzystać

Adresy zasobów w repozytorium

Do repozytorium można się dostać przez różne protokoły, a zatem do każdego pliku/katalogu istnieć może kilka adresów.

Lokalne kopie robocze

Aby pracować (czyli dokonywać zmian) w pliku będącym w repozytorium SVN, musisz stworzyć jego kopię roboczą (ang. working copy). Dopóki pracujesz na kopii roboczej, czyli plikach lokalnych na swoim komputerze, inni nie widzą zmian które wprowadziłeś (faktem jest, że można pracować na serwerze zdalnym i dalej jest to kopia robocza, ale najczęściej jest to na komputerze lokalnym, więc nie ma się co rozwodzić nad pojęciem „lokalności”). Aby inni mogli zobaczyć Twoje zmiany, musisz zakomitować je do repozytorium, czyli „wprowadzić” na serwer.

Każda kopia robocza jest kopią konkretnej rewizji danego drzewa repozytorium. Jeśli więc wykonujesz commit zmian własnych a w repozytorium jest nowsza wersja plików które chcesz zapisać (czyli pliki mają wyższe rewizje niż Twoja lokalna), musisz dokonać scalania (ang. merge) zmian. Ale o tym później.

Konfiguracja środowiska do pracy z SVN

Jeśli korzystasz z SVN pod Linuksem (nie ma znaczenia czy to stacja robocza czy sesja na zdalnym serwerze), pamiętaj aby poprawnie skonfigurować konsolę i zmienną środowiskową VISUAL. Wszystkie commity do SVNa dokonywane bez uwzględnienia parametru z komentarzem commita, będą wymagały wpisania ich w edytorze ustawionym właśnie w środowisku.

Podstawowe polecenia

W poniższej tabelce zebrane są podstawowe polecenia. Podstawowa wiedza na temat działania SVN wcześniej czy później Ci się przyda, nawet jeśli co dzień korzystasz z nakładki okienkowej (np. TortoiseSVN).

KomendaPrzykład Opis
svn add <ścieżka> svn add plik.txt Dodaje plik/katalog podany w ścieżce do repozytorium w bieżącej ścieżce kopii roboczej
svn blame <plik>[@wersja] svn blame plik.txt Wypisuje zawartość pliku, dodając w każdym wierszu informacje o osobie odpowiedzialnej za ten wiersz i rewizji, w której ten wiersz był dodany lub modyfikowany
svn cat <plik>[@wersja] svn cat svn://server:port/ścieżka/plik.txt Wypisuje zawartość danego pliku
svn checkout <URL>[@wersja] <ścieżka lokalna> svn checkout svn://server:port/ścieżka/ katalog-lokalny Pobiera do lokalnej ścieżki gałąź drzewa repozytorium
svn co
Skrót od checkout
svn commit [ścieżka] svn commit plik1.txt plik2.txt katalog/plik3.txt Zatwierdza lokalne zmiany, zapisując je w repozytorium. Jeśli nie podamy ścieżki, odnosi się do katalogu bieżącego
svn ci
Skrót do commit
svn copy <źródło> <cel> svn copy svn://server:port/ścieżka/trunk svn://server:port/ścieżka/tags/rel_1.0 Kopiuje źródło do celu. Źródło i cel mogą być katalogami kopii roboczej lub bezwzględnymi URLami repozytorium; służy np. do wystawiania tagów i branche’y
svn cp
Skrót do copy
svn delete <ścieżka lub URL> svn delete plik5-tymczasowy.txt

Usuwa plik/katalog z podanej ścieżki kopii roboczej lub URLa repozytorium

svn del/remove/rm

Skróty/aliasy do delete

svn diff… <URL1> <URL2> svn diff svn://server:port/ścieżka/tags/rel_1.0/plik.txt svn://server:port/ścieżka/tags/rel_1.1.plik.txt

Pokazuje różnice pomiędzy dwoma rewizjami danego pliku lub ścieżkami. Posiada dużo opcji, warto zobaczyć helpa

svn help [polecenie SVN] svn help diff

Wyświetla pomoc dotyczącą SVN w ogólności lub konkretnej komendy

svn import [ścieżka] <URL> svn import /katalog/podkatalog svn://server:port/ścieżka/trunk Importuje lokalny katalog do podanego URLa repozytorium
svn info [<cel>[@wersja]] svn info Wypisuje informacje o podanym obiekcie (np. o bieżącej kopii roboczej)
svn list [cel] svn list svn://server:port/ścieżka/trunk Listuje zawartość repozytorium dla katalogu podanego jako cel
svn ls
Skrót do list
svn log <cel> svn log svn://server:port/ścieżka/trunk Listuje komentarze kolejnych komitów danego pliku/katalogu
svn merge <źródło1> <źródło2> svn merge svn://server:port/ścieżka/trunk svn://server:port/ścieżka/branch/dev_1.0 Scala (merge’uje) dwie gałęzie repozytorium. Opisane szczegółowo w punkcie dotyczącym merge’owania
svn move <źródło> <cel> svn move plik.txt plik-nowanazwa.txt Przenosi lub zmienia nazwę zasobu w repozytorium
svn mv/rename/ren
Skróty/aliasy do move
svn propdel/propedit/propget/proplist/propset <ścieżka> svn propedit svn:externals katalog Listowanie, pobieranie i modyfikacje atrybutu (ang. property) pliku lub katalogu. Opisane dokładniej w punkcie dotyczącym atrybutów (ang. properties)
svn resolve svn resolve plik.txt Rozwiązuje konflikty w plikach i katalogach
svn revert svn revert plik.txt Przywraca kopię roboczą pliku do stanu zgodnego z repozytorium, czyli wycofuje wprowadzone lokalnie zmiany
svn status [ścieżka] svn status Pokazuje stan kopii roboczej, czyli informacje o zmianach lokalnych i zdalnych (dokonanych w repozytorium po pobraniu pliku/katalogu do kopii roboczej)
svn stat/st
Skróty do status
svn switch svn switch svn://server:port/ścieżka/tag/rel_1.5 Aktualizuje kopię roboczą do innego URLa; wygodne do przełączenia do kolejnego (lub powrót do poprzedniego) taga
svn sw
Skrót do switch
svn update svn up plik1.txt plik2.txt Nanosi zmiany z repozytorium do kopii roboczej. Przy istniejących zmianach lokalnych, następuje próba „inteligentnego” zcalenia zmian lokalnych i zmian w repozytorium
svn up
Skrót do update

No, może przesadziłem stwierdzeniem, że to są podstawowe polecenia… Ustawianie atrybutów (properties) czy switch raczej na początek się nie przyda, ale wcześniej czy później pewnie tak. Każda z komend ma wiele opcji, przez co może się wydawać że korzystanie z niego jest trudne, więc na początek skup się na komendach checkout, update, add, commit. Będziesz dzięki nim mógł stworzyć kopię roboczą projektu z repozytorium, zaktualizować, dodać własne pliki i katalogi, oraz wysłać własne zmiany do repozytorium, aby inni mogli z nich korzystać. Na kolejne komendy przyjdzie pora :)