HomeBlogMagic

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++
}
Permalink: https://adirmeier.de/Blog/ID_369
Tags: Blog, powershell, script, svnvon am 2021-03-26