我正在尝试切换到新的 SVN 存储库。
我目前有以下结帐:
$ svn info
svn+ssh://some.server.edu/home/name/svn-repositories/proj/trunk
现在我想切换,但出现错误:
$ svn switch --relocate \
svn+ssh://some.server.edu/home/name/svn-repositories/proj/trunk \
https://subversion.assembla.com/svn/name/trunk/proj .
svn: The repository at 'https://subversion.assembla.com/svn/name/trunk/proj'
has uuid '...', but the WC has '...'
我认为重点是svn switch --relocate
有两个具有不同 uuid 的存储库?如何正确切换到新的存储库?
顺便说一句,目录应该是正确的:旧的proj/trunk
和新的trunk/proj
包含完全相同的文件等:
$ svn ls https://subversion.assembla.com/svn/<name>/trunk/proj
foo.txt
$ svn ls svn+ssh://some.server.edu/home/name/svn-repositories/proj/trunk
foo.txt
我在 Mac 上使用 svn 1.6.5。
答案1
svn switch --relocate
期望在新的 URL 上找到相同的存储库,而不是不同的存储库。
您是否用于svnsync
创建新存储库?在这种情况下,您可以使用svnadmin setuuid
与旧存储库相同的 uuid。根据svn 书中的 svnsync 文档,这应该使您能够重用现有的工作副本。
答案2
--relocate
如果该 URL 用于访问您的工作副本,则该标志会更新您的工作副本现存的存储库更改。 SVN 没有一个好的方法来将工作副本切换到新的存储库,因为即使它可能包含相同的文件,许多其他内容也可能会有所不同——历史记录、签入次数、文件内容等等,而 SVN 的设计目的并不是考虑这些类型的差异。
您纯粹从客户的角度提出了您的问题,但是对您正在尝试做的事情有一个更大的了解会很有用。例如,您是否正在尝试将自己的存储库移动到新服务器?如果是的话,您使用了什么方法,是否有更好的方法?或者您是否一直在使用由其他人管理的存储库并且他们移动了它?旧存储库的所有历史记录是否都存在于新存储库中?您/他们是否无法将 SVN 数据库文件复制到新服务器而不是创建全新的存储库?
有一种方法可以强制执行您想要的操作,即从工作副本中删除 .svn 目录(首先进行备份!),从新服务器中签出新副本,然后从工作副本中移动所有 .svn 目录。将新副本复制到工作副本中的相应位置。但只有在考虑了大局之后才这样做。