Answers:
自Subversion 1.7工作副本格式以来的新答案。您需要sqlite3
命令行实用程序。
在工作副本的根目录中,现在有一个.svn/
包含SQLite数据库的文件夹。您可以使用以下方法查询UUID
以您的工作副本闻名的当前存储库:
$ sqlite3 .svn/wc.db 'select uuid from REPOSITORY where id=1'
b6dc3e6c-5320-4549-b231-c153d86d7525
结果,UUID
可以使用以下方法进行更改:
$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032" where id=1'
当然,.svn/wc.db
在调用更新查询之前,请保留文件的备份。您的存储库实体几乎没有机会具有不同的ID或该表中有多行,但是您可以检查是否得到了意外的结果。
这是完成SVN 1.6及以下版本的技巧的命令:
find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;
用实际ID 替换old-uuid
和new-uuid
。
sed -i "" 's/old-uuid/new-uuid/'
,它的工作原理(只是多余的双引号)(参考)
伊夫·马丁(Yves Martin)的答案对使用SVN 1.8的许多工作副本非常有用,但最终我们遇到了无法解决的问题。
在所有情况下,运行不带“ where id = 1”的Yves命令对我们来说都是有效的:
$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032"'
在调查发生这种情况的原因时,我发现在重新定位存储库时会存储多个UUID,这与伊夫(Yves)的直觉是永远都不会发生。
重定位后,将在REPOSITORY表中添加一个新条目,而不是更新现有条目,而是使用新的存储库根及其UUID存储递增的ID。因此,无法正常工作的情况是过去已经重定位的工作副本:该命令似乎可以工作,但仅更改了初始UUID,而不是当前正在使用的UUID。
可以使用以下命令检查工作副本中存储的根目录和UUID的列表:
$ sqlite3 .svn/wc.db 'select id,uuid,root from REPOSITORY'
我最终会注意到,对于Windows命令行/批处理文件,我必须使用一组不同的引号,如下所示:
> sqlite3.exe .svn\wc.db "update REPOSITORY set uuid='1c0d1ec1-2326-0410-bef5-eb29cddfc032'"
svn红豆书中的“ 管理存储库UUID ” 部分可能会提供您所需要的答案。