2010-03-04 9 views
1

Я запускаю VisualSVN в окне VM. VM разбила и исказила изображение. После восстановления старого образа (2007) мы обнаружили, что наша резервная копия данных не работает должным образом. Следовательно, у меня есть куча проектов (~ 20) на моем ноутбуке (на стороне клиента), и я хочу вернуть их на сервер VisualSVN, который теперь пуст.Восстановить сервер VisualSVN от клиентской копии

Я знаю, что это можно сделать, просто добавив файлы проекта вручную, но это займет много времени, потому что я не хочу включать каждый файл (то есть файлы с соблюдением). Любые предложения будут ценны.

+0

@Kevin, удалось ли восстановить сервер svn без ручной обработки определенных файлов? – lostriebo

ответ

1

К сожалению, у меня нет полностью автоматизированное решение для Вас, но так, чтобы выяснить, какие файлы версионируются в хранилище использует список команду с помощью инструмента командной строки:

svn.exe list -R 

Эта команда будет рекурсивно перечислить все файлы, которые SVD-версии будут версироваться в текущем каталоге. После того, как у вас есть этот список, вы можете скопировать их в другой каталог и пакетно передать их в новый репозиторий.

Сочетание этой команды с маской Powershell, вероятно, сделало бы задачу воссоздания репозиториев как можно более безболезненным.

Update:

Я провел некоторое время, играя с Powershell и выяснил, как вы могли бы сделать это. Для примера я собираюсь объяснить исходный каталог репозитория: C: \ source_repos \, а новый каталог репозитория - C: \ dest_repos \.

  1. Открыть командную строку. Это можно сделать через папку «Пуск» в меню «Аксессуары» или запустить «cmd» из окна поиска в Vista/Win7 или Run ... в WinXP.
  2. Из командной строки выполните следующие команды:

    cd C:\source_repos\ 
    echo File > filelist.csv 
    svn.exe list -R >> filelist.csv 
    

    Вторая команда создает filelist.csv с первой строкой, содержащей слово «Файл». Третья команда запускает команду svn list и перенаправляет вывод для добавления в файлlist.csv. В этот момент filelist.csv должен иметь «Файл» в первой строке, за которым следует каждый файл, версированный в вашей директории svn, указанный в отдельных строках.

  3. Возьмите ниже код и вставьте его в файл под названием 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 переменные для каждого прогона.

  4. Open Powershell (его можно найти в Аксессуары на Vista/Win7 или Powershell в WinXP). Перейдите в каталог, в котором вы сохранили вышеупомянутый скрипт и запустите его.Если вы получите сообщение об ошибке, который упоминает «выполнение скриптов отключена в этой системе», запустите

    Set-ExecutionPolicy RemoteSigned 
    

    в PowerShell, чтобы местные скрипты для запуска без подписи.

Это должно быть сделано. Если все пойдет хорошо, вы должны уйти в C:\dest_repos\ и svn add все файлы в новый репозиторий и svn commit их.

Если у вас возникли вопросы о том, что я пытался объяснить или встретить какие-либо нечетные ошибки, дайте мне знать. Я сделал поверхностное тестирование скрипта, но вполне возможно, что я забыл о некоторых случаях.

Удачи вам в восстановлении ваших репозиториев!