如何更改Subversion工作副本UUID?


13

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

Answers:


3

您需要编辑提取的回购中的所有“条目”文件。如果存储库中有很多目录,请使用find + sed脚本简化任务。


17

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或该表中有多行,但是您可以检查是否得到了意外的结果。


+1与重新部署的存储库完美配合,该存储库也更改了UUID
Amro,2013年

8

这是完成SVN 1.6及以下版本的技巧的命令:

find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;

用实际ID 替换old-uuidnew-uuid


1
+1感谢您的解决方案。这对于具有空格的目录不起作用。“找到。-type f -name条目-exec sed -i's / old-uuid / new-uuid / g'{} \;” 没有双引号似乎可行。
汤米(Tommy)

很抱歉,此方法无效,它为我节省了很多时间..对于其他尝试此方法的人,只想添加一个便条即可。MACOX上的Sed似乎需要稍有不同的用法,您需要说一下 sed -i "" 's/old-uuid/new-uuid/' ,它的工作原理(只是多余的双引号)(参考
Karthik T 2012年

2

伊夫·马丁(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'"

感谢您提供了工作副本已重新放置时的详细信息,我不知道这种行为
Yves Martin

1

svn红豆书中的“ 管理存储库UUID ” 部分可能会提供您所需要的答案。


该部分讨论存储库UUID,而不是工作副本UUID。
Ioan

@Ioan:从该部分引述:对于使用Subversion 1.5之前的版本的人,这些任务要复杂一些。您可以通过管道存储库转储文件存根来显式设置存储库的UUID,该存根转储文件存根通过svnadmin load --force-uuid REPOS-PATH承载新的UUID规范-这不是您所需要的吗?
yasouser 2011年

1
再说一次,不,我不是在谈论存储库 UUID,而是工作副本 UUID。工作副本与结帐相同。
Ioan

您不能将工作副本UUID更改为服务器存储库的UUID,而无需更新或SVN将工作副本切换到存储库的[新/现有]位置。
yasouser 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.