Zachęcony ostatnio rozmową z kolegą z pracy, który w ramach zarządzania swoim domowym projektem zrobił z nim wreszcie porządek na dysku i przeniósł do systemu kontroli wersji, postanowiłem uczynić to samo. Oczywiście tylko w stosunku do projektów, których na razie nie mam zamiaru publikować i które aktualnie już nie znajdują się na codeplex.com czy code.google.com.

Nie będę w tym momencie wychwalał korzyści płynących z utrzymywania repozytorium i możliwości podglądnięcia dowolnych historycznych zmian, etykietowania, czy nawet  tworzenia wersji eksperymentalnych naszego projektu w stosunku do stosowanej obecnie (i powszechnie?) techniki pakownia całego katalogu z odpowiednią datą w tytule… Nie opowiem również, jak wzrasta samozadowolenie z własnej pracy, a tym bardziej o jej komforcie. Zachęcam natomiast do zaznajomienia się z 12-o punkowy Testem Joela opublikowanym w 2000 roku przez Joela Spolsky’ego, który poucza, na co jeszcze w swoim życiu programistycznym zwrócić uwagę.

Jednak muszę tutaj przyznać, że nie jestem i nie byłem zbytnio zafascynowany myślą instalacji IISa albo Tomcata, czy innego serwera WWW, tylko po to, aby na domowym komputerze mieć system kontroli wersji. Dlatego też opisana poniżej procedura opiera się na następujących założeniach:

  • minimalne zużycie pamięci i procesora
  • możliwość włączenia/wyłączenia tej zabawki w dowolnym momencie
  • brak dodatkowych kosztów, jeśli wymagane dodatkowe oprogramowanie (darmowe lub open-source)
  • możliwość współpracy i dostępu dla kilku osób w sieci lokalnej

 
Przed przystąpieniem do właściwego konfigurowania swojego środowiska wymagana jest instalacja dwóch programów:

  • SlikSvn – darmowa kompilacja serwera Subversion, która zawiera minimalny zbiór narzędzi i bibliotek, bez integracji z serwerem Tomcat oraz innych niepotrzebnym gadżetów; niestety jest to tylko zbiór plików i to dalsza procedura ma właśnie na celu zrobienie z nich użytku
  • TortoiseSvn – darmowy klient SVN, który umożliwi nam między innymi pobieranie i wkładanie plików do repozytorium z poziomu Explorera Windows; polski słownik i interfejs są również dostępne, co ładnie sprawdza błędy pisowni podczas dołączania komentarzy i opisów plików

 

