在一次重大服务器故障后,svn 存储库被破坏,我的工作版本是最新版本,
有什么方法可以从我的工作版本重新创建 svn 存储库?
在新服务器上安装 svn 并尝试使用我的工作副本后
svn switch NEW_SVN_PATH .
我收到一个错误
Repository UUID '1c604742-6b16-462b-86e4-cc8bce959242' doesn't match expected UUID '6df69aeb-a72c-450d-8102-24036a3855f7'
答案1
初始化新的 svn 存储库后
- 在客户端上,将当前工作目录通过 svn 导出到其他位置
- 从导出的位置执行 svn 导入到新的 svn url
- 现在执行 svn relocate 到新创建的存储库。
虽然这可能有效,但我认为,与其重新安置,不如重新结账
答案2
不得不处理这个问题。我使用托管的 subversion,然后进行了转储,然后导入。他们的导入过程没有将 UUID 从旧存储库转移到新存储库,所以我得到了与 OP 相同的错误。Stack Exchange 网站上的所有答案都只告诉您如何使用“svnadmin setuuid”来处理这个问题,但这对我来说不是一个选择,因为我使用托管服务(因此 svnadmin 将无法访问存储库)。我本可以输入票证,但不想等待,所以这里是如何我通过手动更新工作副本的 UUID 修复了这个问题:
警告:只有当您确定工作副本和您重新指向的存储库完全同步时才可以尝试此操作。如果不同步,不确定会发生什么。
该过程基本上是将工作副本的隐藏 svn 文件夹(名为 .svn 或 _svn 的文件夹)中名为“entries”的文件中的老 UUID 替换为新 UUID。完成后,您可以使用 TortoiseSVN 的“重新定位”将工作目录指向新的存储库 URL。
- 在控制台窗口中,cd 到工作文件夹的根目录。
- 运行命令以递归方式从“entries”文件中删除“只读”属性:
attrib -R entries /S
- 使用文本编辑器的“在文件中替换”功能将旧 UUID 替换为新 UUID。我使用了 Visual Studio,设置如下:查找:PATH_TO_WORKING_FOLDER_ROOT / 包含子文件夹:已选中 / 查看这些文件类型:条目
- 撤消步骤 #2:
attrib +R entries /S
- 将工作副本“重新定位”到新 URL。我使用了 TortoiseSVN:右键单击工作文件夹,TortoiseSVN->重新定位。
我认为第 5 步所做的只是替换“条目”文件中的 URL,因此如果您愿意,您可以手动执行此操作。也可以使用“svn”命令行工具,但我记不清命令是什么了。
答案3
您可以在空存储库上设置 UUID。然后导入您拥有的文件。您将丢失历史记录(它不会保留在工作副本中)。但是,通过将 UUID 设置为与旧存储库匹配,您可以避免 svn 切换上的错误消息。
$ svnlook uuid /var/svn/repos
cf1b8d31-acb6-02dc-bc7c-16e92ce6dbec
$ svnadmin setuuid /var/svn/repos # generate a new UUID
$ svnlook uuid /var/svn/repos
4c2c49fe-acc1-23dc-acbc-2b28ff0c9e6c
$ svnadmin setuuid /var/svn/repos 1c604742-6b16-462b-86e4-cc8bce959242 # restore the old UUID
$ svnlook uuid /var/svn/repos 1c604742-6b16-462b-86e4-cc8bce959242
答案4
我遇到了同样的问题,但由于我们使用托管选项,所以我svnadmin
也无法解决。
这是我在另一个项目中使用的外部程序,我这样做是为了修复它:
- 备份我所有的本地更改。
rm -rf
目录(外部已签入)- 删除
svn:external
(并提交) svn up
svn:external
再次添加