Svn 1.7 - 当工作副本具有不存在的版本时,如何将工作副本切换到重定位的repo

时间:2012-02-02 14:07:07

标签: svn switch-statement revision

svn repo http://svn/repoA/path1/中有一个svn项目。请调用此原始回购

这被复制到http://svn/repoA/path2。将此新回购称为。

我们的其中一台机器上的本地工作副本,从原始仓库检出,在此副本发生后进行了更新。

然后原始回购被删除。

我们现在希望将工作副本重新整合到新的回购中。

svn switch适用于此。在项目基目录中运行:

svn switch http://svn/repoA/path2

但是,switch会抱怨,因为项目的修订号在新仓库中不存在。

在svn 1.6中,我会在项目基础目录下以递归方式更改.svn/entries中的修订号,并以明文形式存储。

在svn 1.7中,这些信息似乎不透明地(以某种方式编码)存储到.svn/wc.db或其他新文件中。

我的问题是:如何强制工作副本认为它是复制的修订历史记录的现有修订版,以便我可以将其切换到克隆的repo文件夹,然后更新它?

2 个答案:

答案 0 :(得分:0)

您知道您不想触摸那些.svn目录。我打赌你也打开了电子设备的背面,即使有一个标签清楚地说明 警告:里面没有用户可维修的部件。除非需要通过触电致突然死亡,否则不要打开

是的,我也是。

您仍然可以在旧工作目录上执行svn status以查找已更改的文件,然后将这些文件复制到新的工作目录中。即使旧存储库不存在,svn status也会起作用。

或者,您可以在另一个目录中签出新的工作副本,从旧的工作副本中删除所有旧的.svn目录,然后将所有这些文件复制到新的工作目录中。然后,您可以执行svn status查找已更改的内容,并修复这些问题。

答案 1 :(得分:0)

SVN交换机通常会删除新存储库中不存在的文件,并添加新存储库中存在的文件。但是,在您的情况下,没有相应的修订可以切换到。因此,svn switch确实不适合这项工作。

查看svn import以从已签出的工作回购中重建旧的“原始”服务器仓库。

如果你真的想以你以前的方式去做,请记住SVN现在使用更少的.svn目录。查看结帐的根目录,查找重要的.svn目录。还要记住,大多数信息不再使用文本文件构建,而是在SQLLite二进制数据库中构建。可以使用SQLLite兼容的数据库客户端修改数据库条目;但是,这是非常不推荐的。与使用旧文本文件相比,您将工作存储库变成一堆粘性的风险要大得多。

如果意图删除大量修订历史记录,但您希望reivsion编号匹配,则需要重建repo1以使其缺少不需要的历史记录,但修订版编号匹配。为此,

svnadmin dump /path/to/repo2 -r<start>:<end> > svn.dump
svnadmin create /path/to/repo1
svnadmin load /path/to/repo1 < svn.dump

或者在我的假例子中,rev 8323是要保留的最后一段历史记录,当前转速为9929。

svnadmin dump /path/to/repo2 -r8323:9929 > svn.dump
svnadmin create /path/to/repo1
svnadmin load /path/to/repo1 < svn.dump