如何更改颠覆工作副本 UUID?

Ioa*_*oan 13 svn

我最近通过svnadmin dump/load将 Subversion 存储库从旧的 1.2.3 版本更新到 1.6.0 。旧存储库都使用相同的 UUID(存储库是通过复制模板存储库创建的)。我已经通过svnadmin setuuid将几个新存储库上的 UUID 更改为唯一的。我不能只是重新定位这些存储库的现有工作副本,因为 UUID 不同。我知道导出工作副本并从新存储库签出,但我想知道是否有一种方法可以就地更改工作副本的 UUID,就像svnadmin setuuid对存储库所做的那样。

Yve*_*tin 17

Subversion 1.7工作副本格式以来的新答案。您需要sqlite3命令行实用程序。

在您的工作副本的根目录中,现在有一个.svn/包含 SQLite 数据库的文件夹。您可以使用以下命令查询UUID以您的工作副本已知的当前存储库:

$ sqlite3 .svn/wc.db 'select uuid from REPOSITORY where id=1'
b6dc3e6c-5320-4549-b231-c153d86d7525
Run Code Online (Sandbox Code Playgroud)

因此,UUID可以通过以下方式进行更改:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032" where id=1'
Run Code Online (Sandbox Code Playgroud)

当然,.svn/wc.db在调用更新查询之前保留文件的备份。您的存储库实体几乎不可能有不同的 id 或该表中有多行,但您可以检查是否得到意外结果。


Emi*_*l M 8

这是一个适用于 SVN 1.6 及以下版本的命令:

find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;
Run Code Online (Sandbox Code Playgroud)

用实际 ID替换old-uuidnew-uuid


小智 3

您需要编辑拉取的存储库中的所有“条目”文件。如果存储库有很多目录,find + sed 脚本将很快完成该任务。