恢复Subversion存储库并使每个人的本地更改恢复到最新状态

时间:2009-09-17 19:45:26

标签: svn tortoisesvn visualsvn-server

我没有使用hotcopy来备份我的Subversion存储库。我们使用Visual SVN Server(最新)与乌龟。我复制了C:\ Repositories并在几天前备份了,现在我想恢复它。

我现在可以使用存储库并复制备份的Repository文件夹。

然后我想现在我已经手动浏览了团队中每个人的本地项目,看看谁有修改版本?如果是这样,我将花费数小时。

任何人都知道这是正确的方式还是唯一的方法?真的是这本手册吗?我想这将是因为每个人都在本地有不同的变化。

2 个答案:

答案 0 :(得分:6)

这种方法如何,每个开发人员:

  1. TortoiseSVN - >将现在无效的工作副本导出到临时位置
  2. 从已还原的存储库中获取新的结帐
  3. 将导出的工作副本(即没有.svn dirs)复制到新工作副本的顶部
  4. 按照惯例更新和提交
  5. 请注意,您可能会遇到比平常更多的合并冲突,但可以通常的方式解决它们。

答案 1 :(得分:2)

自备份以来所做的任何更改都不存在于存储库中,并且每个人都必须从还原的存储库中执行新的签出。 (修订号已经改变了,如果不这样做,你就会搞得一团糟。)

至于从开发人员的本地副本中挽回任何更改,是的,这将是相当手动的。但是,“差异”和“补丁”是你的朋友。如果你不熟悉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”命令获取补丁文件并过滤部分更改,将其传输到补丁,并且它将仅应用这些更改。

修改的 另外一个选项: 为每个开发人员创建一个分支并签出该分支,然后将他们的本地副本复制到该新工作副本中的文件并提交。

它可以在存储库中完成所有工作,不会丢失。然后,在尝试将分支合并到主干时,您将不得不处理冲突。此时,您应该能够使用gui工具选择要保留或抛出的更改。

但简短的回答是:你有很多工作要做,因为你没有最近的回购备份...所以一旦你们都能够再次工作,设置更多频繁的备份计划。