我最近通过以下方式将 Subversion 存储库从旧的 1.2.3 版本更新到 1.6.0svnadmin 转储/加载。旧存储库都使用相同的 UUID(存储库是通过复制模板存储库创建的)。我通过以下方式更改了几个新存储库的 UUIDsvnadmin 设置uid是唯一的。我不能直接重新定位这些存储库的现有工作副本,因为 UUID 不同。我知道导出工作副本并从新存储库中签出,但我想知道是否有办法直接更改工作副本的 UUID,比如svnadmin 设置uid对存储库有用。
答案1
您需要编辑提取的存储库中的所有“条目”文件。如果存储库有很多目录,find + sed 脚本将快速完成该任务。
答案2
自此以后的新答案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 或该表中有多行,但您可以检查是否获得了意外结果。
答案3
下面是一个适用于 SVN 1.6 及以下版本的命令:
find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;
将old-uuid
和替换new-uuid
为实际的 ID。
答案4
这部分 ”管理存储库 UUID”svn红豆书中或许有你要找的答案。