SVN jako system kontroli wersji w aplikacjach internetowych - wstęp
Tworzenie aplikacji internetowej jest zazwyczaj długotrwałym procesem niosącym ze sobą niebezpieczeństwo bezpowrotnej utraty fragmentów tworzonego kodu (np. brak możliwości odtworzenia kodu funkcji ze starszej wersji modułu) oraz niespójności tworzonego rozwiązania podczas grupowej pracy nad projektem. Aby ustrzec się przed tego typu zagrożeniami jednocześnie zwiększając efektywność naszej pracy warto zastanowić się nad zastosowaniem systemu kontroli wersji. Systemy kontroli wersji umożliwiają synchronizację pracy nad danym zasobem włącznie z rozwiązywaniem konfliktów pomiędzy jego wersjami, odtwarzaniem poprzednich wersji plików, tworzeniem kopii zapasowych itd.
W tym artykule zamierzam opisać przykładowy sposób pracy z systemem kontroli wersji Subversion (SVN) w kontekście wsparcia procesu tworzenia aplikacji internetowych. Subversion jest następcą popularnego systemu CVS i wydaje się być obecnie najlepszym tego typu rozwiązaniem. Poniżej krok po kroku przedstawię etapy tworzenia i konfiguracji repozytorium SVN (w środowisku linii poleceń systemu Linux).
Po pierwsze musimy stworzyć nowe repozytorium plików.
svnadmin create projektX
Następnie importujemy nasz projekt poleceniem:
svn import scieżka_do_katalogu_repozytoriów/projektX/ file:///sciezka_do_katalogu_projektów/projektX --message="Import projektu"
W powyższym poleceniu proszę używać pełnych ścieżek czyli począwszy od '/home'
Mając już stworzone repozytorium i zaimportowany do niego projekt, możemy stworzyć (w zależności od potrzeb) 2 obszary robocze - developerski i produkcyjny. Tworzymy je poleceniem svn checkout, czyli przykładowo:
svn checkout file:///scieżka_do_katalogu_repozytoriów/projektX sciezka_do_katalogu_projektow/projektX_dev svn checkout file:///scieżka_do_katalogu_repozytoriów/projektX sciezka_do_katalogu_projektow/projektX_live
Ok, mamy już repozytorium i 2 powiązane z nim lokalizacje, co dalej !? Przykładowo zmodyfikowaliśmy pliki w obszarze developerskim (katalog 'projektX_dev'). Zmiany (po ich wcześniejszym przetestowaniu) wysyłamy do repozytorium poleceniem:
svn commit -m "Zmiany w module X"
Następnie przechodząc do obszaru produkcyjnego możemy wdrożyć zamiany poleceniem:
svn update
Oczywiście w ten sposób wdrożymy wszystkie zmiany, zazwyczaj lepiej jednak mieć lepszakontrole nad tym procesem... Stosując polecenie:
svn st -u
otrzymamy w ten sposób listę zmodyfikowanych plików, możemy więc wybrać te które mają zostać zaktualizowane na serwerze produkcyjnym:
svn up ściezka_do_pliku_1 ściezka_do_pliku_2
Proces ten może zostać zautomatyzowany tzn. dla wybranego obszary roboczego instrukcja 'svn up' może być wywoływana automatycznie - jest to szczególnie przydatne gdy nasze repozytorium podepniemy do IDE (np. Zend Studio lub Eclipse). Tak więc musimy stworzyć plik 'scieżka_do_katalogu_repozytoriów/projektX/hooks/post-commit' umieszczając w nim:
#!/bin/sh /usr/bin/svn update sciezka_do_katalogu_projektow/projektX_dev
oraz nadając uprawnienia:
chmod 755 post-commit
Tak więc z każdym razem gdy zewnętrznie wywołana zostanie instrukcja 'commit' zmiany będą propagowane w obszarze 'projektX_dev'.
Bardzo ważną kwestią jest uniemożliwienie przeglądania zawartości katalogów '.svn' tworzonych automatycznie przez SVN z poziomu przeglądarki internetowej. Zakładając że naszym serwerem WWW jest Apache możemy to uniemożliwić poprzez dodanie dyrektywy:
RedirectMatch 403 /\.svn.*$
do pliku .htaccess
Ostatnią poruszoną przeze mnie w tym artykule kwestia będzie ignorowanie zasobów. Sprawa nie jest banalna a z punktu widzenia zastosowania SVN w aplikacjach internetowych bardzo istotna. Aby wyłączyć wersjonowanie niektórych zasobów np. pliki z logami, cache itp. należy w pierwsze kolejności usunąć zasoby:
svn delete cache/* svn ci -m 'Ununięcie z repozytorium'
Po czym należy zastosować polecenie svn propset, czyli:
svn propset svn:ignore '*' cache/
Sprawa ignorowanie zasobów dokładniej opisana jest na heavymind.net
Na tym zakończę wstęp do zagadnienia stosowania systemów kontroli wersji w aspekcie aplikacji internetowych - proszę spodziewać się kontynuacji tego (moim zdaniem bardzo ważnego) tematu w kolejnych artykułach.

Komentarze
Dzięki, bardzo fajny materiał, dokładnie opisu takiego przepływu danych poszukiwałem, teraz już wiem wszystko co potrzebowałem, choć de facto na temat subversion poświęciłem tylko kilka h. :)
Dodaj nowy komentarz