Właściwa procedura wygląda tak:

 

  1. SvnService - new userTworzymy nowego użytkownika SvnService, w kontekście którego wykonywane będą wszystkie operacje na repozytorium. Pom oże to bardzo w samym zarządzani u dostępem do katalogów oraz innymi uprawnieniami w przyszłości.
     
    (Zarządzanie komputerem / Użytkownicy i grupy lokalne)










     
  2. SvnService - not a local user Poni eważ nie chcemy, aby ktoś na naszym komputerze zalogował się jako ten użytkownik oraz aby nie był on widoczny na stronie startowej Windowsa, usuwamy go z grupy użytkowników (lokalnych).











     
  3. SvnService - logon as serviceDodajemy jednak u prawnienia do logowania w trybie usługi, gdyż SVN będzie uruchamiany właśnie przez tego użytkownika jako lokalna usługa systemowa zaraz po włączeniu komputera.

    (Zasady zabezpieczeń lokalnych / Zasady lokalne / Przypisywanie praw użytkownika / Logowanie w trybie usługi)






     
  4. SvnService - open port [Opcjonalnie] Otwieramy port TCP/IP 3690 (domyślny dla tej usługi ) w używanym firewallu w systemie, aby umożliwić dostęp innym użytkownikom z sieci lokalnej dostęp do przyszłego repozytorium.








     
  5. Dodajemy nową usługę do systemu, która będzie odpowiedzialna za zarządzanie serwerem Subversion, uruchamiana oczywiście z poświadczeniami utworzonego wcześniej użytkownika. Tworzymy równocześnie repozytorium w z góry predefiniowanym miejscu. Wszystko to załatwia prosty skrypt napisany w starym dobrym shellu Windowsa:

    @echo off

    set svnpath=C:\Program Files\SlikSvn\bin
    set svnrepository=E:\Repositories\Local Projects
    set svnaccount=machine\SvnService
    set svnpassword=P@$$w0rd

    sc create svn binpath= "\"%svnpath%\svnserve.exe\" --listen-host 0.0.0.0 --service -r \"%svnrepository%\"" displayname= "Subversion Server" depend= Tcpip start= auto obj= %svnaccount% password= %svnpassword%

    net start svn

    "%svnpath%\svnadmin.exe" create "%svnrepository%"


    [Wymagane!] Zmieniamy parametry odnośnie użytkownika, hasła oraz lokalizacji według własnych wymagań.

    Omówienie parametrów svnserve.exe:

    • --service – od pewnego czasu SVN nie potrzebuje już żadnego zewnętrznego oprogramowania i sam potrafi włączyć się w trybie usługi, nie wymagając interakcji z aktualną sesją użytkownika
    • --listen-host - wymyszenie nasłuchiwania na wszystkich interfejsach IPv4 (szczególnie ważne, gdy spotkamy problemy z połączeniem na Windows Vista)
    • -r – definicja lokalizacji repozytorium, nawet jeśli nie jest ono jeszcze stworzone
    • inne parametry – jak chociażby port, tryb pracy bazy danych z kodem można ustawić według własnych potrzeb, tu pozostawiamy ich domyślne wartości

    Omówienie parametrów sc.exe:

    • create – utworzenie usługi w systemie (delete – usunięcie, ale wymagane jest wcześniejsze jej zatrzymanie poprzez “net stop svn”)
    • svn – nazwa usługi
    • binpath – lokalizacja uruchamianego pliku wraz z listą parametrów
    • displayname – nazwa wyświetlana wewnątrz narzędzi systemowych zarządzających usługami
    • depend – lista innych usług, od których zależy nasz serwer SVN
    • start – sposób uruchamiania usługi (auto = razem ze startem systemu)
    • obj – użytkownik, który uruchamia usługę
    • password – jego hasło

      [Uwaga!] To nie jest błąd, że wszystkie te parametry mają spację pomiędzy znakiem równości a wartościami. To jest właśnie składnia wywołania i przekazywania parametrów menadżera usług.
       
  6. Należy jeszcze tylko zlokalizować katalog z repozytorium i zmienić uprawnienia użytkowników:
    • usunąć prawa dostępu dla wszystkich użytkowników
    • nadać pełnię praw dla użytkownika SvnService
    • prawa te powinny być dziedziczne dla wszystkich elementów tego katalogu i potomnych
       
  7. Edytujemy plik z katalogu repozytorium /conf/svnserve.conf, w którym definiujemy, że:
    • anonimowi użytkownicy nie mają dostępu
    • zalogowani użytkownicy mogą zmieniać wszystkie pliki
    • listę użytkowników znajdziemy w pliku passwd w tym samym katalogu

      anon-access = none
      auth-access = write
      password-db = passwd
  8. Edytujemy plik passwd z tego samego katalogu definiując użytkowników i ich hasła, np.


    [users] 
    harry = harryssecret 
    sally = sallyssecret

  9. TortoiseSVN - repository browse...Testujemy  dostęp do repozytorium, włączając przeglądanie plików w TortoiseSVN ze ścieżką:

    svn://localhost/  lub
    svn://nazwa-maszyny/

    Wpisujemy nasze poświadczenia zdefiniowane w pliku passwd i gotowe! 







      

    TortoiseSVN - open repository URL






     
  10. Od tej porTortoiseSVN - server preview y możemy już cieszyć się opcją importowania danych do repozytorium, tworzenia nowych katalogów, przeglądania wersji i wszystkimi innymi dobrodziejstwami.
     

 









Dodatkowo – jeśli ktoś dobrnął aż tutaj i chciałby dalej pogłębiać swoją wiedzę na temat systemu Subversion, zachęcam do zapoznania się z darmową wersją książki o tym systemie kontroli wersji dostępną on-line w systemie O’Reilly Media tutaj lub off-line w katalogu, do którego zainstalowany został SlikSvn.