Archiwum wpisów oznaczonych jako: “Porady”

Projekty pod kontrolą wersji

Subversion + TortoiseSVNSystem kontroli wersji służy programistom do śledzenia zmian w kodzie oraz ułatwia pracę, kiedy nad jednym projektem pracuje więcej niż jedna osoba. Dlaczego warto się z nim zapoznać? Nawet jeśli pracujesz nad swoimi projektami sam, kontrola wersji będzie służyć Ci jako kopia zapasowa, kalendarz prac, a przede wszystkim umożliwi Ci porównywanie zmian oraz powrót do stanu przed każdą zapisaną przez Ciebie zmianą, co w wielu przypadkach okazuje się zbawienne.

W tym poście zajmiemy się jednym z systemów kontroli wersji jakim jest Subversion (SVN) oraz jego klientem dla Windowsa Tortoise SVN. Postaram się pokazać jak go zainstalować oraz zacząć używać na własne potrzeby, lokalnie.

Działanie

Katalog naszego projektu łączymy z wcześniej założonym tzw. Repozytorium. Repo(zytorium) to miejsce na dysku (w jakimś katalogu), które będzie działało podobnie jak archiwum, zapisując informacje o stanie wszystkich plików z naszego projektu w bardzo dokładny sposób. Z tego archiwum będzie mogło korzystać wiele osób, zapisując do niego zmiany i pobierając te dokonane przez innych.

Instalacja

  1. Pobieramy subversion z ich strony i instalujemy
  2. Pobieramy i instalujemy Tortoisa odpowiedniego dla naszej wersji Subversion

W obu linkach podane są wersje 1.4.5, możesz poszukać nowszych, chociaż to wcale nie jest takie łatwe. Po zainstalowaniu (i prawdopodobnie restarcie) oprogramowanie jest niemal transparentne, jedyne co się zmienia to to, że mamy dodatkowe opcje w menu pod prawym klikiem na folderach i plikach.

Nowe pozycje w menu kontekstowym

Repozytorium

Na początku załóżmy sobie gdzieś folder, w którym będziemy trzymać wszystkie repozytoria. Jeśli posiadasz więcej niż jeden dysk twardy trzymaj folder z repozytoriami na innym dysku niż środowisko produkcyjne. W tym folderze dla każdego projektu będziesz zakładać osobny podkatalog np.

/Repositories/merixstudio.com

Po założeniu folderu kliknij na niego prawym przyciskiem myszki i z menu TortoiseSVN wybierz Create Repository Here. Po pojawieniu się menu wyboru systemu plików pozostaw zaznaczony pierwszy Native filesystem (FSFS) i zatwierdź.

Tworzenie repozytorium

Właśnie utworzyliśmy repozytorium, teraz musimy powiązać folder projektu z folderem repozytorium. Aby to zrobić klikamy prawym na folder projektu na środowisku produkcyjnym (nie w repozytoriach), np.

/www/merixstudio.com

Z menu wybieramy SVN Checkout. Pojawi się okienko checkout’u, w którym ustawiamy URL of repository na ścieżkę do naszego repozytorium (wyczyść zawartość pola, a potem kliknij przycisk przeglądaj […])

SVN Checkout

System coś sobie przemieli i w nowym okienku pozostawi nam do wyboru tylko OK. W folderze projektu (i w każdym jego podfolderze) pojawi się nowy podkatalog .svn, w którym subversion będzie trzymał potrzebne dla siebie informacje. Dzięki Tortoise ikonki plików i folderów w naszym exploratorze powinny otrzymać dodatkowe nakładki.

Nakładki Tortoise

Będą się one zmieniać w zależności od zmian w nich dokonanych, a także przewidzianych dla nich akcji. Najważniejsze dla nas ikonki na tym poziomie to

  • Zielona (ptaszek) - oznacza, że plik nie zmienił się od ostatniej synchronizacji z repozytorium
  • Czerwona (wykrzyknik) - oznacza, że plik się zmienił

Zauważ, że nowe pliki i foldery nie będą posiadały żadnej nakładki, póki nie zostaną wgrane do repozytorium. Również foldery, do których dodaliśmy nowe pliki nie zmienią ikonki na czerwoną.

To wszystko jeśli chodzi o założenie repozytorium i powiązanie z nim projektu. Będziemy to wykonywać jednorazowo dla każdej pracy, którą chcemy mieć pod kontrolą wersji. Przejdźmy do korzystania.

Korzystanie

Po powiązaniu projektu z repo w menu kontekstowym (folderu projektu) pojawiają się dwie nowe opcje, którymi będziemy najczęściej operować.

