我今天遇到了一个有趣的Catch 22,试图恢复旧的Subversion仓库和工作副本。
我最初移动并升级了仓库,然后升级工作副本并将其指向新移动的仓库。
$ svn upgrade
svn: E180001: Unable to connect to a repository at URL 'file:///OLD/REPO/PATH'
svn: E180001: Unable to open an ra_local session to URL
svn: E180001: Unable to open repository 'file:///OLD/REPO/PATH'
因此,升级失败,因为repo指向错误的位置。没问题,我会在新的回购路径上重新命名工作副本:
$ svn switch --relocate file:///OLD/REPO/PATH file:///NEW/REPO/PATH .
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: Working copy '/WORKING/COPY/PATH' is too old (format 10, created by Subversion 1.6)
这是一个完美的Catch 22 - 无法升级,因为repo路径错误,因为你没有升级而无法修复repo路径。
答案 0 :(得分:3)
我的工作副本建议我应该进行“svn升级”。执行此操作后,我无法使用URL“file:/// ...”连接到我的本地存储库。所有替代方案都不起作用,除了我在以下几行中注释的那个。
我通过以下步骤解决了这个问题:
这对我有用。希望这有帮助!
答案 1 :(得分:1)
我发布了我想出的答案,以防有人帮忙。但这并不理想,所以我很想知道别人是否有更好的解决方案。
我抓住工作副本中的文件,看看/ OLD / REPO / PATH的提到位置;唯一的地方是每个文件夹中的“.svn / entries”文件。
所以,我想通过运行一个快速的bash脚本替换每个条目文件中的路径来创建自己的“svn switch --relocate”:
#!/bin/bash
for f in `sudo find . -name "entries"`
do
sudo perl -pi -e 's/OLD\/REPO\/PATH/NEW\/REPO\/PATH/g' "$f"
done
任何人都知道更简单的方法,或者手动更改“条目”文件中的repo路径有什么不利之处?
答案 2 :(得分:1)
一种解决方案是降级subversion客户端,或者将旧二进制文件安装在不同的目录中,并暂时将该位置预先添加到您的路径中。这将允许您首先重新定位存储库,然后您可以切换到新客户端并升级它。