我正在维护一个最初没有使用版本控制系统的项目。相反,将定期将代码库的快照保存到备份文件夹中,并且偶尔会创建临时分支。当我获得项目时,我为它创建了一个Subversion存储库,将每个快照提交到存储库(每次使用WinMerge更新工作副本),并使分支与这个备份文件夹系统中“昂贵”的复制分支相对应。
现在这个项目已经在Subversion中有一段时间了,并且开发已经在主干中实时完成了,我得到了几个从开发人员的机器上拉出的较旧的分支快照文件夹。我在树干的历史中找到了追溯分支的正确位置...然而,我现在的问题是:如果我创建这个分支,我能用它做什么有用的事情吗?我是否可以将这个分支回溯合并到主干的历史记录中,以便为该分支中的文件提供额外的文件历史记录?
本质上,我想要使用这个老的“昂贵的副本”分支,从trunk的历史记录中的适当位置创建一个分支,复制旧的分支,将每个旧的备份副本提交到Subversion分支,然后将所有内容合并回适当的位置,如下面的粗略的ASCII-art图所示:
trunk: ... r107 -> r108 -\-> r109 -> r110 -> .... -> r137 -> .... -> r394
old branch: -> r395 -> r396 -> r397 -/ (r398)当前存储库的修订版是r394。创建分支的操作将是r395。提交两个“昂贵的”副本将是r396和r397。将r137表示的时间点合并回主干“之前”,将把存储库带到r398。现在,从r137查看文件的历史记录还将包括在r396 + r397中提交的更改,以及随后在r398中合并的更改。
如果不重新提交r137,然后进行合并,然后再次提交r394 (我认为这无论如何都不会给我想要的东西),这样的事情是可能的吗?
发布于 2010-09-17 08:05:38
Subversion允许您从旧快照创建分支,因此您可以从r108分支并将更改(r395-397)提交到该分支。但是,您不能返回并在树的历史记录中“插入”提交。如果您拥有服务器的管理员访问权限,则可以使用svnadmin dump完成某种功夫,在历史记录中的适当时间将这些更改插入到树中,但它会在这之后丢弃所有的修订号(更不用说这将是一个相当复杂的过程)。我无法想象这个过程不会导致各种意想不到的问题,特别是合并跟踪。
不久前,我试着做一些类似的事情,我发现将历史从一个无组织的系统移植到一个版本控制系统通常比它的价值更麻烦。取而代之的是,我拍摄了一个代码快照,并进行了彻底的中断;该快照之前的所有内容在使用旧系统的旧服务器上仍然可用,并且从那时起,所有开发都将在Subversion存储库中完成。我们没有丢失任何信息,所有的历史仍然在那里,但它需要开发人员访问旧服务器才能访问它。一开始很烦人,但几个月后,Subversion代码库已经形成了自己的历史,旧系统的构建通常不会被使用,并被迁移到归档服务器。既然您已经设置了Subversion代码库并包含了历史构建,那么在遗留代码和当前代码之间进行干净的划分可能已经太晚了,但是这个想法仍然有效。您可以将此新的历史数据添加到托管您的历史构建的服务器/文件共享中,如果任何人想要查看超过版本200的文件的最详细历史记录(或当您停止提交旧构建并开始进行活动开发时的任何版本号),他们可以检查服务器。
https://stackoverflow.com/questions/3731631
复制相似问题