diff --git a/git-restore-zip.ps1 b/git-restore-zip.ps1 new file mode 100644 index 0000000..1ad6480 --- /dev/null +++ b/git-restore-zip.ps1 @@ -0,0 +1,34 @@ +param( + [Parameter(Mandatory = $true, Position = 0)] + [string]$Zip, + + [Parameter(Mandatory = $true, Position = 1)] + [string]$Target +) + +$ErrorActionPreference = "Stop" +$WorkDir = ".tmp_restore_mirror" + +if (-not (Test-Path $Zip)) { + Write-Host "Error: file not found: $Zip" + exit 1 +} + +try { + Write-Host "[1/3] Extracting $Zip ..." + New-Item -ItemType Directory -Force -Path $WorkDir | Out-Null + Expand-Archive -Path $Zip -DestinationPath $WorkDir -Force + + Write-Host "[2/3] Pushing all refs to $Target ..." + Push-Location $WorkDir + git remote set-url origin $Target + git push --mirror + Pop-Location + + Write-Host "[3/3] Done. Repository restored at $Target" +} +finally { + if (Test-Path $WorkDir) { + Remove-Item -Recurse -Force $WorkDir + } +}