2

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

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

然后我想现在我已经手动浏览了团队中每个人的本地项目,看看谁有最新的修订?如果是这样,那将需要我几个小时。

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

4

2 回答 2

6

这种方法怎么样,每个开发者:

  1. TortoiseSVN -> 是否将他们现在无效的工作副本导出到临时位置
  2. 从恢复的存储库中获取新的签出
  3. 将导出的工作副本(即没有 .svn 目录)复制到新工作副本的顶部
  4. 照常更新和提交

请注意,您可能会遇到比平时更多的合并冲突,但可以以通常的方式解决它们。

于 2009-09-18T02:08:59.657 回答
2

自备份以来所做的任何更改都不存在于存储库中,每个人都必须从恢复的存储库中重新签出。(修订号已更改,如果不更改,您将一团糟。)

至于从开发人员的本地副本中挽救任何更改,是的,这将是相当手动的。但是,“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”命令获取补丁文件并过滤部分更改,将其通过管道传递给补丁,它将仅应用这些更改。

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

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

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

于 2009-09-18T01:50:09.320 回答