blog.milczarek.it
Bartosz Milczarek jeszcze jeden techblog…
29 04 2011

Kontrola wersji w konsoli, czyli o SVN słów kilka

Subversion (SVN) to jeden z popularniejszych systemów kontroli wersji. Praca zespołu programistycznego bez takiego systemu byłaby dosyć uciążliwa, tym bardziej w pracy na odległość. Dzisiaj krótkie wprowadzenie do używania svn z poziomu konsoli linuxa.

Na potrzeby tego postu stworzymy lokalne repozytorium. Osoby, które chcą korzystać z repozytorium, które jest już postawione na serwerze oczywiście pomijają ten krok.

Tworzenie repozytorium

svnadmin create repo

Gdzie repo jest nazwą repozytorium. Zawartość katalogu repo nas właściwie nie interesuje, jednak po wpisaniu powyższej komendy, struktura tego katalogu wygląda mniej więcej tak:

milczu@milczu-notebook:~/svn-test$ ls -l repo
razem 24
drwxr-xr-x 2 milczu milczu 4096 2011-04-24 22:06 conf
drwxr-sr-x 6 milczu milczu 4096 2011-04-24 22:06 db
-r--r--r-- 1 milczu milczu    2 2011-04-24 22:06 format
drwxr-xr-x 2 milczu milczu 4096 2011-04-24 22:06 hooks
drwxr-xr-x 2 milczu milczu 4096 2011-04-24 22:06 locks
-rw-r--r-- 1 milczu milczu  229 2011-04-24 22:06 README.txt

Skojarzenie katalogu z repozytorium – checkout

Pliki naszego projektu będziemy przechowywać w katalogu projekt. Teraz należy skojarzyć ten katalog z naszym repozytorium. Zrobimy to za pomocą:

svn checkout file:///home/milczu/svn-test/repo/ projekt

lub zamiennie:

svn co file:///home/milczu/svn-test/repo/ projekt

Po svn checkout podajemy url do repozytorium, a następnie ścieżkę do katalogu, który chcemy skojarzyć z repozytorium. Jeśli nasze repozytorium znajduje się na naszej stacji roboczej, to powinniśmy ścieżkę do katalogu z repozytorium poprzedzić file:// (dlatego, że wymagany jest adres url). W przypadku gdy repozytorium znajduje się na serwerze, wystarczy podać pełny url np.

svn checkout http://milczarek.it/svn/repo/ projekt

Po poprawnym skojarzeniu katalogu z repozytorium w konsoli powinniśmy zobaczyć komunikat, którą wersję do naszego katalogu pobrano:

Pobrano wersję 0.

Dodawanie plików do repozytorium

Utwórzmy sobie w katalogu projekt/ plik o nazwie index.html oraz plik.html, a w nich odpowiednio: „To jest index” oraz „To jest plik”.

W katalogu projekt/ nie musimy przechowywać plików i katalogów, tylko tych które chcemy scommitować, aby svn wiedział, które pliki mają być scommitowane, należy najpierw dodać je do systemu kontroli wersji poleceniem:

svn add index.html
svn add plik.html

Wysłanie plików do centralnego repozytorium – commit

To że dodaliśmy pliki do kontroli wersji nie znaczy jeszcze, że znajdują się one w repozytorium. Na razie przekazaliśmy informację, że te pliki powinny być dołączone przy wysyłaniu plików do repozytorium. A zatem, jak zatwierdzić zmiany?:

svn commit -m 'Komentarz' [pliki]

Po parametrze -m podajemy w apostrofach komentarz dokonanych zmian. W dobrym stylu jest zawsze zamieścić komentarz co zawiera nasza rewizja (jakie zmiany), dlatego traktuje ten parametr jako obowiązkowy. Następnie podałem parametr [pliki]. Można go pominąć, wtedy wszystkie zmodyfikowane pliki zostaną zaktualizowane w repozytorium. Możemy także podać listę plików (oddzielonych spacją), które chcemy wysłac w naszej rewizji (przydatne gdy nie mamy jeszcze gotowych wszystkich plików) np.:

svn commit -m "Pierwszy commit" index.html pliki.html

Powinniśmy otrzymać także komunikat potwierdzający wysłanie zmian (w przeciwnym wypadku oznacza to, że coś poszło nie tak, lub brak zmian do wysłania):

