Subversion Repositories einrichten

Subversion und Apache einrichten: xampp herunterladen und installieren subversion 1.6 herunterladen und installieren Verzeichnisse für die Repositories anlegen

C:/Repositories/projekt1
C:/Repositories/projekt2
C:/Repositories/projekt3

Repositories anlegen

svnadmin create C:/Repositories/projekt1
svnadmin create C:/Repositories/projekt2
svnadmin create C:/Repositories/projekt3

Apache Module vom Subversion-Installationspfad/bin in das modules-Verzeichnis des Apache kopieren{{{ mod_dav_svn.so mod_authz_svn.so }}} Apache Konfiguration anpassen (httpd.conf)

LoadModule dav_module       modules/mod_dav.so
LoadModule dav_svn_module   modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

Benutzer anlegen (dazu in das bin-Verzeichnis des Apache wechseln), es wird nach jedem Befehl nach dem Passwort gefragt. Die Datei svn-auth-file kann irgendwo liegen.

htpasswd -cm C:\svn-auth-file benutzer1
htpasswd -m C:\svn-auth-file benutzer2
htpasswd -m C:\svn-auth-file benutzer3

Die Datei C:/svn-acl mit folgendem Inhalt anlegen. Die Datei svn-acl sollte bei der svn-auth-file liegen.

[groups]
team1 = benutzer1,benutzer2
team2 = benutzer3
[projekt1:/]
@team1 = rw
* = r
[projekt2:/]
@team2 = rw
* = r
[projekt3:/]
benutzer1 = rw
benutzer2 = r
benutzer3 = rw
* = r

Apache Konfiguration anpassen (httpd.conf)

<Location /projekt1>
  DAV svn
  SVNPath C:/Repositories/projekt1
  AuthType Basic
  AuthName "Subversion Projekt1 repository"
  AuthUserFile C:/svn-auth-file
  Require valid-user
  AuthzSVNAccessFile C:/svn-acl
</Location>
<Location /projekt2>
  DAV svn
  SVNPath C:/Repositories/projekt2
  AuthType Basic
  AuthName "Subversion Projekt2 repository"
  AuthUserFile C:/svn-auth-file
  Require valid-user
  AuthzSVNAccessFile C:/svn-acl
</Location>
<Location /projekt3>
  DAV svn
  SVNPath C:/Repositories/projekt3
  AuthType Basic
  AuthName "Subversion Projekt3 repository"
  AuthUserFile C:/svn-auth-file
  Require valid-user
  AuthzSVNAccessFile C:/svn-acl
</Location>

Apache neu starten bzw am Besten den Rechner neu starten. Die Repositories sind unter http://localhost/projektX zu erreichen. Mit dem Script repo-backup.vbs können Repository-Dumps angelegt werden:

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Const repository1 = "C:\Repositories\PARIMEO"
Const repositorydump1 = "C:\RepositoriesDump\PARIMEO"
Const repository2 = "C:\Repositories\PARIMEOAPPS"
Const repositorydump2 = "C:\RepositoriesDump\PARIMEOAPPS"
Const repository3 = "C:\Repositories\PARIMEOTIME"
Const repositorydump3 = "C:\RepositoriesDump\PARIMEOTIME"
Const repository4 = "C:\Repositories\PARIMEOLOUNGE"
Const repositorydump4 = "C:\RepositoriesDump\PARIMEOLOUNGE"
Const repository5 = "C:\Repositories\PARIMEOSPIELWIESE"
Const repositorydump5 = "C:\RepositoriesDump\PARIMEOSPIELWIESE"


getYoungest = "svnlook.exe youngest "

Set objFSO = CreateObject( "Scripting.FileSystemObject" )
Set WshShell = CreateObject( "WScript.Shell" )

Call CreateDump( repositorydump1, getYoungest & repository1, repository1 )
Call CreateDump( repositorydump2, getYoungest & repository2, repository2 )
Call CreateDump( repositorydump3, getYoungest & repository3, repository3 )
Call CreateDump( repositorydump4, getYoungest & repository4, repository4 )
Call CreateDump( repositorydump5, getYoungest & repository5, repository5 )

WScript.Quit( 0 )

'********************************************************************************
'*
'* End of script body
'*
'********************************************************************************

Sub CreateDump( repositorydump, getYoungestCmd, repository )
  ' Default last revision is 0
  lastRev = 0
  
  ' Does the file exist?
  If ( objFSO.FileExists( repositorydump & "\dump.last" ) ) Then
    Set objFile = objFSO.GetFile( repositorydump & "\dump.last" )
    ' Does it contain anything?
    If ( objFile.Size > 0 ) Then
      Set objTextFile = objFSO.OpenTextFile( repositorydump & "\dump.last", ForReading )
      ' Get the last revison and increase it by 1
      lastRev = objTextFile.Readline
    End If
  End If
  
  ' Execute the getYoungestCmd and read its output
  Set objExec = WshShell.Exec( getYoungestCmd )
  
  Do While ( objExec.Status <> 1 )
       WScript.Sleep 100
  Loop
  
  youngest = objExec.StdOut.Readline
  
  ' Is the youngest revision above the last one?
  If not ( youngest > lastRev ) Then
    Set objLogFile = objFSO.OpenTextFile( repositorydump & "\dump.log", ForAppending, True )
    objLogFile.WriteLine Now & " No DUMP neccessary"
    objLogFile.Close
    Exit Sub
  End If
  
  ' Compose the file name
  dumpFileName = repositorydump & "\dump" & "-" & lastRev+1 & "-" & youngest & ".dmp"
  
  ' Add incremental, if not starting a new dump
  incremental = ""
  If ( lastRev > 0 ) Then
    incremental = " --incremental"
  End If
  
  ' Compose the dump command for the current repository
  dumpCommand = "svnadmin.exe dump " & repository & "
 --revision " & lastRev+1 & ":" & youngest & incremental ' Open the destination file and execute the dump command Set objDumpFile = objFSO.OpenTextFile( dumpFileName, ForWriting, True ) Set objExecDump = WshShell.Exec( dumpCommand ) ' Read the dump output and write it to the file Do While True If Not objExecDump.StdOut.AtEndOfStream Then input = objExecDump.StdOut.Read( 1 ) objDumpFile.Write input Else Exit Do End If Loop objDumpFile.Close ' Write the latest revision into the file Set objTextFile = objFSO.OpenTextFile( repositorydump & "\dump.last", ForWriting, True ) objTextFile.Write youngest objTextFile.Close Set objLogFile = objFSO.OpenTextFile( repositorydump & "\dump.log", ForAppending, True ) objLogFile.WriteLine Now & " " & dumpCommand objLogFile.Close End Sub

Das Skript erstellt inkrementelle Backups beginnend bei Revision 0 und dann immmer von der zuletzt gesicherten Revision zur aktuellen Revision.