【问题标题】:(Yet another) What's the best conversion from an SVN repository to HG repository(ies)?(又一个)从 SVN 存储库到 HG 存储库的最佳转换是什么?
【发布时间】:2010-03-04 18:09:09
【问题描述】:

我的公司有一个大型 Subversion (SVN) 存储库,出于各种原因,我们正在考虑迁移到 Mercurial (HG)。我希望学习适合我们情况的“最佳实践”想法。

我们的 SVN 存储库相当单一,看起来像这样:

  • 后备箱
    • Python_Project_1
    • Python_Project_2
    • Python_Shared_Code
    • Flex_Code
    • ObjC_Code
    • ...
  • 分支机构
    • Python_Project_1_Release_1.0.x
    • ...
  • 标签
    • Python_Project_1_Release_1.0.0
    • ...

目前,我们是存储库中任何代码和其他资源的唯一消费者,但切换的部分原因是我们可能/将与其他消费者共享部分代码。因此,我们的项目将分为以下几类可访问性:

  • 私人密码(仅供我们使用)
  • 共享代码(与非公共合作伙伴共享)
  • 公共代码(通过开源许可证共享)

此外,为了强调这一点,一些代码(例如,上面 SVN 存储库示例中的 Python_Shared_Code 文件夹)在项目之间共享,因此应该可以轻松地用于任何 Python 项目(私有代码),并且可能需要可供外部消费者使用(共享代码或公共代码)。

我对如何布局有一些想法,但我想在继续迁移之前获得外部想法。

更新:我不确定从上面是否清楚,但特别是,我正在寻找有关 HG 存储库的布局以及它们如何交互的建议。

更新:这个问题与之前提出的其他几个问题相似——但不完全相同:

与前面问题的主要区别在于“可访问性”和共享代码的概念。有些项目是相互关联的(例如,Python_Project_1 和 Python_Shared_Code),有些可能需要与外部实体共享(例如,共享代码和公共代码)。已经讨论了将单个单一的 SVN 存储库拆分为多个 HG 存储库的概念,但我还没有发现前面讨论过的任何一种共享类型的概念。

【问题讨论】:

  • 嗯,看来你可以用 hg-svn 做一个空运行?
  • 对不起,显然我没有说清楚。我实际上并不担心如何进行迁移,而是更关心迁移后的布局。我已在问题末尾添加了更新以澄清。
  • 正如您所注意到的,这显然是一个重复的问题,并且其他问题有一些很好的答案,可以完全涵盖您的情况。如果您发现它们还不够,也许可以链接到它们并说出您的情况有何不同。因为你只会从骗子那里得到很多复制粘贴的答案,最终有人会关闭它。
  • 感谢您的评论。我已经对问题进行了澄清,解释了为什么我认为这与以前提出的问题不同。 (如果它与我尚未找到的问题重复,指向原始问题的指针也很有用。)
  • 感谢您的澄清。我会在下面插话。

标签: svn mercurial migration repository


【解决方案1】:

我想说this answer 做得很好,建议每个模块单独存储库。

this answer 中,我建议使用 subrepos(are ready)或(我的偏好)从本地构建框(例如 ivy)中提取依赖项的构建系统。

【讨论】:

  • 一些想法:第一个链接的答案只解决了部分问题(每个项目都有一个存储库)。它对相互关联的项目只字未提。第二个答案(使用 subrepos)似乎很接近,但并没有完全做到。例如,考虑以下内容:让 nested 成为 main 的子存储库。当我更新并提交(如有必要,推送)到nested 时,我需要main 也能够更新和获取更改(用户不知道 subrepo 关系)。但是,一些测试表明情况并非如此。
  • 作为对该评论的跟进:具体来说,我需要对 nested 存储库的更改自动在 main 存储库中可用。似乎子存储库仅在相反的方向上起作用(即,对 main 中的子存储库的更改被提升/推回原始 nested 存储库)。
  • subrepos 可以双向使用。使用 subrepos,您有一个指向 subrepo 特定修订版的指针,您可以通过从 main 中更新该 repo 空间来更新指向 subrepo 尖端的指针。它非常像 svn:externals。不过,作为一个过程问题,我建议将 subrepo 指针放在主轨道中,在 subrepo 中放置一些稳定的标签,而不仅仅是最前沿。即使内部有半正式的产品发布也很好,所以你可以声明“外部项目 X 与内部项目 Y 版本 Z 一起工作,如果它不能用 Z+1 编译,就根据 Z 构建它”。
  • 不幸的是,至少对我们来说,我认为“只是从 main 内部更新该回购空间”部分是一个交易破坏者。我需要能够处于项目的顶层,更新并获得所有必要的依赖项。
  • 对于 $(find . -type d -name .hg | xargs -l dirname) 中的repo;做 hg 更新 -R $therepo ;完成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多