Dodawanie       index.html
Dodawanie       plik.html
Przesyłanie treści pliku ..
Zatwierdzona wersja 1.

W celach edukacyjnych wyedytujmy plik info zmieniając jego zawartość na np. „To jest index zmodyfikowany”, a następnie zatwierdźmy zmiany do repozytorium:

svn commit -m 'Modyfikacja pliku index'

.
Potwierdzenie:

Wysyłanie       index.html
Przesyłanie treści pliku .
Zatwierdzona wersja 2.

Aktualizacja modułu z repozytorium – update

Załóżmy, że inny członek zespołu projektowego zatwierdził zaminy w repozytorium. Aby zaktualizować nasz projekt do aktualnej wersji należy posłużyć się poleceniem:

svn update
U    index.html
Uaktualniono do wersji 3.

Jak widać mamy obok nazwy pliku index.html mamy literę U, co oczywiście oznacza, że plik został zupdate’owany. Mimo iż w repozytorium znajduje się jeszcze plik.html, to tylko index.html został zmodyfikowany i przy poleceniu update zaktualizowany. Aby zasymulować zmiany wprowadzone (przed update) przez innego członka zespołu, obok katalogu projekt, utworzyłem drugi katalog (projekt2), który następnie skojarzyłem z tym samym repozytorium, wprowadziłem zmiany w pliku index.html (w projekt2/) a następnie zatwierdziłem zmiany.

Historia zmian – log

Poleceniem:

svn log

możemy podejrzeć historię wprowadzonych zmian w następującej postaci:

------------------------------------------------------------------------
r3 | milczu | 2011-04-24 23:19:08 +0200 (nie) | 1 linia

Dodanie kolejnej linii w pliku index.html
------------------------------------------------------------------------
r2 | milczu | 2011-04-24 23:13:05 +0200 (nie) | 1 linia

Modyfikacja pliku index
------------------------------------------------------------------------
r1 | milczu | 2011-04-24 22:58:05 +0200 (nie) | 1 linia

Pierwszy commit
------------------------------------------------------------------------

Podgląd wprowadzonych zmian – diff

Jeśli działaliśmy na plikach projektu, a jeszcze ich nie zatwierdziliśmy do wysłania, możemy podejrzeć co zostało przez nas zmodyfikowane:

svn diff

Podgląd wygląda mniej więcej tak:

Index: index.html
===================================================================
--- index.html	(wersja 3)
+++ index.html	(kopia robocza)
@@ -1,3 +1,7 @@
 To jest index zmodyfikowany

 Kolejna linia w pliku index.html
+
+Ta linia została dodana, ale zmiany jeszcze nie zostały zatwierdzone.
+
+Aha - ta też!

Jak widać, linie oznaczone plusem informują nas, że zostały one dodane, znajdują się w kopii roboczej, ale jeszcze nie w repozytorium.

kasowanie pliku z repozytorium – delete

Z przydatnych poleceń, które przychodzą mi teraz do głowy jest jeszcze delete. Nie trudno się domyślić, że chodzi o skasowanie pliku z repozytorium:

svn delete plik.html
D         plik.html

Zamiast delete możemy zamiennie używać: del, remove, rm.

Więcej info w helpie

Więcej poleceń znajdzie w helpie do Subversion:

svn help

Drogi czytelniku, jeśli dotrwałeś do końca, nie pozostaje mi nic innego, jak życzyć pomyślnych commitów!

Leave a comment

4 Comments.

  1. a co z trunkiem, branchami i tagami ?

  2. Trunk:
    kila dróg:
    1: Pobieramy jak wyżej do folderu projekt i w nim commitujemy folder trunk, potem wystarczy zrobić switch na ^/trunk
    2: Stworzyć trunk + np. branches i tags a potem je zaimportować do repo.
    Więcej mi się nie chce opisywać ;)

  3. Dziękuję Krzystofie za odpowiedź. W takim razie nie będę się powtarzał

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Trackbacks and Pingbacks:

Szukaj
Autor

    Bartosz Milczarek, student III roku informatyki (FTIMS) na Politechice Łódzkiej, specjalność: inżynieria oprogramowania i analizy danych (typowy geek). Softwer developer z zamiłowania. Wcześniej bardziej front- i back-end devloper. Ostatnio najczęsciej piszę w C++/Qt, Java i na platformę Android.

    (więcej)
Kategorie