К сожалению, у меня нет полностью автоматизированное решение для Вас, но так, чтобы выяснить, какие файлы версионируются в хранилище использует список команду с помощью инструмента командной строки:
svn.exe list -R
Эта команда будет рекурсивно перечислить все файлы, которые SVD-версии будут версироваться в текущем каталоге. После того, как у вас есть этот список, вы можете скопировать их в другой каталог и пакетно передать их в новый репозиторий.
Сочетание этой команды с маской Powershell, вероятно, сделало бы задачу воссоздания репозиториев как можно более безболезненным.
Update:
Я провел некоторое время, играя с Powershell и выяснил, как вы могли бы сделать это. Для примера я собираюсь объяснить исходный каталог репозитория: C: \ source_repos \, а новый каталог репозитория - C: \ dest_repos \.
- Открыть командную строку. Это можно сделать через папку «Пуск» в меню «Аксессуары» или запустить «cmd» из окна поиска в Vista/Win7 или Run ... в WinXP.
- Из командной строки выполните следующие команды:
cd C:\source_repos\
echo File > filelist.csv
svn.exe list -R >> filelist.csv
Вторая команда создает filelist.csv с первой строкой, содержащей слово «Файл». Третья команда запускает команду svn list и перенаправляет вывод для добавления в файлlist.csv. В этот момент filelist.csv должен иметь «Файл» в первой строке, за которым следует каждый файл, версированный в вашей директории svn, указанный в отдельных строках.
- Возьмите ниже код и вставьте его в файл под названием reposcopy.ps1:
# Assumptions/Notes:
# - No crazy file names with "\" in them!
# - A file named filelist.csv was created by running:
# svn.exe list -R >> filelist.csv
# and is in the base directory of the source repository.
# - The first line of filelist.csv is "File" without quotes, this is
# important for the Import-Csv command
# - If you get an error about permissions when you try to run the script,
# use the command "Set-ExecutionPolicy RemoteSigned" in the powershell
# Source & destination repository directories
$src = "C:\source_repos\"
$dest = "C:\dest_repos\"
# Get current directory
$origdir = Get-Location
# Goto source repository directory
Set-Location $src
# Check if destination repository directory exists, if not create it
if (![IO.Directory]::Exists($dest)) {
[IO.Directory]::CreateDirectory($dest)
}
# Import filelist.csv created with these commands at a command prompt:
# cd C:\source_repos
# echo File > filelist.csv
# svn.exe list -R >> filelist.csv
$filelist = Import-Csv filelist.csv
# Go through each line in the filelist
foreach ($line in $filelist) {
# Concatenate the filename with the source and destination directories
$srcfile = [String]::Concat($src, $line.File)
$destfile = [String]::Concat($dest, $line.File)
# If the destination file is a directory and it doesn't exist create it
# Otherwise copy the source file to the destination.
if ($destfile.EndsWith("\")) {
if (![IO.Directory]::Exists($destfile)) {
[IO.Directory]::CreateDirectory($destfile)
}
} else {
Copy-Item $srcfile $destfile
}
}
# Go back to the original directory
Set-Location $origdir
Вам нужно будет изменить $src
и $dest
переменные для каждого прогона.
- Open Powershell (его можно найти в Аксессуары на Vista/Win7 или Powershell в WinXP). Перейдите в каталог, в котором вы сохранили вышеупомянутый скрипт и запустите его.Если вы получите сообщение об ошибке, который упоминает «выполнение скриптов отключена в этой системе», запустите
Set-ExecutionPolicy RemoteSigned
в PowerShell, чтобы местные скрипты для запуска без подписи.
Это должно быть сделано. Если все пойдет хорошо, вы должны уйти в
C:\dest_repos\
и
svn add
все файлы в новый репозиторий и
svn commit
их.
Если у вас возникли вопросы о том, что я пытался объяснить или встретить какие-либо нечетные ошибки, дайте мне знать. Я сделал поверхностное тестирование скрипта, но вполне возможно, что я забыл о некоторых случаях.
Удачи вам в восстановлении ваших репозиториев!
@Kevin, удалось ли восстановить сервер svn без ручной обработки определенных файлов? – lostriebo