Svn 如何合并subversion存储库?

Svn 如何合并subversion存储库?,svn,merge,repository,revision,svnx,Svn,Merge,Repository,Revision,Svnx,我迁移到一个新的subversion服务器,但其中一个工作副本仍然指向旧的。我已经签入了100多个版本,我不想丢失我的签入。我将自己回答这个问题,但我认为其他人可能会发现它很有用 [以下于2014年2月18日添加] 说清楚,因为我被一个没有留下任何反馈的人否决了,下面的问题似乎不了解情况 我有三个指向存储库的不同工作副本。我将存储库迁移到新服务器。不幸的是,我将其中两个工作副本(目录)指向新服务器,并意外地将其中一个指向旧存储库。我继续检查源代码。当我意识到这个工作副本正在将代码签入错误的存储库

我迁移到一个新的subversion服务器,但其中一个工作副本仍然指向旧的。我已经签入了100多个版本,我不想丢失我的签入。我将自己回答这个问题,但我认为其他人可能会发现它很有用

[以下于2014年2月18日添加]

说清楚,因为我被一个没有留下任何反馈的人否决了,下面的问题似乎不了解情况


我有三个指向存储库的不同工作副本。我将存储库迁移到新服务器。不幸的是,我将其中两个工作副本(目录)指向新服务器,并意外地将其中一个指向旧存储库。我继续检查源代码。当我意识到这个工作副本正在将代码签入错误的存储库时,有100多个签入错误的存储库,大约300个签入新的存储库。合并并不难,只是其中一个文件被重命名了。不知何故,我成功地在两个存储库中重命名了该文件,所以这不仅仅是从旧存储库中转储100个事务并将它们加载到新存储库中的问题。只能出现一个重命名事件。我选择绕过新存储库中的重命名,因为这是我能找到的唯一涉及该目录或其中文件的事务。我希望这能澄清我造成的混乱,以及为什么清理起来很棘手

对于类似的情况,有一些很好的说明,但是我找不到一个关于这场灾难的说明。以前我对subversion了解得相当多,现在我知道得更多了。第一个问题,分支存储库之间存在冲突。我重命名了一个文件,把重命名搞砸了,在下一个版本中又重新命名了它。我还在另一个存储库中正确地重命名了它,所以我不可能只合并存储库。“颠覆”一词非常清楚。我不得不浏览原始存储库,找到令人不快的修订版本(16831684)。我使用的是svnx GUI,所以这并不太难。这里是必须精确的部分。我不得不将主存储库分成两部分。代码如下:

svnadmin dump MasterRepository -r 1:1682 > MasterRepository.svn.20140203_1.dump
svnadmin dump MasterRepository -r 1685:1751 --incremental > MasterRepository.svn.20140203_2.dump
请注意,第二个转储是增量转储。也许可以用其他的方法,但这是第一件对我有效的事情

接下来,仅转储自拆分后的其他存储库中的修订:

/usr/bin/svnadmin dump OtherDepository -r 1624:1721 --incremental > OtherDepository.dump
现在,我需要将原始存储库移到一边:

cd /Library/Server/Subversion
mv MasterRepository MasterRepository.old
在服务器上创建新存储库:

/usr/bin/svnadmin create MasterRepository
加载三个部分存储库,首先是主存储库的第一个转储,然后是其他两个:

/usr/bin/svnadmin load MasterRepository < MasterRepository.svn.20140203_1.dump
/usr/bin/svnadmin load MasterRepository < OtherRepository.dump
/usr/bin/svnadmin load MasterRepository < MasterRepository.svn.20140203_2.dump
(这里我使用svnx签出工作目录,它创建了目录,创建了.svn子目录,并复制了存储库分支中的所有文件)

在svnx中,显示为修改的文件正是正确的文件。
也许有一种更优雅的方法可以做到这一点,但我对结果感到满意。

我不理解这个问题。。。您不能丢失工作副本的签入。您只需执行一个svn切换——重新定位,将工作副本指向存储库的新位置。我知道我不会覆盖/丢失源代码,但在我的签入注释中有一些有价值的信息。我需要合并这两个存储库。而且,仅仅指向新的存储库并不是那么简单。您不能只签出到同一目录。有一个名为.svn的目录需要调整以指向新的存储库,否则文件的所有校验和都将出错。
tar cvf htdocs.tar htdocs
mv htdocs htdocs.old
tar xvf htdocs.tar