合并SVN仓库

3
我有多个svn仓库,我想将它们合并成一个。我尝试了一些svnadmin dump {old-repo} | svnadmin load --parent-dir {new-subfolder} {new-repo}命令来合并它们。但是,是否有一种方法可以将工作副本指向新版本?如果我运行svn switch --relocate {old-repo} {new-repo},就会出现以下错误:

svn:'{new-repo}'的存储库具有uuid“70567957-ca9a-40a3-95c2-c7c7f5304040”,但WC具有'e7f76c56-4d0d-472c-a1f0-6eac23a5d238'

我认为很难进行全新的检查。因为大多数WC都有一些本地更改(如DB凭据/用户图像)。其中一个甚至有一个(必需的)缓存目录,其中包含数百万个图像缩略图,需要约2天才能重新生成。我能否强制svn忽略uuid,只接受新位置?
2个回答

2
在一个新的堆栈交换站点(Unix & Linux)中有一个回答,标题为 svn switch --relocate: wrong uuid?,解释了如何设置新存储库的 UUID。这将产生以下后果:
  • 您只能设置1个 UUID,但您有n个旧存储库。您必须决定使用哪一个,并且对于这个存储库,UUID 的更改可能有效。
  • 所有其他存储库都需要进行新的检出。
很抱歉,似乎没有完整的解决方案。

0

您可以创建当前工作副本的补丁文件,然后重新检出并最终应用这些补丁。

创建补丁文件:

$> svn diff > ~/old_repo.patch

结账:

$> svn co {new_repo}

应用补丁:

$> cd new_repo
$> patch -p0 -i ~/old_repo.patch

这个程序做了我手动操作的相同事情,但仍然无法将WC迁移到新的代码库。 - Paul Jacobse
哦,好的抱歉,我没有理解问题。我会更新我的答案以符合您的要求。 - qwertzguy
这不起作用,因为缓存位于 svn:ignore * 文件夹中。因此它不会包含在补丁中。即使它们在普通文件夹中,由于它们是二进制文件,所以也不会起作用。对吧? - Paul Jacobse
1
不行,如果有二进制文件,你需要更改命令,像这样。此外,如果它们是忽略的唯一文件,请直接复制它们。否则,一个好的做法是检出到一个新目录,然后使用rsync将更改的文件放回去,但不要忘记重新忽略文件夹。 - qwertzguy
我通过“几乎”按照你说的方法解决了这个问题。我检出了新的仓库,从旧的仓库中删除了所有的 .svn 文件夹,并将文件复制过去。因此,svn:ignore 文件夹中的二进制文件和文件也被复制了。 - Paul Jacobse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接