从 git-svn 移动到 git

Moving from git-svn to git

我们将项目的主存储库保存在 SVN 中。然后,为了让工作更轻松,我们每个人都将 git svn clone SVN 的主干连接到 git 的 master,我们使用 git 流程工作。当我们的工作在功能分支中完成后,我们将其合并到 master 中并执行 git svn dcommit 将更改推送到 SVN 存储库。

但现在我们需要放弃 SVN 存储库并完全切换到 git。如果我们想保留历史和尚未合并到master的分支,我们如何实现?

我是这么想的:我们使用 git svn clone 制作当前 SVN 存储库的干净副本,并将其放置在我们的服务器上 - 这将是我们的 "central" 存储库。现在,我们将把这个存储库作为远程添加到我们现有的存储库。但是我该怎么做呢?我可以用新主人换旧主人吗?然后我可以将旧的、尚未合并的功能分支合并到新的 master 而不会产生不必要的冲突吗?

让我们从头开始:您应该在 git 上设置一个 "clean" svn 克隆,而无需独立开发人员所做的任何私人工作。这样你们就可以共享相同的修订版,否则人们会有不同的历史,无法聚在一起....或者更糟的是,git 上的多个修订版实际上与单个 svn 修订版匹配.

然后,每个开发人员都可以将此存储库用作官方 "remote",他们可以将其添加到他们当前的设置中。一旦他们有了这个,他们就可以随意改变他们的私有分支,这样就没有人会丢失他们以前的任何工作(我并不是说这是一件微不足道的事情......每个分支都有不同的起点点所以如果你想正确完成工作,每个分支都必须单独处理....甚至可以考虑使用一个脚本来分析在旧的 svn 修订版和来自新的通用 svn clone) 的新修订版,然后你(每个开发人员)可以摆脱他们一开始使用的原始(svn)远程仓库,这样你就可以开始了与纯粹的 git 工作流交互而忘记 svn 交互。

既然你完全放弃了 SVN,你可以告诉每个人在某个截止日期将他们开放的功能分支提交到 SVN 分支。然后 "freeze" SVN,将其转换为 Git (包括功能分支)。之后每个开发人员都可以克隆新的存储库并轻松地继续工作。

由于 SVN 在截止日期 "dirty" 之后不再重要,半就绪的功能分支不再重要。