将现有Git存储库与现有SVN远程关联,没有共同历史记录

时间:2014-02-27 13:44:34

标签: git svn version-control git-svn staging

我最近继承了一个项目,希望通过将我们的内部Git存储库与客户端的SVN存储库相关联来清理“代码交付”工作流。

存储库概述

我公司为客户开发了一个软件包。我们使用Git存储库跟踪我们的更改。完全单独,我们偶尔提供代码丢弃和发布的二进制文件到客户端的SVN存储库。客户端SVN存储库的文件结构是我们自己的文件结构的一个子集 - 它包含一些文件和文件夹,但不是全部。

所需的工作流程

最终,我想我想在我们的git存储库中创建一个名为“ClientSVNDelivery”的分支。该分支应该反映客户端SVN仓库的状态。每当我们想要向客户端提供更新时,我希望git merge我们对该分支的更改(来自“master”),然后git-svn dcommit这些更改直到他们的远程站点。

问题

从逻辑上讲,我所遇到的问题是起点。由于两个存储库都有一个很长的完全无关联的历史记录,并且文件夹结构不相同(同样,SVN项目是我们内部git仓库中文件夹的子集),我不知道如何创建设置我的'ClientSVNDelivery'暂存分支所需的关联(即,如何形成允许合并实际工作的共同祖先)。说实话,我甚至无法描述我想做的事情!

我是否会根据最新的内部版本创建分支?有些任意的早期修改?或者我会从remove-svn历史中分支出来吗?

问题

之前有没有人处理过这种情况?您是否能够简化流程,以及您采取了哪些步骤来设置中间分支?你是如何创建历史协会的?

2 个答案:

答案 0 :(得分:1)

不知道你所描述的快速和好的解决方案,但是,我认为,可能的方法之一是从最新的SVN 分支创建一个Git分支 - 这将给你一个使用Git向客户端提供代码的能力。您可以继续使用Git中的分支机构以及 cherry-pick 更改,仅在指定的路径中更改{Client},如here所述(您可以编写预提交挂钩以放弃更改)在“ClientSVNDelivery”分支中不需要的路径中

答案 1 :(得分:-1)

您可以使用git子命令通过git svn与远程SVN存储库进行交互。阅读它的手册页(由于SVN限制和阻抗不匹配,有几点需要注意)。我没有尝试使用git svn来吸收SVN存储库然后切断,但我没有看到任何原因导致它不起作用。

如果你走git svn路线,请注意SVN并没有真正设置为吸取项目的整个历史记录,这个过程可能需要非常很长时间。如果它崩溃或以其他方式停止而没有全部,你可以重新启动它(至少大部分时间)并继续它的任务。