Восстановление хранилища Subversion и получение его в актуальном состоянии с локальными изменениями для всех - PullRequest
2 голосов
/ 17 сентября 2009

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 18 сентября 2009

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

  1. TortoiseSVN -> Экспортирует ли их теперь недействительную рабочую копию во временную папку
  2. Получает новый извлечение из восстановленного хранилища
  3. Копирует экспортированную рабочую копию (т.е. нет. Svn dirs) поверх новой рабочей копии
  4. Обновление и коммит как обычно

Обратите внимание, что вы можете получить больше конфликтов слияния, чем обычно, но они могут быть разрешены обычным способом.

2 голосов
/ 18 сентября 2009

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

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

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

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

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

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

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

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

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

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

...