从工作副本重建本地SVN存储库

时间:2019-08-04 03:44:54

标签: svn

我一直在使用Dropbox中具有本地SVN存储库的项目进行工作,但是其修订历史记录似乎已损坏,无法修复,并且所有签入现在都失败了。因此,我正在考虑从现有工作副本中创建一个新的存储库。只要可以保持开发环境中的实际路径相同(在Mac和Windows开发机上),我就可以保留历史记录。

当然,如果我只是尝试使用svn import来导入本地文件... svn无法将现有路径识别为工作副本,那么它将迫使我将其检出,从而进行了更改一切的位置。

我尝试在新的空存储库中创建一个空的trunk/Client文件夹,并将其检出到现有的<main dev folder>/Client目录中,以便可以将所有项目重新添加到其中。但是SVN客户端拒绝添加<main dev folder>/Client的内容,因为它检测到它们已经在旧存储库中进行版本控制。

当然,即使我在Mac开发机上都将它们全部签入,我也需要拉一个类似的开关,以使Windows开发机从新存储库同步其工作副本。 (我在Mac上使用svnX,在Windows上使用TortoiseSVN,但是我正在Mac客户端上工作,因为该工作副本是最新的。)

关于如何将这些文件放入新存储库而无需重新排列所有内容的任何建议?

(注意:“放弃svn并转到git”实际上是一个可以接受的答案,但是我仍然需要指导;我在这两个方面的经验同样有限!)

1 个答案:

答案 0 :(得分:1)

  1. 必须正确使用svn import,因为此命令“将未版本化的文件或树提交到存储库中”,并且您必须从中准备未版本化的树导入之前您的WC
  2. 每个工作副本都链接到单个存储库,并且此关系存储在WC的元数据中,您必须对其进行更改,以链接旧WC 新存储库svn relocate命令
  3. 为了成功将WC重新定位到新的仓库,您必须为新的存储库提供相同的UUID,就像使用svnadmin setuuid的旧存储库一样

因此

您的迁徙之路

  • 创建WC的未版本副本
  • 创建新的本地空存储库(从第一步开始,我建议为svn://访问类型而不是file:///准备和使用svnserve)
  • 获取旧存储库(在WC中为svn info | grep UUID的UUID并将其应用于新存储库
  • 将树从未版本控制的副本导入到新的存储库中(与旧存储库中相同的相对路径)
  • 将现有的WC迁移到新的存储库
  • 尝试svn up验证结果

但是您可能更愿意完全忘记旧的回购协议并使用

您的短路

  • 创建WC的未版本副本
  • 创建新的本地空存储库(从第一步开始,我建议为svn://访问类型而不是file:///准备和使用svnserve)
  • 将树从未版本控制的副本导入新的仓库
  • 使用svn ls -R <REPO-ROOT-URL>的导入测试结果
  • 删除|存档旧WC并将新WC从新存储库中检出到旧位置