maja 31
Synchronizacja plików PHP w Eclipse część 2 – SVN w Subclipse
Jeżeli pracowaliśmy kiedyś nad projektem w kilka osób z pewnością natrafiliśmy na problem, w którym każdy z programistów pracuje nad częścią aplikacji, powiązaną z innymi, tworzonymi przez inne osoby. Każda zmiana danej części projektu powinna być od razu dostępna dla naszych współpracowników, by mogli oni operować na zmodyfikowanych, bądź nowo stworzonych przez nas plikach. Można to uzyskać poprzez synchronizację plików projektu.
Systemy kontroli wersji
Wykorzystanie systemów kontroli wersji to jedna z najpopularniejszych metod synchronizacji plików i projektów programistycznych. O synchronizacji jako takiej a w szczególności poprzez FTP pisałem w pierwszej części artykułu.
System kontroli wersji (ang. version/revision control system) służy do śledzenia zmian głównie w kodzie źródłowym oraz pomocy programistom w łączeniu i modyfikacji zmian dokonanych przez wiele osób w różnych momentach.
Systemy kontroli wersji można podzielić na scentralizowane, oparte na architekturze klient-serwer (np. CVS, Subversion) i rozproszone, oparte na architekturze P2P (np. BitKeeper, svk). W tych pierwszych istnieje jedno centralne repozytorium, z którym wszyscy użytkownicy systemu synchronizują swoje zmiany, a te drugie pozwalają na prowadzenie równoprawnych, niezależnych gałęzi, które można dowolnie synchronizować ze sobą nawzajem. Wybór odpowiedniego typu systemu kontroli wersji zależy od potrzeb projektu.
Przez długi czas najpopularniejszym systemem był CVS. Jego następcą został SVN, który wzbogacony o wersjonowanie nazw plików czy przechowywanie danych w bazie danych Berkley DB, właściwie w pełni w nowych projektach wyeliminował CVS z użytku.
Można zauważyć, iż mimo, że głównym celem SVN jest praca w grupie, to doskonale sprawdzi się także w przypadku gdy pracujemy sami i chcemy po prostu tworzyć kopie zapasowe naszych projektów, wraz z kontrolą wersji plików, by w każdej chwili móc bez problemu cofnąć nasze modyfikacje, bądź skontrolować zmiany w projekcie. Dzięki temu nie musimy sami troszczyć się o kopie zapasowe, śmiało możemy edytować pliki, bez obawy, że zmiana coś zniszczy – w każdej chwili istnieje możliwość przywrócenia starszych wersji, sprzed edycji.
Tworzenie repozytorium
Zwykle w trakcie pracy grupowej repozytorium SVN jest dostępne na wspólnym serwerze, często zabezpieczone hasłem. Często projekty open-source posiadają własne repozytoria, umożliwiające użytkownikom pobranie nowych wersji. Rzadko będziemy korzystać z repozytorium na własnym komputerze, ale dla testów, bądź tworzenia systemu backup pokażę jak korzystać z SVN na Linuksie i Windowsie.
Linux
Podstawa to instalacja pakietu subversion. Przykładowo w debianach zainstalujemy go za pomocą:
sudo apt-get install subversion
Własne repozytorium tworzymy za pomocą polecenia:
sudo svnadmin create /home/username/svn
Windows
Ściągamy odpowiednie pliki i instalujemy. Po instalacji wpisujemy w konsoli (Start > Uruchom > cmd):
svnadmin create "c:\Documents and Settings\username\svn"
Aby udostępniać nasze repozytorium możemy połączyć jego wykorzystanie z serwerem Apache, co jest bardzo często wykorzystywane. Stosowne linki do tekstów opisujących wspomnianą możliwość znajdziecie na końcu artykułu.
Instalacja Subclipse
Wykorzystamy potęgę SVN korzystając z dodatku Subclipse do potężnego środowiska programistycznego Eclipse, o którym już nieraz pisałem.
Aby zainstalować Subclipse z menu edytora wybieramy Help > Software Updates > Find and install, następnie zaznaczamy Search for new features to install.. i klikamy Next. Naszym oczom ukazuje się lista stron na których znajdujemy aktualizacje i nowe wtyczki.
Dodajemy nową stronę klikając New Remote Site, nadajemy jej dowolną nazwę a w pole adresu wpisujemy http://subclipse.tigris.org/update_1.2.x. Następnie zatwierdzamy, zaznaczamy nowo dodaną witrynę i klikamy Finish. Eclipse kilkakrotnie wyświetli nam okna z potwierdzeniami, we wszystkich przechodzimy dalej, aż Subclipse nam się zainstaluje.
Połączenie projektu z repozytorium
Aby dodać repozytorium do naszego Eclipse klikamy PPM na nasz projekt. Wybieramy Team > Share Project…, w nowym oknie wybieramy SVN, potem zaznaczamy Create a new repository location.
Po przejściu do nowego okna musimy wpisać adres naszego repozytorium. Przykładowo, jeżeli posiadamy repozytorium na lokalnym komputerze utworzone w sposób pokazany prze ze mnie wyżej w artykule na Linuksie wpisujemy: file://localhost/home/username/svn.
W kolejnym oknie nic nie zmieniamy, przechodzimy dalej. W ostatnim oknie aplikacja wyśle wszystkie pliki projektu do repozytorium. Możemy tam wpisać komentarz (komentarze są bardzo ważne – pozwolą nam na rozróżnienie kolejnych modyfikacji, co umożliwi cofnięcie się do odpowiedniej wersji pliku). Podczas importu Subclipse spyta nas o nazwę autora oraz o listę plików, które być może zechcemy wykluczyć.
Widok plików w synchronizowanym projekcie
Po dodaniu SVN do projektu pliki w nim zgromadzone zyskały nowe małe ikonki.
Na załączonym screenie widzimy plik index.php, który jest w aktualnej wersji na serwerze (po prawej widzimy numer wersji i datę wysłania pliku). Plik info.php nie istnieje jeszcze w repozytorium i nie zostanie sam do niego dodany. Natomiast ikonka przy pliku test.php świadczy o tym, że plik zostanie skontrolowany podczas następnego wysyłania plików do repozytorium. Plik testClass.php został natomiast zmieniony w naszym projekcie i należy jego nową wersję wysłać do repozytorium.
Operacje na repozytorium
Właściwie wszystko co możemy zrobić z Subversion jest zamieszczone w menu Team, dostępnym po kliknięciu PPM na plik, folder bądź cały projekt. Omówię tu najważniejsze funkcje SVN.
Update
Update wykonujemy, by pobrać z repozytorium pliki, które zostały zmienione bądź dodane względem naszej lokalnej wersji. Powinniśmy dokonywać update przed każdą inną operacją, by mieć aktualne wersje plików w projekcie.
Commit
Poprzez komendę Commit możemy wysłać nowe, bądź zmienione wersje plików na serwer. Powinniśmy ją używać w miare często, po każdej większej edycji, by repozytorium posiadało nasze aktualne pliki. Commit możemy przeprowadzić zarówno na całym projekcie jak i pojedynczych plikach, czy folderach.
Operację tę należy opatrzeć stosownym komentarzem opisującym zmiany, by w przyszłości móc się zorientować co zmieniło się po danym commicie. Dostępną mamy listę plików, które zostaną wysłane do repozytorium, możemy naturalnie z niektórych zrezygnować.
Add to Version Control
Gdy stworzymy nowy plik w projekcie należy go dodać do kontroli wersji poleceniem Add to Version Control. Dzięki temu, gdy następnym razem przeprowadzimy Commit to nasz plik zostanie wysłany do repo.
Add to svn:ignore
Czasami nie chcemy by niektóre pliki były wysyłane do repo (np. osobista konfiguracja aplikacji). Wtedy należy wybrać opcję Add to svn:ignore. Możemy ignorować konkretne pliki, konkretne rozszerzenia czy też utworzyć własne wyrażenie regularne.
Usuwanie plików z repozytorium
Aby usunąć plik lub folder z repozytorium po prostu usuwamy go w naszym projekcie i przeprowadzamy Commit. Nie obawiajmy się, że plik przepadnie na wieki – pamiętajmy, że w repozytorium trzymana jest każda wersja plików, więc w każdej chwili możemy przejrzeć i przywrócić archiwalne pliki.
Patch
Patche to małe cząstki projektu, które możemy np. wysyłać między współpracownikami, by ci wgrali sobie je do własnej kopii aplikacji. Przydaje się to zwłaszcza, gdy nie mamy dostępu do commita i aby przyjąć zmiany, inny developer musi wgrać sobie (poprzez Apply Patch) odpowiedni, stworzony przez nas (poprzez Create Patch) patch.
Synchronize with Repositority
Po kliknięciu na synchronizację możemy przekonać się jakie zmiany mogą zostać przeprowadzone na naszej lokalnej kopii i w repozytorium. Dzięki tej perspektywie możemy zobaczyć wszystkie zmiany, jakie zaszły w projekcie.
Przykładowo kliknijmy PPM na jakikolwiek plik, który zostanie zmieniony i wybierzmy Open in Compare Editor. Otworzy nam się zakładka z porównanymi i podświetlonymi zmianami w pliku, pomiędzy wersją lokalną a tą na serwerze.
Po wybraniu Show history zobaczymy historię wersji pliku, możemy klikać na poszczególne wersje i podglądać ich zawartość.
Na górze zakładki Synchronize umieszczone są ikony, umożliwiające przeprowadzenie Update czy Commit. Są też przyciski filtrujące zmiany na wychodzące i przychodzące.
Przeglądanie repozytorium
Aby przejrzeć repozytoria udajmy się na perspektywę SVN Repository Exploring. Klikamy na przycisk pokazany na screenie i wybieramy wspomnianą opcję.
Widzimy listę repozytoriów, które możemy rozwijać by dostać się do odpowiednich plików. Podobnie jak przy synchronizacji z menu kontekstowego możemy wybrać wyświetlenie historii wersji pliku.
Tworzenie projektu wprost z repozytorium
Użyteczną może być też możliwość utworzenia nowego projektu wprost z repozytorium. W tym celu wybieramy z menu Eclipse File > New > Other. W nowym oknie szukamy SVN > Checkout Projects From SVN.
W kolejnym oknie wybieramy repozytorium. Następnie określamy folder, który będziemy przywracać. Ostatnie dwa okna służą do wybrania nazwy i położenia nowego projektu.
Dzięki temu zabiegowi utworzyliśmy projekt będący aktualną kopią repozytorium, możemy więc włączyć się w tworzenie projektu i przeprowadzanie w nim zmian.
Podsumowanie
Subversion to bardzo przydatne narzędzie dla każdego programisty, nawet pracującego samodzielnie. Mam nadzieję, że przedstawione tu porady do Eclipsowego pluginu Subclipse, nie wyczerpujące co prawda tematu, będą przydatne dla czytelników, tym bardziej, że w polskiej części Internetu zbyt wiele o Subclipse nie ma
Na koniec podam kilka przydatnych linków na ten temat:
- Subversion dla każdego w Linuksie
- Subversion i Apache pod Windows
- Subversion i Apache pod Ubuntu
- SVN i Apache w Windows w 3 krokach
- Jak korzystać z Subversion w Eclipse
- Wprowadzenie do Subversion w Eclipse
- Omówienie Subclipse
- Korzystanie z Merge w Subclipse