Commit oraz Update

Commit będzie tą opcją, z której będziemy korzystać najczęściej (a jeśli pracujemy sami właściwie jedyną). Służy do przesłania zmian dokonanych w projekcie do repozytorium. Po kliknięciu w tą opcję, pojawi nam się okno podsumowujące zmiany, w którym również możemy dodać informacje, na temat aktualnie wprowadzanej do repozytorium zmiany.

Commit

W polu message dobrze zapisać sobie czego tyczy się zmiana, np. Dodanie nowej pozycji do menu czy Poprawki w modelu autoryzacji. Pomoże nam to później rozeznać się w zmianach, które dokonywaliśmy bez konieczności sprawdzania różnic w plikach.

Lista Changes made, jak samo mówi za siebie to zestawienie zmian, które zostały dokonane. Zwróć uwagę, że nowe pliki i foldery, które nie znajdują się dotychczas w repozytorium nie będą domyślnie zaznaczone do wgrania. Należy zawsze odznaczyć i zaznaczyć ponownie opcję Select / deselect all (kiedy zamiast ptaszka mamy zielony kwadracik) oraz upewnić się, że wszystkie pliki są widoczne (Show unversioned files).

Po wprowadzeniu wiadomości oraz zaznaczeniu plików, które chcemy przesłać zatwierdzamy buttonem OK. Otworzy się okno, w którym będziemy mogli śledzić postępy przetwarzania plików i przesyłania ich do repozytorium - może to trochę zająć, zwłaszcza jeśli mamy dużą ilość lub wagę plików. Po skończeniu uaktywni się przycisk OK, którym zakończymy operację.

Pamiętaj, że operacja ta dokonuje się tylko odnośnie plików i katalogów w folderze w którym została wyzwolona, odpalaj więc zawsze Commit na samej górze folderu projektu. Dla przykładu, jeśli uruchomisz ją z folderu /merixstudio.com/images przesłane zostaną tylko pliki i foldery znajdujące się w katalogu images, te w głównym /merixstudio.com już nie.

Drugą operacją jest Update, to jakby przeciwieństwo Commita, dzięki update’owi pobieramy zmiany z repozytorium, które najczęściej zostały dokonane przez kogoś innego. Do korzystania z SVN’a dla siebie nie będzie nam to często potrzebne.

To generalnie wszystko co będzie potrzebne Ci do podstawowego korzystania z kontroli wersji. Opcję, z których możesz również często korzystać to Diff oraz Show log.

FTP

Subversion tworzy masę ukrytych folderów .svn w katalogu projektu, więc przegrywanie go na serwer może być dosyć kłopotliwe. W Total Commanderze z pomocą przychodzi nam Synchronizacja katalogów. Otwieramy folder projektu w jednym i folder projektu na ftpie w drugim oknie, klikamy Polecenia/Synchronizuj katalogi

W drugim polu (takim select/inpucie) zamiast *.* dajemy |.svn\ (i dalej jakieś katalogi np. |.svn\ editors\ filemanager\). Spowoduje to wykluczenie tych katalogów z porównywania. Bardzo przydatna opcja, nie tylko odnośnie SVN’a.

Total Commander

Drugi sposób to wyeksportowanie rzeczy z repo poprzez menu kontekstowe Tortoise albo przeciągając folder projektu prawym i wybranie SVN Export to here, a następnie przegranie go na serwer.

Problemy

Subversion niestety jest bardzo czułe, musimy ostrożnie dokonywać zmian, uważać żeby nie skasować czy przenieść gdzieś folderów .svn. Po jakimś czasie dojdziesz do wprawy, jednak co jakiś czas może pojawić się jakiś problem, który wydaje się bez wyjścia. Oczywiście możemy wtedy skasować repozytorium i stworzyć nowe, ale wtedy stracimy także historię wszystkich zmian do tej pory. Lepiej w takim momencie posłużyć się takim sposobem:

  1. Usuń wszystkie podkatalogi .svn z katalogu projektu (powiedzmy, że katalog ten nazywa się /Projekt).
  2. Przenieś wszystkie pliki projektu to innego katalogu (powiedzmy, że katalog ten nazywa się /Kopia).
  3. Folder projektu (/Projekt) ponownie powiąż z repozytorium przez Checkout i zrób Update.
  4. Nadpisz pliki w katalogu /Projekt tymi z katalogu /Kopia.
  5. Zapisz zmiany Commitem.

Powodzenia w korzystaniu z subversion.