Удаление репозиториев Git в Azure DevOps не приводит к их полному удалению из командного проекта. Удаленные репозитории перемещаются в корзину проекта, но пока нет никаких инструментов для работы с ней. Однако можно воспользоваться функциями Rest Api для того, чтобы:
- Узнать какие репозитории были удалены
- Восстановить нужные репозитории
- Очистить корзину окончательно
Для работы с Rest Api воспользуемся PowerShell, который позволяет довольно быстро выполнять вызовы и разбирать их результаты. Перед выполнением запросов необходимо знать имя командного проекта и имя организации, а также необходимо сгенерировать Personal Access Token. Эти параметры нужно будет установить в скриптах ниже.
Перед тем как выполнить восстановление репозитория, нужно убедиться, что он находится в корзине проекта. Для этого можно воспользоваться следующим вызовом: Get Recycle Bin Repositories. Далее в результирующем списке можно выполнить поиск необходимого репозитория. Пример просмотра корзины (скрипт GetRecycleBinRepositories.ps1):
$listDeletedRepo = «https://dev.azure.com/$org/$teamProject/_apis/git/recycleBin/repositories?api-version=5.1-preview.1″ $resultDeletedRepo = Invoke-RestMethod -Uri $listDeletedRepo -Method Get -ContentType «application/json» -Headers @{Authorization=(«Basic {0}» -f $base64AuthInfo)} foreach ($repo in $resultDeletedRepo.value) { Write-Host «=============================================» Write-Host «Id :» $repo.id Write-Host «Name:» $repo.name } |
Для восстановления репозитория нужно выполнить следующую команду: Restore Repository From Recycle Bin. В этой функции нужно становить признак deleted в значение false. Пример восстановления репозитория (скрипт RestoreRepositoryFromRecycleBin.ps1):
$restoreRepo = «https://dev.azure.com/$org/$teamProject/_apis/git/recycleBin/repositories/» + $repoId + «?api-version=5.1-preview.1» $restoreBody = «{deleted:false}» $resultrestoredRepo = Invoke-RestMethod -Uri $restoreRepo -Method Patch -ContentType «application/json» -Headers @{Authorization=(«Basic {0}» -f $base64AuthInfo)} -Body $restoreBody Write-Host $resultrestoredRepo |
Если репозиторий не нужен, то его можно удалить окончательно через: Delete Repository From Recycle Bin. При этом здесь нужно передать идентификатор репозитория, который можно узнать через функцию Get Recycle Bin Repositories. Пример удаления репозитория (скрипт для очистки корзины DeleteRepositoriesFromRecycleBin.ps1)
$hardDeleteRepo = «https://dev.azure.com/$org/$teamProject/_apis/git/recycleBin/repositories/» + $repo.id + «?api-version=5.1-preview.1» Invoke-RestMethod -Uri $hardDeleteRepo -Method Delete -ContentType «application/json» -Headers @{Authorization=(«Basic {0}» -f $base64AuthInfo)} Write-Host «Deleted repo:» $repo.name |