Mirror subversion repository mit Powershell
Heute musste ich den Inhalt von mehreren Repositories zusammenführen.
Dazu habe ich die Inhalte der alten Repositories ins neue kopiert und mit den alten Messages commited.
Folgendes Powershell script hat das erledigt. Das Script ist keine Schönheit und erfüllt nur seinen Zweck.
$i = 0 # Start Revision
$iEnd = 85 # End Revision of old repository
$sLocationOld = (Get-Item .).FullName + "\RepoOld1"
$sLocationNew = (Get-Item .).FullName + "\RepoNew"
while($i -lt $iEnd)
{
Write-Host "Run $i"
cd $sLocationOld
svn up "-r${i}"
$sMessageList = svn log -l 1
$iLine = 0
[string]$sMessage = "";
foreach($sLine in $sMessageList)
{
if($iLine -gt 2 -and $iLine -lt ($sMessageList.Count-1))
{
$sMessage = $sMessage + $sLine + "`r`n"
}
$iLine++
}
if($LASTEXITCODE -ne 0)
{
throw "Error at $i"
}
cd $sLocationNew
Get-ChildItem * -Exclude .svn -Recurse | Remove-Item -Force -Recurse
Remove-Item -Exclude .svn *
Copy-Item -Exclude .svn -Recurse -Force $sLocationOld\* $sLocationNew
Set-Content ..\Message.txt $sMessage
$oItems = Get-Item .\* -Exclude .svn
svn update
foreach($oItem in $oItems)
{
svn add $oItem.Name --force
}
svn commit -F ..\Message.txt
rm ..\Message.txt
if($LASTEXITCODE -ne 0)
{
throw "Error at $i"
}
$i++
}