SVN – z czym to się je?

SVN to system kontroli wersji, który ułatwia pracę nad plikami w projekcie i zapewnia, że wszyscy będą mieć tę samą wersję plików w projekcie. Zbiór plików i katalogów kontrolowanych przez SVN nazywa się repozytorium. W przykładach użyję repozytorium testowego o nazwie „testrepo”. Aktualnie mamy następujące repozytoria:

  • testrepo – Repozytorium używane do testowania i nauki SVN.
  • kspl – Repozytorium Katawa Shoujo.
  • narcissu-pl – Repozytorium Narcissu.
  • sepiatears-pl – Repozytorium Sepia Tears.
  • juniper-pl – Repozytorium Juniper’s Knot.
  • clannad-pl – Repozytorium Clannada.
  • trollks – Odstresowywacz made by reddocksw.

1. Instalacja.

Jako klienta używamy TortoiseSVN. Można go ściągnąć STĄD.
Uruchom ściągnięty plik i zainstaluj, nie zmieniając żadnych opcji instalacji. TortoiseSVN integruje się z powłoką eksploratora plików Windows – nie trzeba go osobno uruchamiać. Wszystkie czynności są wykonywane przez kliknięcie prawym przyciskiem myszy (PPM) albo na okno katalogu, albo na plik i wybranie opcji z wyskakującego menu.

2. Konfiguracja repozytorium.

Zanim zaczniesz pracę, musisz pobrać repozytorium. Stwórz katalog, w którym będą wszystkie repozytoria jako podkatalogi. W przykładach użyję katalogu D:\svn. Otwórz okno z tym katalogiem, PPM i opcja „SVN Checkout…”.
[Obrazek: checkout_window.png]
W nowym oknie wypełnia się dwa pola.
URL of repository: https://repo41.mydevil.net/svn/priv/maderland/testrepo
Checkout directory: D:\svn\testrepo
Jak łatwo się domyślić, nazwa repozytorium to „testrepo”. Klika OK. Teraz program spyta cię o login i hasło, które uprzednio otrzymałeś na maila ode mnie. Nie masz? Wyślij wiadomość do mnie w tej sprawie. Jeśli wszystko poszło dobrze, powinieneś mieć w D:\svn katalog o nazwie testrepo, gdzie masz różne pliki.

2.1. Problemy z repozytorium.

Jeśli przy próbie wykonywania czynności z repozytorium masz różne dziwne błędy, najpierw się upewnij, czy nie masz otwartych jakichś plików repozytorium w programach, które przy otwieraniu blokują zmiany w plikach (np. organizera). Notepad++ jest bezpieczny.
Jeśli błędy pojawiają się bez wyraźnej przyczyny, spróbuj użyć opcji „TortoiseSVN->Clean up…” – najpierw z opcjami takie jak są, a jak nie pomoże, to zaznacz wszystko i spróbuj jeszcze raz.
[Obrazek: cleanup_window.png]
W najgorszym razie zawsze możesz usunąć katalog i założyć repozytorium od nowa.

2.2. Zmiana konfiguracji.

PPM na katalog z repo, „TortoiseSVN->Relocate”. W najgorszym razie zawsze możesz usunąć katalog i założyć repozytorium od nowa.

3. Ktoś musi być winien, czyli sprawdzanie historii.

Przejrzyj sobie różne pliki w repozytorium. Są to normalne pliki, które możesz edytować swoim ulubionym edytorem tekstowym. Nie, Notatnik nie jest twoim ulubionym edytorem tekstowym. Jest nim na przykład Notepad++.
Serwer SVN umożliwia pokazanie historii każdego pliku, zmian oraz kto co zrobił. PPM na plik np. aaa.txt, „TortoiseSVN->Show log”. Pokaże się okno z historią rewizji (wersji) danego pliku. Poniżej jest przykładowy zrzut ekranu takiego okna:
[Obrazek: log_window.png]
Możesz sprawdzić, czym się różni dana rewizja od aktualnej lub poprzedniej – PPM na wiersz w tabelce i opcja „Show changes”. To spowoduje pokazanie się okna z porównywarką dwóch rewizji tego samego pliku.

