1

我有一个有趣的源代码控制工作流程问题。

我的公司正在与使用 SVN 跟踪当前正在积极开发的产品的第三方承包商合作。我们将在接下来的几个月内接管这个存储库,但我们希望开始研究项目中的其他功能。出于显而易见的原因,我们的承包商拒绝了我们提交访问权限,但同意读取他们的 SVN 存储库的访问权限。

对于我们的 Windows 开发机器,我们使用 mercurial 存储库。 我想以某种方式将 SVN 存储库复制到新的 HG 存储库,并定期将提交给 SVN 的更改合并到 HG 中。 换句话说,我们将在两个不同的存储库中并肩工作。

有没有人做过这样的事情?关于方法的任何建议?

谢谢。

4

2 回答 2

2

我想任何过程都只会随着您在 mercurial 中的变化增加而变得更糟,并且与 SVN 中的变化相距甚远,而 SVN 中的变化永远不会与您的 mercurial 变化合并。但是,我很想知道 mercurial 与这种复杂性如何公平地合并。我会这样处理:

1)从 svn 导出以创建您的 hg 存储库,让我们将此/SvnExportCleanHG Clone 称为工作副本,您公司的所有新功能都将在该副本中使用:/WorkingHG

2)当您想从 SVN 中提取新更改时,请执行 svn update from/SvnExportCleanHG并将其提交到 clean repo。这将有 2 个修订版,来自 svn 的原始版本和最新版本。从内部/WorkingHG运行hg pull /SvnExportCleanHG并合并所有不可避免的变化。然后将其提交给 WorkingHG 存储库。

现在,您已尽最大努力尝试使用 mercurials 合并,并且您仍然/SvnExportCleanHG可以从 SVN 中提取下一个更改而不会发生任何冲突。

每当您想再次从 svn 更新时,请执行第 2 步。从 svn 更新并在 clean repo 中提交永远不会冲突,因为它只会反映 svn,但它始终允许您从工作副本 HG 中提取和合并,因为它们是基于相同。

这取决于您的更改级别以及 SVN 的更改是否会为您带来很多收益。如果你们停留在代码的不同基线中,这将是一个很棒的工作流程,并且可以节省大量的手动工作。如果您重叠严重,这仍然有效,但它只会促进您的工作流程,而不是解决许多合并问题。

如果您尝试过,我会对它的结果非常感兴趣。

于 2012-04-26T00:34:53.170 回答
0

在您开始合并之前,SVN + Mercurial 工作良好。但是,如果您不使用合并,为什么还需要 mercurial。我们几乎有过这样的情况。我们使用 hgsubversion 扩展将 svn 复制到 mercurial,现在所有活跃的开发都在 mercurial 中。然后有时我们只是将 mercurial 工作目录复制到没有历史记录和所有分支的 svn。

于 2012-04-12T20:48:46.727 回答