piątek, 29 maja 2015

[SVN] Instalacja klienta i serwera oraz podstawy pracy z SVN

TRUE
1609439994610160279
SVN to najpopularniejszy i najczęściej używany na świecie system kontroli wersji. Z wersjonowania za pomocą SVN korzystają najwięksi gracze na rynku, tacy jak Google, Wordpress i wiele innych znanych marek. Taka rekomendacja już na starcie powinna wystarczyć do uznania Subversion za system wysoce niezawodny.

Projekt wersjonowany za pomocą SVN dzieli się na dwie niezależne od siebie kwestie - na repozytorium główne, przechowywane na serwerze systemu kontroli wersji oraz na jego kopie robocze, dostępne zdalnie, na których lokalnie pracują związani z repozytorium programiści.

O ile pobranie gotowego repozytorium i praca na nim nie wymaga zbyt wielu zabiegów, to już postawienie serwera SVN może być nieco kłopotliwe dla osób, które robią to po raz pierwszy. Dlatego też w artykule tym omówię krok po kroku w jaki sposób uruchomić na swoim komputerze zarówno klienta jak i serwer systemu kontroli wersji Subversion. Artykuł dotyczyć będzie instalacji na systemach z rodziny Windows, linuxowcom nie trzeba tłumaczyć jak SVN-a zainstalować ;)

Wstęp

Na początek zobaczmy jak wygląda dostęp do gotowego repozytorium. Do repozytorium dostaniemy się z poziomu zwykłego WWW, wejdźmy sobie na repozytorium Wordpressa:
http://svn.automattic.com/wordpress/trunk/

Jak widzimy, mamy od razu wylistowaną listę plików zawartych w repozytorium oraz informację, której rewizji dotyczą obecne wersje plików. W chwili pisania tego tekstu (na dzień 29.05.2015) jest to rewizja o numerze 32622. Przy każdej kolejnej zmianie w kodzie (tzw. commicie) numer rewizji jest zwiększany o jeden.

Klient

Po stronie klienta pracować będziemy na kopii roboczej repozytorium, nie na jego właściwej wersji. Pracować z SVN możemy w konsoli, jak i za pomocą windowsowego graficznego GUI o nazwie TortoiseSVN. W opisie tym nauczymy się jednego i drugiego. Na samym początku pobrać musimy najnowszą wersję klienta SVN ze strony:
http://sourceforge.net/projects/win32svn/
Zróbmy więc to i zainstalujmy SVN w swoim systemie.

Kolejnym krokiem będzie pobranie graficznego klienta o nazwie TortoiseSVN, którego pobierzemy sobie stąd:
http://tortoisesvn.net/downloads.html

Po instalacji, sprawdżmy, czy wszystko działa poprawnie.
SVN powinien nam dodać ścieżkę do zmiennej PATH w systemie, np:
[code]C:\Program Files (x86)\Subversion\bin[/code]
Jeśli tak się nie stało - musimy ją dodać ręcznie:
[code]Komputer >> Zaawansowane >> Zmienne środowiskowe >> PATH[/code]
Wejdżmy teraz do konsoli i wpiszmy:
[code]$ svn --version[/code]


Jak widzimy wyświetliła nam się obecna zainstalowana wersja.

Sprawdźmy teraz klienta Tortoise - powinien on dodać kilka elementów do powłoki systemu.
Utwórzmy jakiś folder, np. C:/svntest i kliknijmy na nim prawym przyciskiem myszy, powinniśmy zobaczyć menu kontekstowe klienta Tortoise:


Pobierzmy sobie dla testów przedstawione wcześniej repozytorium Wordpressa:
Mając utworzony folder:
[code]C:/svntest[/code]
i będąc w konsoli, wejdźmy do niego i wpiszmy to co poniżej:
[code]
$ cd C:/svntest
$ svn checkout http://svn.automattic.com/wordpress/trunk wordpress
[/code]

Pobierze nam to kopię lokalną repozytorium Wordpressa do katalogu:
[code]C:/svntest/wordpress/[/code]



Zauważmy, iż w każdym repozytorium znajdzie się nam ukryty folder o nazwie .svn - pod żadnym pozorem nie modyfikujmy ręcznie plików w nim zawartych.

Teraz to samo zróbmy za pomocą klienta graficznego.
Wiemy już, że do pobrania repozytorium służy komenda checkout.
Utwórzmy teraz folder:
[code]C:/svntest/wordpress2[/code]
i klijnijmy na nim prawym przyciskiem myszy wybierając opcję SVN Checkout...:



Pojawi się okno, w którym wpiszmy adres repozytorium:
[code]http://svn.automattic.com/wordpress/trunk[/code]



Jak widać - pobrania kopii repozytorium możemy dokonać zarówno z poziomu poleceń w konsoli jak i z poziomu łatwego w użyciu klienta graficznego. To wszystko - od tej chwili możemy dowolnie pracować na pobranej kopii roboczej repozytorium.

