This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!

Pracując na stanowisku programisty nie uciekniemy od kwestii kontroli wersji. O ile na czyimś serwerze dostaniemy po prostu login, hasło i adres repozytorium, o tyle na swoim [lub jakimkolwiek innym administrowanym przez nas] musimy się o wszystko zatroszczyć sami. W dzisiejszym wpisie chciałbym przedstawić kilka informacji nt. tego, jak naprawić jeden z dosyć irytujących problemów z instalacją własnego serwera SVN.

 

Fotografia: Daquella manera, CC-BY.

SVN: Błąd: "Repository moved permanently to 'url'; please relocate".

W dzisiejszym wpisie nie będę się skupiał na instalacji samego klienta svn i konfiguracji repozytorium w taki sposób, żeby było dostępne na zewnątrz. Zakładam, że każdy znalazł już w Internecie odpowiednie komendy i wpisał je w konsolę. To, o czym dzisiaj chciałbym powiedzieć, to błąd, który pojawia się podczas błędnej konfiguracji modułu DAV dla SVNa.

Tytułowy błąd o złudnie przyjaznej treści nie mówi nam niestety, co faktycznie zostało zepsute. Objawia się on zazwyczaj tym, że kiedy chcemy przejrzeć repozytorium za pomocą przeglądarki, wszystko działa bez żadnego problemu. Sam problem pojawia się podczas próby wykonania checkoutu repozytorium do working copy na naszym komputerze. Pojawia się wtedy komunikat:

Repository moved permanently to 'url'; please relocate.
Gdzie oczywiście "url" oznacza adres naszego repozytorium. Oczywiście można próbować wykonać operację relocate zgodnie z tym, co mówi nam SVN, aczkolwiek na pewno nie jest to przyczyna w takiej sytuacji, jak moja, kiedy próbowałem zrobić checkout dopiero co utworzonej struktury.

Powody mogą być dwa:

O co chodzi w pierwszym przypadku? Otóż, czasem zdarza się, że instalując wszystko "jak leci" umieścimy katalog SVN wewnątrz ścieżki DocumentRoot Apache. Może to być np. /var/www dla Apache i /var/www/svn dla repozytoriów Subversion. Oczywiście w takim przypadku należy przenieść katalog z repozytoriami poza tą ścieżkę [np. do /var/svn] i przynajmniej teoretycznie będzie po problemie.

W tym przypadku dochodzi do konfliktu dwóch funkcji serwera, które próbują wyrwać sobie dany zasób, żeby pokazać go albo w formie zwykłego listingu plików, albo w formie odczytanej struktury plików repo, co będzie o wiele bardziej przydatne.

W drugim przypadku, sytuacja wynika z błędnego ustawienia niepoprawnych wartości zmiennych SVNPath i SVNParentPath w konfiguracji Apache. U mnie problem polegał na tym, że obie miały tą samą wartość. Wystarczyło zostawić jedną z nich, a drugą usunąć i wszystko zaczęło działać poprawnie. Dla potomnych publikuję tutaj przykładową, poprawnie działającą konfigurację, wraz z ustawieniami dot. autoryzacji użytkowników:

  <Location />
    DAV svn
    SVNParentPath /var/svn
    SVNListParentPath on

    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /var/svn/svn.passwd
    AuthzSVNAccessFile /var/svn/svn.access
    Require valid-user
  </Location>

Mam nadzieję, że się przyda. Tymczasem życzę wszystkiego dobrego i zapraszam do lektury kolejnego wpisu już w piątek!