所以……我们丢失了 SVN 存储库。由于不幸的情况,我们也没有可行的备份。
该怎么办?只需从具有最新更新的人那里执行“svn 导出”并重新开始即可?有没有办法恢复任何历史记录?或者将我们的本地结帐连接到新服务器?
答案1
如果您只有一次结帐,那么您会获得代码快照,但没有历史记录。
您可以从中创建一个新的存储库。至于在设置新存储库后让现有签出连接到新存储库,这可能比它本身更麻烦。从最旧的签出创建新存储库,然后将较新的签出的更改作为更新提交会更容易。
至于恢复历史记录,我认为如果没有某个时间点的存储库转储(通过 svnadmin dump),这是不可能的。即使是旧的转储也会为您提供从创建存储库到进行转储时的所有历史记录。
也许有人曾经在你的仓库中使用过 git-svn?这可能保留了一些历史记录,但将其恢复到新的 Subversion 仓库可能并不容易。
数据恢复很昂贵,但如果您的存储库所在的存储设备没有被物理破坏或破坏性覆盖(并且它不是 SSD),这也可能是一种选择。
答案2
如果你真的丢失了你的仓库,而且没有备份,那么是的 - 它已经消失了。没有什么魔法可以恢复真正丢失的数据。
因此,如果您有某人的工作副本,您可以创建一个新的存储库并将文件添加到其中。您会丢失所有历史记录(显然),但历史记录已经丢失。
您可以将硬盘驱动器送到恢复公司,尝试恢复所有数据。一旦您拥有了 repo(或至少是 db/revs 和 db/revprops 目录),您就可以从中重新创建 repo(通过将它们复制到新的 repo 目录)。如果事实证明您没有整个 db,那么事情会变得有点棘手,但仍然可以恢复其余数据 - 您可能必须将其全部发送到 collabnet 并获得他们的支持,以将损坏的数据文件恢复到新的、正常工作的 repo 中。
现在,你对拥有最新更新的人说“svn export”……这表明该人有一个你可以导出的备份副本。是这样吗,还是你把它与工作副本混淆了?
答案3
正如 Mark 上面所说,如果您没有存储库的转储(来自服务器),则无法构建历史记录。SVN 签出仅包含签出位置的提示。对不起,您是 SOL。我猜这就是人们喜欢分布式源代码控制的原因。在我们公司,我将其设置为每天两次将 svn diff 发送到 amazon s3。
答案4
首先:没有 SVN-Repo 的备份是一件很麻烦的事,不应该发生。但是,我也遇到了同样的情况。我又开始逐个文件地添加数千个文件,因为我不想签入临时文件或其他无源文件。
几乎所有的历史都消失了。但是上次签到状态并未丢失!我设法获取了最后的签入状态,因此新的 repo 与旧的类似,并且我还获得了最后的差异!
这是我的食谱:
- 备份您的本地结账
- 清理您当地的结账处请参见:屏幕截图 svn-cleanup_to_last_state
- 创建新的 repo
- 将新 repo 签入到新的空文件夹中
- 将旧的干净副本复制到新文件夹中
- 简单添加所有文件
- 提交
- 使用 1 中的备份覆盖新的签出文件夹。
现在,您已获得与以前一样的所有文件,其中包含最后的差异,并且仅包含版本控制的文件,就像以前一样。