【问题标题】:How can I merge subversion repositories?如何合并颠覆存储库?
【发布时间】:2014-02-27 18:46:17
【问题描述】:

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

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

需要明确的是,因为我被一个没有反馈的人否决了,下面的问题似乎不理解这种情况。

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

【问题讨论】:

  • 我不明白这个问题...您不能丢失工作副本中的签入。您可以简单地执行 svn switch --relocate 将工作副本指向存储库的新位置。
  • thekbb:我不明白你的担心。我知道我不会覆盖/丢失源代码,但在我的签入 cmets 中有有价值的信息。我需要合并这两个存储库。此外,仅仅指向新的存储库也不是那么简单。您不能只签出到同一个目录。那里有一个名为 .svn 的目录需要调整以指向新的存储库,否则文件的所有校验和都会出错。

标签: svn merge repository revision svnx


【解决方案1】:

对于类似情况有一些很好的说明,但我找不到针对这场灾难的说明。以前我对颠覆的了解相当多,现在我知道的更多。第一个问题,分叉的存储库有冲突。我重命名的一个文件,弄乱了重命名,并在下一个修订版中再次重命名。我还在另一个存储库中正确地重命名了它,所以我不可能只合并存储库。 Subversion 非常清楚地说明了这一点。我不得不遍历原始存储库并找到有问题的修订版(1683、1684)。我使用的是 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

加载三个部分存储库,首先是 Master 的第一个转储,然后是其他两个:

/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 不想让我将原始目录用作工作副本的问题。我最终把它移到一边。签出新版本,并使用 tar 复制旧目录并将其粘贴到新目录的顶部。

tar cvf htdocs.tar htdocs
mv htdocs htdocs.old

(这里我使用svnx签出到工作目录,创建了目录,创建了.svn子目录,复制了repository分支中的所有文件)

tar xvf htdocs.tar

查看 svnx,显示为已修改的文件正是正确的。 可能有更优雅的方式来实现这一点,但我对结果很满意。

【讨论】:

    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多