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.


