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!
4 Comments.
Dodaj komentarz
Trackbacks and Pingbacks:
- Kontrola wersji w konsoli, czyli o SVN słów kilka - develway.pl - Pingback on 2011/05/10/ 18:48
a co z trunkiem, branchami i tagami ?
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ć
Dziękuję Krzystofie za odpowiedź. W takim razie nie będę się powtarzał