Восстановление репозитория Subversion И его возврат в актуальном состоянии с учетом всех локальных изменений

StackOverflow https://stackoverflow.com/questions/1440950

Вопрос

Я не использовал горячую копию для резервного копирования своего репозитория Subversion.Мы используем Visual SVN Server (последний) с черепахой.Я скопировал C: epositories и сделал резервную копию несколько дней назад, и теперь хочу восстановить его.

Теперь я могу использовать репозиторий, скопировав резервную копию папки репозитория.

и затем, я думаю, теперь мне придется вручную просмотреть локальный проект каждого члена команды, чтобы увидеть, у кого есть последняя версия?Если так, то это займет у меня несколько часов.

кто-нибудь знает, это правильный путь или единственный путь?Это действительно эта инструкция?Я думаю, это потому, что у всех локальные изменения разные.

Это было полезно?

Решение

Как насчет этого подхода, каждый разработчик:

<Ол>
  • TortoiseSVN - > Экспорт их недействительной рабочей копии во временную папку
  • Получает новую проверку из восстановленного хранилища
  • Копирует экспортированную рабочую копию (т.е. нет. svn dirs) поверх новой рабочей копии
  • Обновлять и фиксировать как обычно
  • Обратите внимание, что вы можете получить больше конфликтов слияния, чем обычно, но они могут быть разрешены обычным способом.

    Другие советы

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

    Что касается сохранения любых изменений из локальных копий разработчика, да, это будет довольно вручную.Однако «diff» и «patch» — ваши друзья.Если вы не знакомы с cygwin, вам нужно получить его и пакеты diff, patch, diffutils и patchutils, чтобы у вас были команды «diff» и «patch».Вы можете использовать команду «diff», чтобы создать файл, содержащий разницу между одной копией исходного дерева и другой.Вы захотите использовать его следующим образом:

    diff -urN --exclude=.svn fresh_check_from_new_repo old_working_copy > developer1changes.patch
    

    Сделайте это для рабочей копии каждого разработчика.Вы можете взять эти файлы и применить изменения к новой проверке, используя команду «исправить» следующим образом:

    cd working_copy
    patch -p1 -i ...../developer1changes.patch
    

    Теперь у вас будет рабочая копия с внесенными изменениями.(Хотя без добавления svn, svn rms и изменений свойств.) Отсюда определите, что необходимо зафиксировать.

    Вы можете использовать команду «filterdiff», чтобы взять файл исправления и отфильтровать части изменений, передать его по каналу для исправления, и он применит только эти изменения.

    редактировать:Другой вариант:для каждого разработчика создайте ветку и извлеките эту ветку, затем скопируйте их локальную копию поверх файлов в этой новой рабочей копии и зафиксируйте.

    В результате вся работа окажется в репозитории, где она не потеряется.Затем вам придется иметь дело с конфликтами при попытке объединить ветки в ствол.На этом этапе вы сможете использовать инструменты графического интерфейса, чтобы выбрать, какие изменения сохранить, а какие отбросить.

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top