4. Własna TFUrczość, czyli wysyłanie swojej pracy.

Stwórz jakiś nowy plik o wybranej nazwie i wpisz do środka jakiś tekst. Zapisz upewniając się, że jako kodowanie został wybrany UTF-8 (bez BOM). W Notepad++ możesz to zrobić w opcji menu „Format->Koduj w UTF-8 (bez BOM)”. By wysłać go na serwer, PPM na okno katalogu i „SVN Commit…”.
[Obrazek: commit_window.png]
W nowym oknie, w polu Message musisz wpisać krótki opis dokonanych zmian. Na dole zaś wybierasz pliki/katalogi do wrzucenia. Zazwyczaj po prostu wybierzesz opcję „All”, jako że możesz wysłać efekty pracy nad kilkoma plikami naraz. Potwierdzasz klikając na OK.
Uwaga: kasowanie plików też musi być commitowane.

5. Łojezu co to ma być, czyli pobieranie pracy innych.

Jeśli ktoś inny dodał/zmienił plik lub katalog i wrzucił te zmiany przez commit, musisz pobrać te dane. PPM na wnętrze katalogu i „SVN update”. Małe okno raportujące o stanie update ma przycisk „Show log…”, jeśli chcesz dowiedzieć się dokładnie, co się zmieniło.
[Obrazek: update_window.png]
Zalecam użycie aktualizacji (SVN update) zawsze na początku pracy danego dnia.
Uwaga: update dotyczy wyłącznie zawartości aktualnego katalogu. Oznacza to, że zawsze powineneś robić aktualizację w głównym katalogu repozytorium.

6. OMGFLOLWUTWTF, czyli kolizje.

Wszystko, o czym wspomniałem powyżej, umożliwia już normalną pracę pod warunkiem, że każdy użytkownik modyfikuje inne pliki lub modyfikacje tego samego pliku są zawsze na aktualnej wersji.
Jednakże może się zdarzyć kolizja. Jest to najtrudniejszy dotąd koncept SVNa – proszę przeczytać to uważnie.

Jak może powstać kolizja? Wyobraź sobie, że mamy dwóch użytkowników A i B pracujących nad tym samym plikiem zzz.txt. Obydwaj modyfikują plik w jakiś sposób. Użytkownik A, będąc pierwszym, wrzuci (scommituje) plik na serwer bez problemu. Użytkownik B zaś przy próbie commitu dostanie kolizję, ponieważ zmiany użytkownika A nie są uwzględnione u B.
Ten błąd pokaże się podczas próby użycia opcji „SVN commit…” – pokaże się ostrzegawczy tekst na czerwono. Kliknij na OK i potwierdź zmianę pliku roboczego.

Co teraz? Zauważysz, że pojawiły się trzy dodatkowe pliki – nie musisz się nimi przejmować, same znikną po rozwiązaniu kolizji. One informują, jak wygląda stan pliku w każdej konfliktującej rewizji.
Sam oryginalny plik zostanie zmodyfikowany tak, by widzieć obydwie wersje.
Plik z konfliktem możesz ręcznie edytować za pomocą swojego edytora tekstu (wtedy musisz pamiętać o usunięciu dodatkowych znaczników). Alternatywą jest podgląd konfliktu oferowany przez TortoiseSVN. By go uruchomić, PPM na plik z konfliktem i „TortoiseSVN->Edit conflicts”.
To pokaże ci trzyczęściowy ekran, gdzie na górze masz konfliktujące wersje pliku, a na dole jest podgląd aktualnej wersji pliku. Dolną część można edytować, umożliwiając poprawę pliku. Po tym zapisz (odpowiednia ikona nad trzecią częścią ekranu) i zamknij. Nazywa się to łączeniem (merge) plików.
Ostatnią rzecz, jaką musisz zrobić, to poinformować serwer SVN, że konflikt został rozwiązany. PPM na konfliktujący plik i z menu kontekstowego „TortoiseSVN->Resolved”. Potwierdź OK. Zauważysz, ze dodatkowe pliczki zniknęły.

Teraz możesz już normalnie scommitować.

Tekst napisany przez Madera Levapa.