Se også: Subversion kommandoer
Indholdsfortegnelse
Installation
Følgende er udført på Ubuntu 20.04 og forudsætter at Apache 2.4 er installeret:
1 |
apt install subversion libapache2-mod-svn subversion-tools |
Opret repository
Du kan oprette et nyt repository på 2 måder.
Her oprettes det i mappen subversion
. Hvis mappen ikke eksisterer, vil svnadmin oprette den:
1 |
svnadmin create /var/www/subversion |
… eller omdannes en eksisterende tom mappe, bemærk punktum efter create
:
1 2 |
cd /var/www/subversion svnadmin create . |
Tilføj brugere
Opret en fil med brugere og adgangskoder. Første gang bruger du -c
(create) for at oprette filen og tilføje en bruger i een og samme arbejdsgang.
1 2 3 4 |
htpasswd -c /etc/apache2/passwd-svn steffen New password: Re-type new password: Adding password for user steffen |
Næste gang du tilføjer en bruger skal du UNDLADE -c
, for ellers tømmer du filen.
1 2 3 4 |
htpasswd /etc/apache2/passwd-svn marie New password: Re-type new password: Adding password for user marie |
Konfigurer subversion
Nu åbner du konfigurationsfilen i Subversion. Jeg har fjernet kommentartegnet (#) og lavet få ændringer til følgende:
/var/www/subversion/conf/svnserve.conf:
1 2 3 4 5 6 7 8 |
# Tillad ikke anonym adgang anon-access = none #Tillad læse/skrive adgang til identificerede brugere auth-access = write #Sti til apache password filen: password-db = /etc/apache2/passwd-svn |
Konfigurer Apache
Nu skal Apache konfigureres. Jeg laver 2 filer, en simpel der dirigerer brugere på port 80 (http) videre til port 443 (https) og den egentlige konfiguration på port 443:
1 2 3 4 5 6 7 8 |
# /etc/apache2/sites-available/repo.eksempel.dk.conf <VirtualHost *:80> ServerName repo.eksempel.dk RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule ^/(.*) https://%{SERVER_NAME}%{REQUEST_URI} [R] </VirtualHost> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# /etc/apache2/sites-available/repo.eksempel.dk.ssl.conf <VirtualHost *:443> DocumentRoot /var/www/subversion ServerName repo.eksempel.dk ErrorLog "|/usr/bin/rotatelogs -l /var/log/apache2/repo.eksempel.dk/error.%Y.%m.%d 86400" CustomLog /var/log/subversion/svn-access_log "%t %u %{SVN-ACTION}e" env=SVN-ACTION <Location "/"> DAV svn SVNPath /var/www/subversion ForceType text/plain #Authenticated users only Require valid-user # authenticating them valid ones AuthType Basic AuthName "Elitemedia Repo" AuthUserFile /etc/apache/passwd-svn </Location> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/repo.eksempel.dk/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/repo.eksempel.dk/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FileMatch> <Directory /var/www/subversion> Options -Indexes </Directory> </VirtualHost> |
Når du herefter tjekker Apaches konfiguration, kan det være du får denne advarsel:
1 2 |
# apachectl -t [Tue Oct 13 15:36:07.383695 2020] [so:warn] [pid 101271] AH01574: module dav_module is already loaded, skipping |
Det skyldes at dav_svn.load og dav.load begge indlæser svn modulet. I dav_svn.load tjekkes det om modulet allerede er indlæst, men det tjek findes ikke i dav.load, og den forsøger derfor at indlæse et modul som dav_svn.load allerede har indlæst, og det genererer ovenstående advarsel. Du kan fikse det ved at indsætte IfModule i dav.load:
1 2 3 4 5 |
#/etc/apache2/mods-available/dav.load <IfModule !mod_dav.c> LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so </IfModule> |
Opret filstruktur
Jeg inddeler subversion i mapper der opdeler indholdet i logiske projekter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
core <- Generisk kode SomePublicWebsite <-Projekt trunk <- Primær udvikling frontend <- Delprojekt backend <- Delprojekt branches <- Sideprojekter frontend backend AdminWebsite trunk frontend backend branches frontend backend ShellScripts trunk cronjobs utilities branches cronjobs utilities |
Opret og tjek ind
Du kan oprette hele filstrukturen i en mappe hvor du har lavet en checkout af dit tomme repo, og så derefter tilføje det det hele:
1 2 3 4 5 6 7 8 9 10 |
svn co https://repo.eksempel.dk/ . mkdir core mkdir -p SomePublicWebsite/trunk/frontend mkdir SomePublicWebsite/trunk/backend ... osv svn add core svn add SomPublicWebsite ... osv svn commit -m "Added new repo filestructure" |
Opret direkte i repository
Du kan oprette filstrukturen direkte i dit repository med svn mkdir
:
1 |
svn mkdir --parents https://repo.eksempel.dk/AdminWebsite/trunk/frontend -m "Adding core/trunk folder" |
Parameteren --parents
sørger for at oprette alle mapper på niveauet over frontend
såfremt disse ikke eksisterer.
Tilføj et eksisterende projekt
Hvis du vil føje et projekt til dit nye repository, uden at medtage historik for projektet, skal du fjerne alle .svn
filer. Du kan også bare hente en ‘ren’ kopi ud af det gamle repository.
Her hentes et projekt ud og placeres i mappen projektmappe. Den vil ikke indeholde nogen .svn filer og bemærk også at de mapper i projektet der IKKE er under versionskontrol, heller ikke medtages:
1 |
svn export https://old-repro.eksempel.dk/sti/til/projekt projektmappe |
Ovenstående henter indholdet af projekt ud i projektmappe. Du får således ikke projektmappe/projekt men blot projektmappe, men det der måtte ligge inde i projekt i dit repository.
Nu kan du zippe mappen, overføre den, pakke den ud og føje den til dit nye repo:
1 |
svn import projektmappe https://repo.eksempel.dk/AdminWebSite/trunk/frontend |
Bemærk også her at det er indholdet af projektmappe der nu placeres i frontend. Ønsker du at føje indholdet af projektmappe til en ny undermappe, skal du gøre følgende:
1 |
svn import projektmappe https://repo.eksempel.dk/AdminWebSite/trunk/frontend/nymappe |