Testowy plik

Dodajmy teraz jakiś plik do pobranej kopii repozytorium, niech to będzie np.:
[code]test.txt[/code]
Plik taki dodaliśmy jednak jedynie do naszego folderu, nie jest on jeszcze jednak uwzględniony w repozytorium, co za tym idzie nie jest śledzony przez SVN. Aby dołączyć nowy plik do repozytorium używamy polecenia add:

[code]$ svn add test.txt[/code]



Aby dodać wszystkie nowe pliki używamy gwiazdki:
[code]$ svn add *[/code]

Analogicznie dla podfolderu:
[code]$ svn add podfolder/*[/code]

Od tej chwili plik ten jest już zawarty w lokalnej, roboczej kopii repozytorium i śledzony przez SVN. To samo możemy zrobić z poziomu klienta Tortoise:



Jesteśmy obecnie wciąż w rewizji jaką pobraliśmy z serwera Wordpressa. Aby dodać nasz nowy plik do właściwego repozytorium, a więc zatwierdzić zmiany jakich dokonaliśmy - musimy te zmiany "zacommitować". Tym samym numer rewizji zwiększy się o jeden.

Służy do tego polecenie:
[code]$ svn commit -m "Komentarz do rewizji"[/code]

lub to samo w kliencie graficznym:



Niestety żadnych zmian w tym momencie nie zatwierdzimy, gdyż nie mamy odpowiednich uprawnień do repozytorium Wordpressa. Różnica pomiędzy SVN i GIT-em jest taka, że w Gicie wszelkie zmiany commitujemy do kopii roboczej znajdujacej się lokalnie na naszym komputerze i dopiero potem wysyłamy na serwer, w SVN natomiast commitujemy je bezpośrednio do repozytorium źródłowego. Aby więc przetestować to wszystko w praktyce, potrzebujemy serwera, do którego będziemy mieć pełny dostęp, co też uczynimy poniżej.

Serwer

Postawmy teraz własny serwer, aby w pełni przetestować pracę z SVN, taką jak zatwierdzanie zmian, czy łączenie kopii roboczej z głównym repozytorium (z Wordpressem tego nie zrobimy, nie posiadamy uprawnień - możemy jedynie pobrać kopię roboczą repozytorium). O ile sprawa z klientem była prosta, o tyle postawienie własnego serwera SVN nie będzie już takie proste.

Co należy wiedzieć, to to, że serwer SVN postawić możemy na dwa sposoby - za pomocą oddzielnej aplikacji (dostępnej tylko na systemy unixowe), lub za pomocą odpowiedniego modułu do serwera Apache. Wykorzystamy tą drugą opcję, zatem koniecznym jest, abyśmy posiadali działającego lokalnie Apacha - bez tego nie zrobimy nic. Instalacji Apacha nie będę tutaj opisywał i zakładam, że takowy serwer już u nas działa.

1. Pobranie modułów SVN

Co musimy teraz zrobić? Musimy pobrać odpowiednie do naszej wersji serwera dodatkowe moduły.
Będą to dwa pliki:

  • mod_authz_svn.so
  • mod_dav_svn.so

Pliki te są dostępne w folderze /bin znajdującym się w katalogu z zainstalowanym Subversion.
Niestety skopiowanie ich stąd w niektorych przypadkach spowodować może, że nasz serwer nie będzie w stanie wystartować.

Powód? Istnieje kilka wersji Apacha, z czego najgłówniejszym podziałem jest podział na wersje 2.2x i 2.4x. Dodatkowo możemy posiadać wersję 32, albo 64 bitową. W przypadku niezgodności wersji możemy mieć problem z uruchomieniem serwera z powyższymi modułami, pobrać musimy zatem wersję odpowiednią dla NASZEJ wersji serwera.

Odpowiednią wersję znajdziemy na stronie:
https://www.apachehaus.com/cgi-bin/download.plx
w odpowiednich sekcjach:
[code]Modules for Apache 2.2.x i Modules for Apache 2.4.x[/code]
Paczka ma nazwę:
[code]Mod Subversion x.x.x. for Apache 2.x.x[/code]

Ja osobiście posiadam 64-bitową wersję Apache'a z numerkiem 2.4.9, pobieram więc odpowiednią dla mnie wersję:
mod_svn-1.8.11-ap24-vc9-x64.zip.

2. Instalacja modułów SVN

Po pobraniu odpowiedniego archiwum, rozpakowujemy je:



Pliki z folderu /modules:

  • mod_authz_svn.so
  • mod_dav_svn.so

kopiujemy do:
[code]/ścieżka/do/apache/modules/[/code]

natomiast pliki z folderu /bin do:
[code]/ścieżka/do/apache/bin/[/code]

No dobrze, pliki już mamy, teraz czeka nas edycja pliku konfiguracyjnego Apache'a, ale najpierw przygotujmy sobie katalog, w którym nasz serwer będzie trzymał repozytoria, dla testów utwórzmy folder:
[code]C:/svnserver[/code]

3. Konfiguracja Apache'a

Wróćmy teraz do katalogu z Apachem i otwórzmy (w trybie administracyjnym) do edycji plik:
[code]/ścieżka/do/apache/conf/httpd.conf[/code]

Mając już otwarty plik z konfiguracją po pierwsze musimy włączyć dodane dopiero co moduły.
Szukamy sekcji z modułami, która wygląda mniej więcej tak:
[code]
# Example:
# LoadModule foo_module modules/mod_foo.so
#

LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_core_module modules/mod_authn_core.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
[...]
[/code]
i szukamy modułu mod_dav.so:
[code]#LoadModule dav_module modules/mod_dav.so[/code]

Będzie on najprawdopodobniej zakomentowany znakiem #, usuwamy ten znak.
Następnie dodajemy wpisy z naszymi skopiowanymi dopiero co modułami:
[code]
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
[/code]

Zapisujemy plik httpd.conf i restarujemy Apache'a.
Jeśli moduły załadowały się poprawnie i serwer wystartował, to wracamy do dalszej konfiguracji.
Pod koniec pliku httpd.conf dodajmy następujące:
[code]
<Location /svnserver>
DAV svn
SVNPath "C:/svnserver/myTestRepo"
</Location>
[/code]
Określa to ścieżkę do naszego repozytorium (które za chwilę utworzymy).
Ponownie zapisujemy plik i restartujemy serwer.

4. Tworzymy repozytorium

Teraz czas na utworzenie testowego repozytorium:
W terminalu zrobimy to tak:
[code]
$ cd C:/svnserver
$ svnadmin create myTestRepo
[/code]



Za pomocą klienta Tortoise zrobimy to następująco:
Wchodzimy w folder C:/svnserver, tworzymy w nim folder myTestRepo, klikamy na nim prawym przyciskiem myszy i wybieramy opcję:
[code]TortoiseSVN -> Create repository here[/code]



Zostanie utworzone repozytorium, wybieramy opcję Create folder structure i [OK]:

Nasze repozytorium zostało utworzone.

Wchodzimy teraz z poziomu przeglądarki na adres:
[code]http://localhost/svnserver[/code]
Jeśli wszystko poszło zgodnie z planem, naszym oczom powinno się ukazać nasze świeżo upieczone  utworzone repozytorium:




5. Pobieramy własne repozytorium

Mamy już działający serwer SVN, pobierzmy teraz kopię roboczą z własnego serwera.
Utwórzmy katalog C:/svnclient i pobierzmy do niego kopię repozytorium z naszego serwera:
[code]
$ cd C:/
$ mkdir svnclient
$ cd svnclient
$ svn checkout http://localhost/svnserver testRepo
$ cd testRepo
[/code]



To samo możemy zrobić za pomocą klienta TortoiseSVN.
Nasza kopia została pobrana do:
[code]C:/svnclient/testRepo[/code]

Mamy już kopię roboczą, na której możemy pracować, utwórzmy w niej jakiś plik, ponownie np.:
[code]test.txt[/code]
Dodajmy następnie ten plik do repozytorium:
[code]$ svn add test.txt[/code]



I wejdźmy na nasz serwer:
[code]http://localhost/svnserver[/code]



Jak widać nasz plik test.txt nie pojawił się w naszym źródłowym repozytorium, istnieje jedynie w naszej kopii roboczej.
Aby wysłać zmiany na serwer, do głównego repozytorium, musimy wykonać operację commit, która zatwierdzi zmiany w kopii roboczej i stworzy nową rewizję na serwerze:

Zrobimy to w konsoli:
[code]$ svn commit -m "Dodano nowy plik"[/code]



lub za pomocą Tortoise:



Wejdźmy ponownie na nasz serwer:
[code]http://localhost/svnserver[/code]



jak widzimy plik pojawił się w naszym głównym repozytorium, a rewizja zwiększyła się o jeden.

Dokonajmy teraz jakiś zmian w pliku test.txt, pododawajmy nowe pliki i poróbmy kilka kolejnych 'commitów'. Jak widać, za każdym razem numer rewizji zwiększa się.

Aby teraz przejrzeć historię naszych rewizji użyjemy ładnego graficznego GUI wchodzącego w skład pakietu Tortoise.
Klikając PPM na danym pliku i wybierając z menu:
[code]TortoiseSVN -> RevisionGraph[/code]
dostajemy do dyspozycji narzędzie pokazujące nam historię naszego pliku, narazie jest ona uboga, ale zobaczmy:




Oczywiście w SVN w każdej chwili możemy przywrócić stan pliku z przed danej rewizji.
W tym przecież tkwi potęga systemów wersjonowania kodu :)

Innymi przydatnymi programami z pakietu Tortoise będą też:

[code]TortoiseSVN -> ShowLog[/code]


oraz

[code]TortoiseSVN -> Repository Browser[/code]


6. Update

Co jeśli repozytorium na serwerze zmieni się, a my posiadamy np. starszą jego kopię?
Do synchronizacji służy polecenie:
[code]$ svn update[/code]
Zobaczmy na przykładzie:



Do tego samego służy analogiczna opcja dostępna w menu kontekstowym Tortoise:


7. Autoryzacja

Pozostaje nam jeszcze kwestia zabezpieczenia naszego serwera hasłem, tak aby jedynie wybrani użytkownicy mieli dostęp do repozytorium. Zrobimy to za pomocą modułu uwierzytelniania Apache'a. Na temat uwierzytelniania krok po kroku pisałem w tym artykule.

Na początek utworzymy plik z hasłami dla uprawnionych użytkowników, zrobimy to za pomocą apachowego polecenia:
[code]htpasswd[/code]
które służy do generowania plików z hasłami.

Utwórzmy np. hasła dla użytkowników:
  • janusz
  • anna

W terminalu wpiszmy:
[code]
$ /ścieżka/do/apache/bin/htpasswd -cm C:/svn-auth janusz
[podajemy hasło]

$ /ścieżka/do/apache/bin/htpasswd -m C:/svn-auth anna
[podajemy hasło]
[/code]



Utworzy nam to plik z hasłami:
[code]C:/svn-auth[/code]

dla użytkowników:
  • janusz
  • anna

Plik ten skopiujmy do:
[code]/ścieżka/do/apache/conf/svn-auth[/code]

Następnie w pliku konfiguracyjnym apacha:
[code]/ścieżka/do/apache/conf/httpd.conf[/code]

zmieńmy dodaną wcześniej linijkę:
[code]
<Location /svnserver>
DAV svn
SVNPath "C:/svnserver/myTestRepo"
</Location>
[/code]
na:
[code]
<Location /svnserver>
DAV svn
SVNPath "C:/svnserver/myTestRepo"
AuthType Basic
AuthName "Login to SVN"
AuthUserFile "conf/svn-auth"
Require valid-user
</Location>
[/code]
Zapiszmy plik i zrestartujmy serwer.
Od tej chwili dostęp do repozytorium dostępny jest jedynie za podaniem loginu i hasła.

Importowanie starego projektu do SVN

Co w przypadku jeśli mamy jakiś swój projekt i chcemy od tej chwili pracować z nim za pomocą SVN? Służy do tego polecenie 'import', które tworzy repozytorium dla istniejącego już projektu.

Dla testów stwórzmy sobie folder:
[code]C:/oldProject[/code]
a w nim jakieś przykładowe pliki, np.:

  • test.txt
  • test2.txt



Kolejnym krokiem jest utworzenie nowego pustego repozytorium na serwerze, np. tutaj:
[code]C:/svnserver/myImportedRepo[/code]

Zainicjujmy puste repozytorium o nazwie myImportedRepo w folderze C:/svnserver:
[code]
$ cd C:/svnserver
$ svnadmin create myImportedRepo
[/code]



Następnie dodajmy nową ścieżkę do repozytorium w konfiguracji Apache'a w pliku httpd.conf:
[code]
<Location /svnserver2>
DAV svn
SVNPath "C:/svnserver/myImportedRepo"
</Location>
[/code]
Zapiszmy plik i zrestartujmy Apache'a.
Repozytorium 'myImportedRepo' będzie dostępne pod adresem:
[code]http://localhost/svnserver2[/code]

Następnie, aby zaimportować pliki z folderu:
[code]C:/oldProject[/code]
do repozytorium:
[code]C:/svnserver/myImportedRepo[/code]

wpisujemy w konsoli:
[code]
$ cd C:/
$ svn import -m "Importujemy pliki" oldProject http://localhost/svnserver2
[/code]



Możemy to też zrobić za pomocą Tortoise:



I to wszystko. Nasze repozytorium zawierające śledzone od tej pory przez Subversion pliki dostępne jest teraz pod adresem:
[code]http://localhost/svnserver2[/code]



I to tyle na początek, w kolejnych artykułach opiszę dalsze aspekty pracy z Subversion.
Na chwilę obecną wiemy już jak używać klienta i jak postawić serwer, a także znamy już podstawy pracy z SVN, co na początek powinno umożliwić nam zapoznanie się z Subversion i podstawową możliwość pracy z repozytoriami.

Brak komentarzy:

Prześlij komentarz

Masz sugestię? Znalazłeś błąd? Napisz komentarz! :)

webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji